mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-05 02:20:19 +00:00
151 lines
4.7 KiB
Plaintext
151 lines
4.7 KiB
Plaintext
(module
|
|
;; Statement switch
|
|
(func (export "stmt") (param $i i32) (result i32)
|
|
(local $j i32)
|
|
(local.set $j (i32.const 100))
|
|
(block $switch
|
|
(block $7
|
|
(block $default
|
|
(block $6
|
|
(block $5
|
|
(block $4
|
|
(block $3
|
|
(block $2
|
|
(block $1
|
|
(block $0
|
|
(br_table $0 $1 $2 $3 $4 $5 $6 $7 $default
|
|
(local.get $i)
|
|
)
|
|
) ;; 0
|
|
(return (local.get $i))
|
|
) ;; 1
|
|
(nop)
|
|
;; fallthrough
|
|
) ;; 2
|
|
;; fallthrough
|
|
) ;; 3
|
|
(local.set $j (i32.sub (i32.const 0) (local.get $i)))
|
|
(br $switch)
|
|
) ;; 4
|
|
(br $switch)
|
|
) ;; 5
|
|
(local.set $j (i32.const 101))
|
|
(br $switch)
|
|
) ;; 6
|
|
(local.set $j (i32.const 101))
|
|
;; fallthrough
|
|
) ;; default
|
|
(local.set $j (i32.const 102))
|
|
) ;; 7
|
|
;; fallthrough
|
|
)
|
|
(return (local.get $j))
|
|
)
|
|
|
|
;; Expression switch
|
|
(func (export "expr") (param $i i64) (result i64)
|
|
(local $j i64)
|
|
(local.set $j (i64.const 100))
|
|
(return
|
|
(block $switch (result i64)
|
|
(block $7
|
|
(block $default
|
|
(block $4
|
|
(block $5
|
|
(block $6
|
|
(block $3
|
|
(block $2
|
|
(block $1
|
|
(block $0
|
|
(br_table $0 $1 $2 $3 $4 $5 $6 $7 $default
|
|
(i32.wrap_i64 (local.get $i))
|
|
)
|
|
) ;; 0
|
|
(return (local.get $i))
|
|
) ;; 1
|
|
(nop)
|
|
;; fallthrough
|
|
) ;; 2
|
|
;; fallthrough
|
|
) ;; 3
|
|
(br $switch (i64.sub (i64.const 0) (local.get $i)))
|
|
) ;; 6
|
|
(local.set $j (i64.const 101))
|
|
;; fallthrough
|
|
) ;; 4
|
|
;; fallthrough
|
|
) ;; 5
|
|
;; fallthrough
|
|
) ;; default
|
|
(br $switch (local.get $j))
|
|
) ;; 7
|
|
(i64.const -5)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; Argument switch
|
|
(func (export "arg") (param $i i32) (result i32)
|
|
(return
|
|
(block $2 (result i32)
|
|
(i32.add (i32.const 10)
|
|
(block $1 (result i32)
|
|
(i32.add (i32.const 100)
|
|
(block $0 (result i32)
|
|
(i32.add (i32.const 1000)
|
|
(block $default (result i32)
|
|
(br_table $0 $1 $2 $default
|
|
(i32.mul (i32.const 2) (local.get $i))
|
|
(i32.and (i32.const 3) (local.get $i))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; Corner cases
|
|
(func (export "corner") (result i32)
|
|
(block
|
|
(br_table 0 (i32.const 0))
|
|
)
|
|
(i32.const 1)
|
|
)
|
|
)
|
|
|
|
(assert_return (invoke "stmt" (i32.const 0)) (i32.const 0))
|
|
(assert_return (invoke "stmt" (i32.const 1)) (i32.const -1))
|
|
(assert_return (invoke "stmt" (i32.const 2)) (i32.const -2))
|
|
(assert_return (invoke "stmt" (i32.const 3)) (i32.const -3))
|
|
(assert_return (invoke "stmt" (i32.const 4)) (i32.const 100))
|
|
(assert_return (invoke "stmt" (i32.const 5)) (i32.const 101))
|
|
(assert_return (invoke "stmt" (i32.const 6)) (i32.const 102))
|
|
(assert_return (invoke "stmt" (i32.const 7)) (i32.const 100))
|
|
(assert_return (invoke "stmt" (i32.const -10)) (i32.const 102))
|
|
|
|
(assert_return (invoke "expr" (i64.const 0)) (i64.const 0))
|
|
(assert_return (invoke "expr" (i64.const 1)) (i64.const -1))
|
|
(assert_return (invoke "expr" (i64.const 2)) (i64.const -2))
|
|
(assert_return (invoke "expr" (i64.const 3)) (i64.const -3))
|
|
(assert_return (invoke "expr" (i64.const 6)) (i64.const 101))
|
|
(assert_return (invoke "expr" (i64.const 7)) (i64.const -5))
|
|
(assert_return (invoke "expr" (i64.const -10)) (i64.const 100))
|
|
|
|
(assert_return (invoke "arg" (i32.const 0)) (i32.const 110))
|
|
(assert_return (invoke "arg" (i32.const 1)) (i32.const 12))
|
|
(assert_return (invoke "arg" (i32.const 2)) (i32.const 4))
|
|
(assert_return (invoke "arg" (i32.const 3)) (i32.const 1116))
|
|
(assert_return (invoke "arg" (i32.const 4)) (i32.const 118))
|
|
(assert_return (invoke "arg" (i32.const 5)) (i32.const 20))
|
|
(assert_return (invoke "arg" (i32.const 6)) (i32.const 12))
|
|
(assert_return (invoke "arg" (i32.const 7)) (i32.const 1124))
|
|
(assert_return (invoke "arg" (i32.const 8)) (i32.const 126))
|
|
|
|
(assert_return (invoke "corner") (i32.const 1))
|
|
|
|
(assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label")
|