...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v1/testdata/stack.wast

Documentation: github.com/tetratelabs/wazero/internal/integration_test/spectest/v1/testdata

     1(module
     2  (func (export "fac-expr") (param $n i64) (result i64)
     3    (local $i i64)
     4    (local $res i64)
     5    (local.set $i (local.get $n))
     6    (local.set $res (i64.const 1))
     7    (block $done
     8      (loop $loop
     9        (if
    10          (i64.eq (local.get $i) (i64.const 0))
    11          (then (br $done))
    12          (else
    13            (local.set $res (i64.mul (local.get $i) (local.get $res)))
    14            (local.set $i (i64.sub (local.get $i) (i64.const 1)))
    15          )
    16        )
    17        (br $loop)
    18      )
    19    )
    20    (local.get $res)
    21  )
    22
    23  (func (export "fac-stack") (param $n i64) (result i64)
    24    (local $i i64)
    25    (local $res i64)
    26    (local.get $n)
    27    (local.set $i)
    28    (i64.const 1)
    29    (local.set $res)
    30    (block $done
    31      (loop $loop
    32        (local.get $i)
    33        (i64.const 0)
    34        (i64.eq)
    35        (if
    36          (then (br $done))
    37          (else
    38            (local.get $i)
    39            (local.get $res)
    40            (i64.mul)
    41            (local.set $res)
    42            (local.get $i)
    43            (i64.const 1)
    44            (i64.sub)
    45            (local.set $i)
    46          )
    47        )
    48        (br $loop)
    49      )
    50    )
    51    (local.get $res)
    52  )
    53
    54  (func (export "fac-stack-raw") (param $n i64) (result i64)
    55    (local $i i64)
    56    (local $res i64)
    57    local.get $n
    58    local.set $i
    59    i64.const 1
    60    local.set $res
    61    block $done
    62      loop $loop
    63        local.get $i
    64        i64.const 0
    65        i64.eq
    66        if $body
    67          br $done
    68        else $body
    69          local.get $i
    70          local.get $res
    71          i64.mul
    72          local.set $res
    73          local.get $i
    74          i64.const 1
    75          i64.sub
    76          local.set $i
    77        end $body
    78        br $loop
    79      end $loop
    80    end $done
    81    local.get $res
    82  )
    83
    84  (func (export "fac-mixed") (param $n i64) (result i64)
    85    (local $i i64)
    86    (local $res i64)
    87    (local.set $i (local.get $n))
    88    (local.set $res (i64.const 1))
    89    (block $done
    90      (loop $loop
    91        (i64.eq (local.get $i) (i64.const 0))
    92        (if
    93          (then (br $done))
    94          (else
    95            (i64.mul (local.get $i) (local.get $res))
    96            (local.set $res)
    97            (i64.sub (local.get $i) (i64.const 1))
    98            (local.set $i)
    99          )
   100        )
   101        (br $loop)
   102      )
   103    )
   104    (local.get $res)
   105  )
   106
   107  (func (export "fac-mixed-raw") (param $n i64) (result i64)
   108    (local $i i64)
   109    (local $res i64)
   110    (local.set $i (local.get $n))
   111    (local.set $res (i64.const 1))
   112    block $done
   113      loop $loop
   114        (i64.eq (local.get $i) (i64.const 0))
   115        if
   116          br $done
   117        else
   118          (i64.mul (local.get $i) (local.get $res))
   119          local.set $res
   120          (i64.sub (local.get $i) (i64.const 1))
   121          local.set $i
   122        end
   123        br $loop
   124      end
   125    end
   126    local.get $res
   127  )
   128)
   129
   130(assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776))
   131(assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776))
   132(assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776))
   133
   134
   135;; Syntax of flat call_indirect
   136
   137(module
   138  (type $proc (func))
   139  (table 1 funcref)
   140
   141  (func
   142    (block i32.const 0 call_indirect)
   143    (loop i32.const 0 call_indirect)
   144    (if (i32.const 0) (then i32.const 0 call_indirect))
   145    (if (i32.const 0)
   146      (then i32.const 0 call_indirect)
   147      (else i32.const 0 call_indirect)
   148    )
   149    (block i32.const 0 call_indirect (type $proc))
   150    (loop i32.const 0 call_indirect (type $proc))
   151    (if (i32.const 0) (then i32.const 0 call_indirect (type $proc)))
   152    (if (i32.const 0)
   153      (then i32.const 0 call_indirect (type $proc))
   154      (else i32.const 0 call_indirect (type $proc))
   155    )
   156    (block i32.const 0 i32.const 0 call_indirect (param i32))
   157    (loop i32.const 0 i32.const 0 call_indirect (param i32))
   158    (if (i32.const 0) (then i32.const 0 i32.const 0 call_indirect (param i32)))
   159    (if (i32.const 0)
   160      (then i32.const 0 i32.const 0 call_indirect (param i32))
   161      (else i32.const 0 i32.const 0 call_indirect (param i32))
   162    )
   163    (block (result i32) i32.const 0 call_indirect (result i32)) (drop)
   164    (loop (result i32) i32.const 0 call_indirect (result i32)) (drop)
   165    (if (result i32) (i32.const 0)
   166      (then i32.const 0 call_indirect (result i32))
   167      (else i32.const 0 call_indirect (result i32))
   168    ) (drop)
   169    (block i32.const 0 call_indirect (type $proc) (param) (result))
   170    (loop i32.const 0 call_indirect (type $proc) (param) (result))
   171    (if (i32.const 0)
   172      (then i32.const 0 call_indirect (type $proc) (param) (result))
   173    )
   174    (if (i32.const 0)
   175      (then i32.const 0 call_indirect (type $proc) (param) (param) (result))
   176      (else i32.const 0 call_indirect (type $proc) (param) (result) (result))
   177    )
   178
   179    block i32.const 0 call_indirect end
   180    loop i32.const 0 call_indirect end
   181    i32.const 0 if i32.const 0 call_indirect end
   182    i32.const 0 if i32.const 0 call_indirect else i32.const 0 call_indirect end
   183    block i32.const 0 call_indirect (type $proc) end
   184    loop i32.const 0 call_indirect (type $proc) end
   185    i32.const 0 if i32.const 0 call_indirect (type $proc) end
   186    i32.const 0
   187    if
   188      i32.const 0 call_indirect (type $proc)
   189    else
   190      i32.const 0 call_indirect (type $proc)
   191    end
   192    block i32.const 0 i32.const 0 call_indirect (param i32) end
   193    loop i32.const 0 i32.const 0 call_indirect (param i32) end
   194    i32.const 0 if i32.const 0 i32.const 0 call_indirect (param i32) end
   195    i32.const 0
   196    if
   197      i32.const 0 i32.const 0 call_indirect (param i32)
   198    else
   199      i32.const 0 i32.const 0 call_indirect (param i32)
   200    end
   201    block (result i32) i32.const 0 call_indirect (result i32) end drop
   202    loop (result i32) i32.const 0 call_indirect (result i32) end drop
   203    i32.const 0
   204    if (result i32)
   205      i32.const 0 call_indirect (result i32)
   206    else
   207      i32.const 0 call_indirect (result i32)
   208    end drop
   209    block i32.const 0 call_indirect (type $proc) (param) (result) end
   210    loop i32.const 0 call_indirect (type $proc) (param) (result) end
   211    i32.const 0 if i32.const 0 call_indirect (type $proc) (param) (result) end
   212    i32.const 0
   213    if
   214      i32.const 0 call_indirect (type $proc) (param) (result)
   215    else
   216      i32.const 0 call_indirect (type $proc) (param) (param) (result) (result)
   217    end
   218    i32.const 0 call_indirect
   219  )
   220)

View as plain text