blob: 0dcd1910a07f6c26451b2229845bd40dc3ff8f55 (
plain)
(module
(func $loop_test (export "loop_test") (result i32)
(local i32) ;; Local 0: Counter
;; Initialize the counter
(local.set 0 (i32.const 0))
;; Loop starts here
(loop $my_loop
;; Increment the counter
(local.set 0 (i32.add (local.get 0) (i32.const 1)))
;; Exit condition: break out of the loop if counter >= 10
(br_if $my_loop (i32.lt_s (local.get 0) (i32.const 10)))
)
;; Return the counter value
(local.get 0)
)
(func $loop_test3 (export "loop_test3") (result i32)
(local i32) ;; Local 0: Counter
;; Initialize the counter
(local.set 0 (i32.const 0))
;; Loop starts here
(block $exit_loop ;; Label for exiting the loop
(loop $my_loop
;; Increment the counter
(local.set 0 (i32.add (local.get 0) (i32.const 1)))
;; Prepare an index for br_table
;; Here, we use the counter, but you could modify this
;; For simplicity, 0 will continue the loop, any other value will exit
(local.get 0)
(i32.const 10)
(i32.lt_s)
(br_table $my_loop $exit_loop)
)
)
;; Return the counter value
(local.get 0)
)
(func $calculate (export "loop_test2") (result i32)
(local i32) ;; Local 0: Counter for the outer loop
(local i32) ;; Local 1: Counter for the inner loop
(local i32) ;; Local 2: Result variable
;; Initialize variables
(local.set 0 (i32.const 0)) ;; Initialize outer loop counter
(local.set 1 (i32.const 0)) ;; Initialize inner loop counter
(local.set 2 (i32.const 0)) ;; Initialize result variable
(block $outer ;; Outer loop label
(loop $outer_loop
(local.set 1 (i32.const 5)) ;; Reset inner loop counter for each iteration of the outer loop
(block $inner ;; Inner loop label
(loop $inner_loop
(br_if $inner (i32.eqz (local.get 1))) ;; Break to $inner if inner loop counter is zero
;; Computation: Adding product of counters to the result
(local.set 2 (i32.add (local.get 2) (i32.mul (local.get 0) (local.get 1))))
;; Decrement inner loop counter
(local.set 1 (i32.sub (local.get 1) (i32.const 1)))
)
)
;; Increment outer loop counter
(local.set 0 (i32.add (local.get 0) (i32.const 1)))
;; Break condition for outer loop: break if outer loop counter >= 5
(br_if $outer (i32.ge_s (local.get 0) (i32.const 5)))
)
)
;; Return the result
(local.get 2)
)
)
|