# Test that wasm-binaryen-finalize --check-stack-overflow correctly
# inserts stack check handlers.

.globl stackRestore
.globl stackAlloc

.globaltype __stack_pointer, i32

stackRestore:
  .functype stackRestore(i32) -> ()
  local.get 0
  global.set __stack_pointer
  end_function

stackAlloc:
  .functype stackAlloc(i32) -> (i32)
  .local i32, i32
  global.get __stack_pointer
  # Get arg 0 -> number of bytes to allocate
  local.get 0
  # Stack grows down.  Subtract arg0 from __stack_pointer
  i32.sub
  # Align result by anding with ~15
  i32.const 0xfffffff0
  i32.and
  local.tee 1
  global.set __stack_pointer
  local.get 1
  end_function

.globl main
main:
  .functype main () -> ()
  end_function

.export_name stackAlloc, stackAlloc
.export_name stackSave, stackSave
.export_name stackRestore, stackRestore