(module
(memory 8 8)
;; The maximum amount of bytes to process per iteration.
(global $MAX_N i64 (i64.const 250000))
(func (export "run") (param $N i64) (result i64)
(local $i i32)
(local $n i32)
(if (i64.gt_u (local.get $N) (global.get $MAX_N))
(then (unreachable))
)
(local.set $i (i32.const 0))
(local.set $n (i32.wrap_i64 (local.get $N)))
(block $break
(loop $continue
;; if i >= N: break
(br_if $break
(i32.ge_u (local.get $i) (local.get $n))
)
;; mem[0..n].fill(i)
(memory.fill
(i32.const 0) ;; dst
(local.get $i) ;; value
(local.get $n) ;; len
)
;; mem[n..n*2].copy(mem[0..n])
(memory.copy
(local.get $i) ;; dst
(i32.const 0) ;; src
(local.get $n) ;; len
)
;; i += 1
(local.set $i (i32.add (local.get $i) (i32.const 1)))
(br $continue)
)
)
(i64.const 0)
)
)