// Copyright 2019 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

load('test/mjsunit/wasm/wasm-module-builder.js');

const builder = new WasmModuleBuilder();
const sig0 = builder.addType(makeSig([kWasmF32], [kWasmI32]));
const sig1 = builder.addType(makeSig([kWasmI64, kWasmI32, kWasmI64, kWasmF32, kWasmI64], [kWasmF32]));
const sig2 = builder.addType(makeSig([kWasmF32], [kWasmF32]));
// Generate function 1 (out of 3).
builder.addFunction(undefined, sig0).addBody([kExprI32Const, 0x00]);
// Generate function 2 (out of 3).
builder.addFunction(undefined, sig1)
  .addBody([
    // signature: f_lilfl
    kExprBlock, kWasmF32,   // @1 f32
    kExprI32Const, 0x00,
    kExprIf, kWasmStmt,   // @5
      kExprLoop, kWasmStmt,   // @7
        kExprBlock, kWasmI32,   // @9 i32
          kExprF32Const, 0x00, 0x00, 0x80, 0xc1,
          kExprF32Const, 0x00, 0x00, 0x80, 0x45,
          kExprCallFunction, 0x00, // function #0: i_f
          kExprBrIf, 0x03,   // depth=3
          kExprDrop,
          kExprI32Const, 0xd8, 0x00,
          kExprEnd,   // @29
        kExprBrIf, 0x00,   // depth=0
        kExprEnd,   // @32
      kExprF32Const, 0x00, 0x00, 0x80, 0x3f,
      kExprF32Const, 0x00, 0x00, 0x80, 0xc6,
      kExprBlock, kWasmI32,   // @43 i32
        kExprF32Const, 0x00, 0x00, 0x80, 0x3f,
        kExprCallFunction, 0x02, // function #2: f_f
        kExprDrop,
        kExprI32Const, 0x68,
        kExprEnd,   // @55
      kExprBrIf, 0x01,   // depth=1
      kExprI32Const, 0x00,
      kExprSelect,
      kExprDrop,
      kExprUnreachable,
    kExprElse,   // @63
      kExprNop,
      kExprEnd,   // @65
    kExprF32Const, 0x00, 0x00, 0x69, 0x43,
    kExprEnd   // @71
]);
// Generate function 3 (out of 3).
builder.addFunction(undefined, sig2).addBody([
  kExprF32Const, 0x00, 0x00, 0x80, 0x3f
]);
builder.instantiate();