wasmtime-cli 45.0.0

Command-line interface for Wasmtime
Documentation
;;! wide_arithmetic = true

(module
  (func (export "i64.add128") (param i64 i64 i64 i64) (result i64 i64)
    local.get 0
    local.get 1
    local.get 2
    local.get 3
    i64.add128)
  (func (export "i64.sub128") (param i64 i64 i64 i64) (result i64 i64)
    local.get 0
    local.get 1
    local.get 2
    local.get 3
    i64.sub128)
  (func (export "i64.mul_wide_s") (param i64 i64) (result i64 i64)
    local.get 0
    local.get 1
    i64.mul_wide_s)
  (func (export "i64.mul_wide_u") (param i64 i64) (result i64 i64)
    local.get 0
    local.get 1
    i64.mul_wide_u)
)

;; simple addition
(assert_return (invoke "i64.add128"
                  (i64.const 0) (i64.const 0)
                  (i64.const 0) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.add128"
                  (i64.const 0) (i64.const 1)
                  (i64.const 1) (i64.const 0))
               (i64.const 1) (i64.const 1))
(assert_return (invoke "i64.add128"
                  (i64.const 1) (i64.const 0)
                  (i64.const -1) (i64.const 0))
               (i64.const 0) (i64.const 1))
(assert_return (invoke "i64.add128"
                  (i64.const 1) (i64.const 1)
                  (i64.const -1) (i64.const -1))
               (i64.const 0) (i64.const 1))

;; simple subtraction
(assert_return (invoke "i64.sub128"
                  (i64.const 0) (i64.const 0)
                  (i64.const 0) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.sub128"
                  (i64.const 0) (i64.const 0)
                  (i64.const 1) (i64.const 0))
               (i64.const -1) (i64.const -1))
(assert_return (invoke "i64.sub128"
                  (i64.const 0) (i64.const 1)
                  (i64.const 1) (i64.const 1))
               (i64.const -1) (i64.const -1))
(assert_return (invoke "i64.sub128"
                  (i64.const 0) (i64.const 0)
                  (i64.const 1) (i64.const 1))
               (i64.const -1) (i64.const -2))

;; simple mul_wide
(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const -1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const 1))
               (i64.const -1) (i64.const -1))
(assert_return (invoke "i64.mul_wide_u" (i64.const -1) (i64.const 1))
               (i64.const -1) (i64.const 0))

;; 20 randomly generated test cases for i64.add128
(assert_return (invoke "i64.add128"
                   (i64.const -2418420703207364752) (i64.const -1)
                   (i64.const -1) (i64.const -1))
               (i64.const -2418420703207364753) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const 0) (i64.const 0)
                   (i64.const -4579433644172935106) (i64.const -1))
               (i64.const -4579433644172935106) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const 0) (i64.const 0)
                   (i64.const 1) (i64.const -1))
               (i64.const 1) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const 1) (i64.const 0)
                   (i64.const 1) (i64.const 0))
               (i64.const 2) (i64.const 0))
(assert_return (invoke "i64.add128"
                   (i64.const -1) (i64.const -1)
                   (i64.const -1) (i64.const -1))
               (i64.const -2) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const 0) (i64.const -1)
                   (i64.const 1) (i64.const 0))
               (i64.const 1) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const 0) (i64.const 0)
                   (i64.const 0) (i64.const -1))
               (i64.const 0) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const 1) (i64.const 0)
                   (i64.const -1) (i64.const -1))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.add128"
                   (i64.const 0) (i64.const 6184727276166606191)
                   (i64.const 0) (i64.const 1))
               (i64.const 0) (i64.const 6184727276166606192))
(assert_return (invoke "i64.add128"
                   (i64.const -8434911321912688222) (i64.const -1)
                   (i64.const 1) (i64.const -1))
               (i64.const -8434911321912688221) (i64.const -2))
(assert_return (invoke "i64.add128"
                   (i64.const 1) (i64.const -1)
                   (i64.const 0) (i64.const -1))
               (i64.const 1) (i64.const -2))
(assert_return (invoke "i64.add128"
                   (i64.const 1) (i64.const -5148941131328838092)
                   (i64.const 0) (i64.const 0))
               (i64.const 1) (i64.const -5148941131328838092))
(assert_return (invoke "i64.add128"
                   (i64.const 1) (i64.const 1)
                   (i64.const 1) (i64.const 0))
               (i64.const 2) (i64.const 1))
(assert_return (invoke "i64.add128"
                   (i64.const -1) (i64.const -1)
                   (i64.const -3636740005180858631) (i64.const -1))
               (i64.const -3636740005180858632) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const -5529682780229988275) (i64.const -1)
                   (i64.const 0) (i64.const 0))
               (i64.const -5529682780229988275) (i64.const -1))
