(module
 (type $none_=>_i32 (func (result i32)))
 (type $none_=>_none (func))
 (type $none_=>_i64 (func (result i64)))
 (import "env" "func" (func $import (result i64)))
 (memory $0 1 1)
 (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0))
 (func $defined (result i32)
  (local $0 i32)
  (local $0$hi i32)
  (local $i64toi32_i32$0 i32)
  (local $i64toi32_i32$1 i32)
  (local $i64toi32_i32$2 i32)
  (local $i64toi32_i32$3 i32)
  (local $i64toi32_i32$4 i32)
  (local $i64toi32_i32$5 i32)
  (block
   (local.set $0
    (block (result i32)
     (local.set $i64toi32_i32$2
      (block (result i32)
       (local.set $i64toi32_i32$0
        (i32.const 0)
       )
       (i32.const 1)
      )
     )
     (local.set $i64toi32_i32$3
      (block (result i32)
       (local.set $i64toi32_i32$1
        (i32.const 0)
       )
       (i32.const 2)
      )
     )
     (local.set $i64toi32_i32$4
      (i32.add
       (local.get $i64toi32_i32$2)
       (local.get $i64toi32_i32$3)
      )
     )
     (local.set $i64toi32_i32$5
      (i32.add
       (local.get $i64toi32_i32$0)
       (local.get $i64toi32_i32$1)
      )
     )
     (if
      (i32.lt_u
       (local.get $i64toi32_i32$4)
       (local.get $i64toi32_i32$3)
      )
      (local.set $i64toi32_i32$5
       (i32.add
        (local.get $i64toi32_i32$5)
        (i32.const 1)
       )
      )
     )
     (local.get $i64toi32_i32$4)
    )
   )
   (local.set $0$hi
    (local.get $i64toi32_i32$5)
   )
  )
  (block
   (local.set $i64toi32_i32$2
    (block (result i32)
     (local.set $i64toi32_i32$5
      (local.get $0$hi)
     )
     (local.get $0)
    )
   )
   (global.set $i64toi32_i32$HIGH_BITS
    (local.get $i64toi32_i32$5)
   )
   (return
    (local.get $i64toi32_i32$2)
   )
  )
 )
 (func $unreachable-select-i64 (result i32)
  (local $i64toi32_i32$0 i32)
  (unreachable)
  (block
   (drop
    (block (result i32)
     (local.set $i64toi32_i32$0
      (i32.const 0)
     )
     (i32.const 1)
    )
   )
   (unreachable)
   (drop
    (i32.const 2)
   )
  )
  (unreachable)
 )
 (func $unreachable-select-i64-b (result i32)
  (local $i64toi32_i32$0 i32)
  (unreachable)
  (block
   (unreachable)
   (drop
    (block (result i32)
     (local.set $i64toi32_i32$0
      (i32.const 0)
     )
     (i32.const 3)
    )
   )
   (drop
    (i32.const 4)
   )
  )
  (unreachable)
 )
 (func $unreachable-select-i64-c (result i32)
  (local $i64toi32_i32$0 i32)
  (local $i64toi32_i32$1 i32)
  (unreachable)
  (block
   (drop
    (block (result i32)
     (local.set $i64toi32_i32$0
      (i32.const 0)
     )
     (i32.const 5)
    )
   )
   (drop
    (block (result i32)
     (local.set $i64toi32_i32$1
      (i32.const 0)
     )
     (i32.const 6)
    )
   )
   (unreachable)
  )
  (unreachable)
 )
 (func $mem
  (local $0 i32)
  (local $0$hi i32)
  (local $1 i32)
  (local $1$hi i32)
  (local $2 i32)
  (local $2$hi i32)
  (local $3 i32)
  (local $3$hi i32)
  (local $4 i32)
  (local $4$hi i32)
  (local $i64toi32_i32$0 i32)
  (local $i64toi32_i32$1 i32)
  (local $i64toi32_i32$2 i32)
  (block
   (local.set $0
    (block (result i32)
     (local.set $i64toi32_i32$2
      (i32.const 0)
     )
     (local.set $i64toi32_i32$0
      (i32.load
       (local.get $i64toi32_i32$2)
      )
     )
     (local.set $i64toi32_i32$1
      (i32.load offset=4
       (local.get $i64toi32_i32$2)
      )
     )
     (local.get $i64toi32_i32$0)
    )
   )
   (local.set $0$hi
    (local.get $i64toi32_i32$1)
   )
  )
  (drop
   (block (result i32)
    (local.set $i64toi32_i32$1
     (local.get $0$hi)
    )
    (local.get $0)
   )
  )
  (block
   (local.set $1
    (block (result i32)
     (local.set $i64toi32_i32$2
      (i32.const 0)
     )
     (local.set $i64toi32_i32$1
      (i32.load
       (local.get $i64toi32_i32$2)
      )
     )
     (local.set $i64toi32_i32$0
      (i32.load offset=4
       (local.get $i64toi32_i32$2)
      )
     )
     (local.get $i64toi32_i32$1)
    )
   )
   (local.set $1$hi
    (local.get $i64toi32_i32$0)
   )
  )
  (drop
   (block (result i32)
    (local.set $i64toi32_i32$0
     (local.get $1$hi)
    )
    (local.get $1)
   )
  )
  (block
   (local.set $2
    (block (result i32)
     (local.set $i64toi32_i32$2
      (i32.const 0)
     )
     (local.set $i64toi32_i32$0
      (i32.load align=2
       (local.get $i64toi32_i32$2)
      )
     )
     (local.set $i64toi32_i32$1
      (i32.load offset=4 align=2
       (local.get $i64toi32_i32$2)
      )
     )
     (local.get $i64toi32_i32$0)
    )
   )
   (local.set $2$hi
    (local.get $i64toi32_i32$1)
   )
  )
  (drop
   (block (result i32)
    (local.set $i64toi32_i32$1
     (local.get $2$hi)
    )
    (local.get $2)
   )
  )
  (block
   (local.set $3
    (block (result i32)
     (local.set $i64toi32_i32$2
      (i32.const 0)
     )
     (local.set $i64toi32_i32$1
      (i32.load align=1
       (local.get $i64toi32_i32$2)
      )
     )
     (local.set $i64toi32_i32$0
      (i32.load offset=4 align=1
       (local.get $i64toi32_i32$2)
      )
     )
     (local.get $i64toi32_i32$1)
    )
   )
   (local.set $3$hi
    (local.get $i64toi32_i32$0)
   )
  )
  (drop
   (block (result i32)
    (local.set $i64toi32_i32$0
     (local.get $3$hi)
    )
    (local.get $3)
   )
  )
  (block
   (local.set $4
    (block (result i32)
     (local.set $i64toi32_i32$2
      (i32.const 0)
     )
     (local.set $i64toi32_i32$0
      (i32.load
       (local.get $i64toi32_i32$2)
      )
     )
     (local.set $i64toi32_i32$1
      (i32.load offset=4
       (local.get $i64toi32_i32$2)
      )
     )
     (local.get $i64toi32_i32$0)
    )
   )
   (local.set $4$hi
    (local.get $i64toi32_i32$1)
   )
  )
  (drop
   (block (result i32)
    (local.set $i64toi32_i32$1
     (local.get $4$hi)
    )
    (local.get $4)
   )
  )
  (block
   (local.set $i64toi32_i32$0
    (i32.const 0)
   )
   (i32.store
    (local.get $i64toi32_i32$0)
    (block (result i32)
     (local.set $i64toi32_i32$1
      (i32.const 0)
     )
     (i32.const 1)
    )
   )
   (i32.store offset=4
    (local.get $i64toi32_i32$0)
    (local.get $i64toi32_i32$1)
   )
  )
  (block
   (local.set $i64toi32_i32$0
    (i32.const 0)
   )
   (i32.store
    (local.get $i64toi32_i32$0)
    (block (result i32)
     (local.set $i64toi32_i32$1
      (i32.const 0)
     )
     (i32.const 2)
    )
   )
   (i32.store offset=4
    (local.get $i64toi32_i32$0)
    (local.get $i64toi32_i32$1)
   )
  )
  (block
   (local.set $i64toi32_i32$0
    (i32.const 0)
   )
   (i32.store align=2
    (local.get $i64toi32_i32$0)
    (block (result i32)
     (local.set $i64toi32_i32$1
      (i32.const 0)
     )
     (i32.const 3)
    )
   )
   (i32.store offset=4 align=2
    (local.get $i64toi32_i32$0)
    (local.get $i64toi32_i32$1)
   )
  )
  (block
   (local.set $i64toi32_i32$0
    (i32.const 0)
   )
   (i32.store align=1
    (local.get $i64toi32_i32$0)
    (block (result i32)
     (local.set $i64toi32_i32$1
      (i32.const 0)
     )
     (i32.const 4)
    )
   )
   (i32.store offset=4 align=1
    (local.get $i64toi32_i32$0)
    (local.get $i64toi32_i32$1)
   )
  )
  (block
   (local.set $i64toi32_i32$0
    (i32.const 0)
   )
   (i32.store
    (local.get $i64toi32_i32$0)
    (block (result i32)
     (local.set $i64toi32_i32$1
      (i32.const 0)
     )
     (i32.const 5)
    )
   )
   (i32.store offset=4
    (local.get $i64toi32_i32$0)
    (local.get $i64toi32_i32$1)
   )
  )
 )
)
(module
 (type $none_=>_none (func))
 (type $i32_i32_=>_none (func (param i32 i32)))
 (global $f (mut i32) (i32.const -1412567121))
 (global $g (mut i32) (global.get $f))
 (global $f$hi (mut i32) (i32.const 305419896))
 (global $g$hi (mut i32) (global.get $f$hi))
 (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0))
 (export "exp" (func $1))
 (export "unreach" (func $2))
 (func $call (param $0 i32) (param $0$hi i32)
  (nop)
 )
 (func $1
  (local $0 i32)
  (local $0$hi i32)
  (local $i64toi32_i32$0 i32)
  (block
   (local.set $0
    (block (result i32)
     (local.set $i64toi32_i32$0
      (global.get $f$hi)
     )
     (global.get $f)
    )
   )
   (local.set $0$hi
    (local.get $i64toi32_i32$0)
   )
  )
  (call $call
   (block (result i32)
    (local.set $i64toi32_i32$0
     (local.get $0$hi)
    )
    (local.get $0)
   )
   (local.get $i64toi32_i32$0)
  )
  (block
   (global.set $f
    (block (result i32)
     (local.set $i64toi32_i32$0
      (i32.const 287454020)
     )
     (i32.const 1432778632)
    )
   )
   (global.set $f$hi
    (local.get $i64toi32_i32$0)
   )
  )
 )
 (func $2
  (local $0 i32)
  (local $0$hi i32)
  (local $1 i32)
  (local $1$hi i32)
  (local $i64toi32_i32$0 i32)
  (block $label$1
   (unreachable)
   (unreachable)
  )
  (block
   (local.set $1
    (block (result i32)
     (local.set $i64toi32_i32$0
      (local.get $0$hi)
     )
     (local.get $0)
    )
   )
   (local.set $1$hi
    (local.get $i64toi32_i32$0)
   )
  )
  (block
   (global.set $f
    (block (result i32)
     (local.set $i64toi32_i32$0
      (local.get $1$hi)
     )
     (local.get $1)
    )
   )
   (global.set $f$hi
    (local.get $i64toi32_i32$0)
   )
  )
 )
)
(module
 (type $none_=>_none (func))
 (type $i32_i32_=>_none (func (param i32 i32)))
 (global $f (mut i32) (i32.const -1412567121))
 (global $g (mut i32) (global.get $f))
 (global $f$hi (mut i32) (i32.const 305419896))
 (global $g$hi (mut i32) (global.get $f$hi))
 (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0))
 (export "exp" (func $1))
 (func $call (param $0 i32) (param $0$hi i32)
  (nop)
 )
 (func $1
  (local $0 i32)
  (local $0$hi i32)
  (local $i64toi32_i32$0 i32)
  (block
   (local.set $0
    (block (result i32)
     (local.set $i64toi32_i32$0
      (global.get $f$hi)
     )
     (global.get $f)
    )
   )
   (local.set $0$hi
    (local.get $i64toi32_i32$0)
   )
  )
  (call $call
   (block (result i32)
    (local.set $i64toi32_i32$0
     (local.get $0$hi)
    )
    (local.get $0)
   )
   (local.get $i64toi32_i32$0)
  )
  (block
   (global.set $f
    (block (result i32)
     (local.set $i64toi32_i32$0
      (i32.const 287454020)
     )
     (i32.const 1432778632)
    )
   )
   (global.set $f$hi
    (local.get $i64toi32_i32$0)
   )
  )
 )
)
(module
 (type $none_=>_none (func))
 (table $0 37 funcref)
 (global $i64toi32_i32$HIGH_BITS (mut i32) (i32.const 0))
 (func $0
  (unreachable)
  (block
   (unreachable)
   (drop
    (f64.const 1)
   )
   (drop
    (i32.const -32768)
   )
   (drop
    (i32.const 20)
   )
  )
  (unreachable)
 )
)