(assert_return (invoke "i64.add128"
                   (i64.const 1) (i64.const -5381447440966559717)
                   (i64.const 1020031372481336745) (i64.const 1))
               (i64.const 1020031372481336746) (i64.const -5381447440966559716))
(assert_return (invoke "i64.add128"
                   (i64.const 1) (i64.const 1)
                   (i64.const 0) (i64.const 0))
               (i64.const 1) (i64.const 1))
(assert_return (invoke "i64.add128"
                   (i64.const -9133888546939907356) (i64.const -1)
                   (i64.const 1) (i64.const 1))
               (i64.const -9133888546939907355) (i64.const 0))
(assert_return (invoke "i64.add128"
                   (i64.const -4612047512704241719) (i64.const -1)
                   (i64.const 0) (i64.const -1))
               (i64.const -4612047512704241719) (i64.const -2))
(assert_return (invoke "i64.add128"
                   (i64.const 414720966820876428) (i64.const -1)
                   (i64.const 1) (i64.const 0))
               (i64.const 414720966820876429) (i64.const -1))


;; 20 randomly generated test cases for i64.sub128
(assert_return (invoke "i64.sub128"
                   (i64.const 0) (i64.const -2459085471354756766)
                   (i64.const -9151153060221070927) (i64.const -1))
               (i64.const 9151153060221070927) (i64.const -2459085471354756766))
(assert_return (invoke "i64.sub128"
                   (i64.const 4566502638724063423) (i64.const -4282658540409485563)
                   (i64.const -6884077310018979971) (i64.const -1))
               (i64.const -6996164124966508222) (i64.const -4282658540409485563))
(assert_return (invoke "i64.sub128"
                   (i64.const 1) (i64.const 3118380319444903041)
                   (i64.const 0) (i64.const 3283115686417695443))
               (i64.const 1) (i64.const -164735366972792402))
(assert_return (invoke "i64.sub128"
                   (i64.const -7208415241680161810) (i64.const -1)
                   (i64.const 1) (i64.const 0))
               (i64.const -7208415241680161811) (i64.const -1))
(assert_return (invoke "i64.sub128"
                   (i64.const 0) (i64.const 3944850126731328706)
                   (i64.const 1) (i64.const 1))
               (i64.const -1) (i64.const 3944850126731328704))
(assert_return (invoke "i64.sub128"
                   (i64.const 1) (i64.const -1)
                   (i64.const -1) (i64.const -1))
               (i64.const 2) (i64.const -1))
(assert_return (invoke "i64.sub128"
                   (i64.const -1) (i64.const -1)
                   (i64.const 4855833073346115923) (i64.const -6826437637438999645))
               (i64.const -4855833073346115924) (i64.const 6826437637438999644))
(assert_return (invoke "i64.sub128"
                   (i64.const 1) (i64.const 0)
                   (i64.const -1) (i64.const -1))
               (i64.const 2) (i64.const 0))
(assert_return (invoke "i64.sub128"
                   (i64.const 1) (i64.const 0)
                   (i64.const 1) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.sub128"
                   (i64.const -1) (i64.const -1)
                   (i64.const 0) (i64.const 0))
               (i64.const -1) (i64.const -1))
(assert_return (invoke "i64.sub128"
                   (i64.const 1) (i64.const -1)
                   (i64.const -6365475388498096428) (i64.const -1))
               (i64.const 6365475388498096429) (i64.const -1))
(assert_return (invoke "i64.sub128"
                   (i64.const 6804238617560992346) (i64.const -1)
                   (i64.const 0) (i64.const -1))
               (i64.const 6804238617560992346) (i64.const 0))
(assert_return (invoke "i64.sub128"
                   (i64.const 0) (i64.const 1)
                   (i64.const 1) (i64.const -7756145513466453619))
               (i64.const -1) (i64.const 7756145513466453619))
(assert_return (invoke "i64.sub128"
                   (i64.const 1) (i64.const -1)
                   (i64.const 1) (i64.const 1))
               (i64.const 0) (i64.const -2))
(assert_return (invoke "i64.sub128"
                   (i64.const 0) (i64.const 1)
                   (i64.const 1) (i64.const 0))
               (i64.const -1) (i64.const 0))
(assert_return (invoke "i64.sub128"
                   (i64.const 1) (i64.const 5602881641763648953)
                   (i64.const -2110589244314239080) (i64.const -1))
               (i64.const 2110589244314239081) (i64.const 5602881641763648953))
(assert_return (invoke "i64.sub128"
                   (i64.const 0) (i64.const 1)
                   (i64.const -1) (i64.const -1))
               (i64.const 1) (i64.const 1))
(assert_return (invoke "i64.sub128"
                   (i64.const 0) (i64.const -1)
                   (i64.const 3553816990259121806) (i64.const -2105235417856431622))
               (i64.const -3553816990259121806) (i64.const 2105235417856431620))
(assert_return (invoke "i64.sub128"
                   (i64.const 1861102705894987245) (i64.const 1)
                   (i64.const 3713781778534059871) (i64.const 1))
               (i64.const -1852679072639072626) (i64.const -1))
(assert_return (invoke "i64.sub128"
                   (i64.const 0) (i64.const -1)
                   (i64.const 1) (i64.const 1832524486821761762))
               (i64.const -1) (i64.const -1832524486821761764))

;; 20 randomly generated test cases for i64.mul_wide_s
(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const 6287758211025156705))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const -6643537319803451357) (i64.const 1))
               (i64.const -6643537319803451357) (i64.const -1))
(assert_return (invoke "i64.mul_wide_s" (i64.const -2483565146858803428) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const -3838951433439430085) (i64.const 3471602925362676030))
               (i64.const 5186941893001237834) (i64.const -722475195264825124))
(assert_return (invoke "i64.mul_wide_s" (i64.const -8262495286814853129) (i64.const 7883241869666573970))
               (i64.const -8557189786755031842) (i64.const -3530988912334554469))
(assert_return (invoke "i64.mul_wide_s" (i64.const 4278371902407959701) (i64.const 1))
               (i64.const 4278371902407959701) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const -8852706149487089182) (i64.const -1))
               (i64.const 8852706149487089182) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const -1))
               (i64.const -1) (i64.const -1))
(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const -4329244561838653387))
               (i64.const 4329244561838653387) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const -1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 697896157315764057) (i64.const 1))
               (i64.const 697896157315764057) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const -3769664482072947073))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 8414291037346403854))
               (i64.const 8414291037346403854) (i64.const 0))
(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const -1))
               (i64.const -1) (i64.const -1))
(assert_return (invoke "i64.mul_wide_s" (i64.const 5014655679779318485) (i64.const -5080037812563681985))
               (i64.const 2842857627777395563) (i64.const -1380983027057486843))
(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const 1))
               (i64.const 0) (i64.const 0))

;; 20 randomly generated test cases for i64.mul_wide_u
(assert_return (invoke "i64.mul_wide_u" (i64.const -4734436040338162711) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 3270597527173764279) (i64.const 6636648075495406358))
               (i64.const -5430303818902260550) (i64.const 1176674035141685826))
(assert_return (invoke "i64.mul_wide_u" (i64.const -7771814344630108151) (i64.const 1))
               (i64.const -7771814344630108151) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const -7864138787704962081))
               (i64.const -7864138787704962081) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 518555141550256010))
               (i64.const 518555141550256010) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const -1))
               (i64.const -1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1118900477321231571) (i64.const -1))
               (i64.const -1118900477321231571) (i64.const 1118900477321231570))
(assert_return (invoke "i64.mul_wide_u" (i64.const -1) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const -5586890671027490027) (i64.const 1))
               (i64.const -5586890671027490027) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 3603850799751152505))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const -1) (i64.const -1))
               (i64.const 1) (i64.const 18446744073709551614))
(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 1))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const -7344082851774441644) (i64.const 3896439839137544024))
               (i64.const 5738542512914895072) (i64.const 2345175459296971666))
(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 616395976148874061) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 2810729703362889816) (i64.const -1))
               (i64.const -2810729703362889816) (i64.const 2810729703362889815))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const -1))
               (i64.const -1) (i64.const 0))
(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 0))
               (i64.const 0) (i64.const 0))

(module
  (func (export "u64::overflowing_add") (param i64 i64) (result i64 i64)
    local.get 0
    i64.const 0
    local.get 1
    i64.const 0
    i64.add128)
)

(assert_return (invoke "u64::overflowing_add" (i64.const 0) (i64.const 0))
               (i64.const 0) (i64.const 0))
(assert_return (invoke "u64::overflowing_add" (i64.const 0) (i64.const 1))
               (i64.const 1) (i64.const 0))
(assert_return (invoke "u64::overflowing_add" (i64.const 1) (i64.const -1))
               (i64.const 0) (i64.const 1))
(assert_return (invoke "u64::overflowing_add" (i64.const -2) (i64.const -1))
               (i64.const -3) (i64.const 1))