1;;! wide_arithmetic = true 2 3(module 4 (func (export "i64.add128") (param i64 i64 i64 i64) (result i64 i64) 5 local.get 0 6 local.get 1 7 local.get 2 8 local.get 3 9 i64.add128) 10 (func (export "i64.sub128") (param i64 i64 i64 i64) (result i64 i64) 11 local.get 0 12 local.get 1 13 local.get 2 14 local.get 3 15 i64.sub128) 16 (func (export "i64.mul_wide_s") (param i64 i64) (result i64 i64) 17 local.get 0 18 local.get 1 19 i64.mul_wide_s) 20 (func (export "i64.mul_wide_u") (param i64 i64) (result i64 i64) 21 local.get 0 22 local.get 1 23 i64.mul_wide_u) 24) 25 26;; simple addition 27(assert_return (invoke "i64.add128" 28 (i64.const 0) (i64.const 0) 29 (i64.const 0) (i64.const 0)) 30 (i64.const 0) (i64.const 0)) 31(assert_return (invoke "i64.add128" 32 (i64.const 0) (i64.const 1) 33 (i64.const 1) (i64.const 0)) 34 (i64.const 1) (i64.const 1)) 35(assert_return (invoke "i64.add128" 36 (i64.const 1) (i64.const 0) 37 (i64.const -1) (i64.const 0)) 38 (i64.const 0) (i64.const 1)) 39(assert_return (invoke "i64.add128" 40 (i64.const 1) (i64.const 1) 41 (i64.const -1) (i64.const -1)) 42 (i64.const 0) (i64.const 1)) 43 44;; simple subtraction 45(assert_return (invoke "i64.sub128" 46 (i64.const 0) (i64.const 0) 47 (i64.const 0) (i64.const 0)) 48 (i64.const 0) (i64.const 0)) 49(assert_return (invoke "i64.sub128" 50 (i64.const 0) (i64.const 0) 51 (i64.const 1) (i64.const 0)) 52 (i64.const -1) (i64.const -1)) 53(assert_return (invoke "i64.sub128" 54 (i64.const 0) (i64.const 1) 55 (i64.const 1) (i64.const 1)) 56 (i64.const -1) (i64.const -1)) 57(assert_return (invoke "i64.sub128" 58 (i64.const 0) (i64.const 0) 59 (i64.const 1) (i64.const 1)) 60 (i64.const -1) (i64.const -2)) 61 62;; simple mul_wide 63(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const 0)) 64 (i64.const 0) (i64.const 0)) 65(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 0)) 66 (i64.const 0) (i64.const 0)) 67(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1)) 68 (i64.const 1) (i64.const 0)) 69(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 1)) 70 (i64.const 1) (i64.const 0)) 71(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const -1)) 72 (i64.const 1) (i64.const 0)) 73(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const 1)) 74 (i64.const -1) (i64.const -1)) 75(assert_return (invoke "i64.mul_wide_u" (i64.const -1) (i64.const 1)) 76 (i64.const -1) (i64.const 0)) 77 78;; 20 randomly generated test cases for i64.add128 79(assert_return (invoke "i64.add128" 80 (i64.const -2418420703207364752) (i64.const -1) 81 (i64.const -1) (i64.const -1)) 82 (i64.const -2418420703207364753) (i64.const -1)) 83(assert_return (invoke "i64.add128" 84 (i64.const 0) (i64.const 0) 85 (i64.const -4579433644172935106) (i64.const -1)) 86 (i64.const -4579433644172935106) (i64.const -1)) 87(assert_return (invoke "i64.add128" 88 (i64.const 0) (i64.const 0) 89 (i64.const 1) (i64.const -1)) 90 (i64.const 1) (i64.const -1)) 91(assert_return (invoke "i64.add128" 92 (i64.const 1) (i64.const 0) 93 (i64.const 1) (i64.const 0)) 94 (i64.const 2) (i64.const 0)) 95(assert_return (invoke "i64.add128" 96 (i64.const -1) (i64.const -1) 97 (i64.const -1) (i64.const -1)) 98 (i64.const -2) (i64.const -1)) 99(assert_return (invoke "i64.add128" 100 (i64.const 0) (i64.const -1) 101 (i64.const 1) (i64.const 0)) 102 (i64.const 1) (i64.const -1)) 103(assert_return (invoke "i64.add128" 104 (i64.const 0) (i64.const 0) 105 (i64.const 0) (i64.const -1)) 106 (i64.const 0) (i64.const -1)) 107(assert_return (invoke "i64.add128" 108 (i64.const 1) (i64.const 0) 109 (i64.const -1) (i64.const -1)) 110 (i64.const 0) (i64.const 0)) 111(assert_return (invoke "i64.add128" 112 (i64.const 0) (i64.const 6184727276166606191) 113 (i64.const 0) (i64.const 1)) 114 (i64.const 0) (i64.const 6184727276166606192)) 115(assert_return (invoke "i64.add128" 116 (i64.const -8434911321912688222) (i64.const -1) 117 (i64.const 1) (i64.const -1)) 118 (i64.const -8434911321912688221) (i64.const -2)) 119(assert_return (invoke "i64.add128" 120 (i64.const 1) (i64.const -1) 121 (i64.const 0) (i64.const -1)) 122 (i64.const 1) (i64.const -2)) 123(assert_return (invoke "i64.add128" 124 (i64.const 1) (i64.const -5148941131328838092) 125 (i64.const 0) (i64.const 0)) 126 (i64.const 1) (i64.const -5148941131328838092)) 127(assert_return (invoke "i64.add128" 128 (i64.const 1) (i64.const 1) 129 (i64.const 1) (i64.const 0)) 130 (i64.const 2) (i64.const 1)) 131(assert_return (invoke "i64.add128" 132 (i64.const -1) (i64.const -1) 133 (i64.const -3636740005180858631) (i64.const -1)) 134 (i64.const -3636740005180858632) (i64.const -1)) 135(assert_return (invoke "i64.add128" 136 (i64.const -5529682780229988275) (i64.const -1) 137 (i64.const 0) (i64.const 0)) 138 (i64.const -5529682780229988275) (i64.const -1)) 139(assert_return (invoke "i64.add128" 140 (i64.const 1) (i64.const -5381447440966559717) 141 (i64.const 1020031372481336745) (i64.const 1)) 142 (i64.const 1020031372481336746) (i64.const -5381447440966559716)) 143(assert_return (invoke "i64.add128" 144 (i64.const 1) (i64.const 1) 145 (i64.const 0) (i64.const 0)) 146 (i64.const 1) (i64.const 1)) 147(assert_return (invoke "i64.add128" 148 (i64.const -9133888546939907356) (i64.const -1) 149 (i64.const 1) (i64.const 1)) 150 (i64.const -9133888546939907355) (i64.const 0)) 151(assert_return (invoke "i64.add128" 152 (i64.const -4612047512704241719) (i64.const -1) 153 (i64.const 0) (i64.const -1)) 154 (i64.const -4612047512704241719) (i64.const -2)) 155(assert_return (invoke "i64.add128" 156 (i64.const 414720966820876428) (i64.const -1) 157 (i64.const 1) (i64.const 0)) 158 (i64.const 414720966820876429) (i64.const -1)) 159 160 161;; 20 randomly generated test cases for i64.sub128 162(assert_return (invoke "i64.sub128" 163 (i64.const 0) (i64.const -2459085471354756766) 164 (i64.const -9151153060221070927) (i64.const -1)) 165 (i64.const 9151153060221070927) (i64.const -2459085471354756766)) 166(assert_return (invoke "i64.sub128" 167 (i64.const 4566502638724063423) (i64.const -4282658540409485563) 168 (i64.const -6884077310018979971) (i64.const -1)) 169 (i64.const -6996164124966508222) (i64.const -4282658540409485563)) 170(assert_return (invoke "i64.sub128" 171 (i64.const 1) (i64.const 3118380319444903041) 172 (i64.const 0) (i64.const 3283115686417695443)) 173 (i64.const 1) (i64.const -164735366972792402)) 174(assert_return (invoke "i64.sub128" 175 (i64.const -7208415241680161810) (i64.const -1) 176 (i64.const 1) (i64.const 0)) 177 (i64.const -7208415241680161811) (i64.const -1)) 178(assert_return (invoke "i64.sub128" 179 (i64.const 0) (i64.const 3944850126731328706) 180 (i64.const 1) (i64.const 1)) 181 (i64.const -1) (i64.const 3944850126731328704)) 182(assert_return (invoke "i64.sub128" 183 (i64.const 1) (i64.const -1) 184 (i64.const -1) (i64.const -1)) 185 (i64.const 2) (i64.const -1)) 186(assert_return (invoke "i64.sub128" 187 (i64.const -1) (i64.const -1) 188 (i64.const 4855833073346115923) (i64.const -6826437637438999645)) 189 (i64.const -4855833073346115924) (i64.const 6826437637438999644)) 190(assert_return (invoke "i64.sub128" 191 (i64.const 1) (i64.const 0) 192 (i64.const -1) (i64.const -1)) 193 (i64.const 2) (i64.const 0)) 194(assert_return (invoke "i64.sub128" 195 (i64.const 1) (i64.const 0) 196 (i64.const 1) (i64.const 0)) 197 (i64.const 0) (i64.const 0)) 198(assert_return (invoke "i64.sub128" 199 (i64.const -1) (i64.const -1) 200 (i64.const 0) (i64.const 0)) 201 (i64.const -1) (i64.const -1)) 202(assert_return (invoke "i64.sub128" 203 (i64.const 1) (i64.const -1) 204 (i64.const -6365475388498096428) (i64.const -1)) 205 (i64.const 6365475388498096429) (i64.const -1)) 206(assert_return (invoke "i64.sub128" 207 (i64.const 6804238617560992346) (i64.const -1) 208 (i64.const 0) (i64.const -1)) 209 (i64.const 6804238617560992346) (i64.const 0)) 210(assert_return (invoke "i64.sub128" 211 (i64.const 0) (i64.const 1) 212 (i64.const 1) (i64.const -7756145513466453619)) 213 (i64.const -1) (i64.const 7756145513466453619)) 214(assert_return (invoke "i64.sub128" 215 (i64.const 1) (i64.const -1) 216 (i64.const 1) (i64.const 1)) 217 (i64.const 0) (i64.const -2)) 218(assert_return (invoke "i64.sub128" 219 (i64.const 0) (i64.const 1) 220 (i64.const 1) (i64.const 0)) 221 (i64.const -1) (i64.const 0)) 222(assert_return (invoke "i64.sub128" 223 (i64.const 1) (i64.const 5602881641763648953) 224 (i64.const -2110589244314239080) (i64.const -1)) 225 (i64.const 2110589244314239081) (i64.const 5602881641763648953)) 226(assert_return (invoke "i64.sub128" 227 (i64.const 0) (i64.const 1) 228 (i64.const -1) (i64.const -1)) 229 (i64.const 1) (i64.const 1)) 230(assert_return (invoke "i64.sub128" 231 (i64.const 0) (i64.const -1) 232 (i64.const 3553816990259121806) (i64.const -2105235417856431622)) 233 (i64.const -3553816990259121806) (i64.const 2105235417856431620)) 234(assert_return (invoke "i64.sub128" 235 (i64.const 1861102705894987245) (i64.const 1) 236 (i64.const 3713781778534059871) (i64.const 1)) 237 (i64.const -1852679072639072626) (i64.const -1)) 238(assert_return (invoke "i64.sub128" 239 (i64.const 0) (i64.const -1) 240 (i64.const 1) (i64.const 1832524486821761762)) 241 (i64.const -1) (i64.const -1832524486821761764)) 242 243;; 20 randomly generated test cases for i64.mul_wide_s 244(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1)) 245 (i64.const 1) (i64.const 0)) 246(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const 6287758211025156705)) 247 (i64.const 0) (i64.const 0)) 248(assert_return (invoke "i64.mul_wide_s" (i64.const -6643537319803451357) (i64.const 1)) 249 (i64.const -6643537319803451357) (i64.const -1)) 250(assert_return (invoke "i64.mul_wide_s" (i64.const -2483565146858803428) (i64.const 0)) 251 (i64.const 0) (i64.const 0)) 252(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1)) 253 (i64.const 1) (i64.const 0)) 254(assert_return (invoke "i64.mul_wide_s" (i64.const -3838951433439430085) (i64.const 3471602925362676030)) 255 (i64.const 5186941893001237834) (i64.const -722475195264825124)) 256(assert_return (invoke "i64.mul_wide_s" (i64.const -8262495286814853129) (i64.const 7883241869666573970)) 257 (i64.const -8557189786755031842) (i64.const -3530988912334554469)) 258(assert_return (invoke "i64.mul_wide_s" (i64.const 4278371902407959701) (i64.const 1)) 259 (i64.const 4278371902407959701) (i64.const 0)) 260(assert_return (invoke "i64.mul_wide_s" (i64.const -8852706149487089182) (i64.const -1)) 261 (i64.const 8852706149487089182) (i64.const 0)) 262(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const -1)) 263 (i64.const -1) (i64.const -1)) 264(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const -4329244561838653387)) 265 (i64.const 4329244561838653387) (i64.const 0)) 266(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const -1)) 267 (i64.const 1) (i64.const 0)) 268(assert_return (invoke "i64.mul_wide_s" (i64.const 697896157315764057) (i64.const 1)) 269 (i64.const 697896157315764057) (i64.const 0)) 270(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 1)) 271 (i64.const 1) (i64.const 0)) 272(assert_return (invoke "i64.mul_wide_s" (i64.const -1) (i64.const 0)) 273 (i64.const 0) (i64.const 0)) 274(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const -3769664482072947073)) 275 (i64.const 0) (i64.const 0)) 276(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const 8414291037346403854)) 277 (i64.const 8414291037346403854) (i64.const 0)) 278(assert_return (invoke "i64.mul_wide_s" (i64.const 1) (i64.const -1)) 279 (i64.const -1) (i64.const -1)) 280(assert_return (invoke "i64.mul_wide_s" (i64.const 5014655679779318485) (i64.const -5080037812563681985)) 281 (i64.const 2842857627777395563) (i64.const -1380983027057486843)) 282(assert_return (invoke "i64.mul_wide_s" (i64.const 0) (i64.const 1)) 283 (i64.const 0) (i64.const 0)) 284 285;; 20 randomly generated test cases for i64.mul_wide_u 286(assert_return (invoke "i64.mul_wide_u" (i64.const -4734436040338162711) (i64.const 0)) 287 (i64.const 0) (i64.const 0)) 288(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 0)) 289 (i64.const 0) (i64.const 0)) 290(assert_return (invoke "i64.mul_wide_u" (i64.const 3270597527173764279) (i64.const 6636648075495406358)) 291 (i64.const -5430303818902260550) (i64.const 1176674035141685826)) 292(assert_return (invoke "i64.mul_wide_u" (i64.const -7771814344630108151) (i64.const 1)) 293 (i64.const -7771814344630108151) (i64.const 0)) 294(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 0)) 295 (i64.const 0) (i64.const 0)) 296(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const -7864138787704962081)) 297 (i64.const -7864138787704962081) (i64.const 0)) 298(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 518555141550256010)) 299 (i64.const 518555141550256010) (i64.const 0)) 300(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const -1)) 301 (i64.const -1) (i64.const 0)) 302(assert_return (invoke "i64.mul_wide_u" (i64.const 1118900477321231571) (i64.const -1)) 303 (i64.const -1118900477321231571) (i64.const 1118900477321231570)) 304(assert_return (invoke "i64.mul_wide_u" (i64.const -1) (i64.const 0)) 305 (i64.const 0) (i64.const 0)) 306(assert_return (invoke "i64.mul_wide_u" (i64.const -5586890671027490027) (i64.const 1)) 307 (i64.const -5586890671027490027) (i64.const 0)) 308(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 3603850799751152505)) 309 (i64.const 0) (i64.const 0)) 310(assert_return (invoke "i64.mul_wide_u" (i64.const -1) (i64.const -1)) 311 (i64.const 1) (i64.const 18446744073709551614)) 312(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 1)) 313 (i64.const 0) (i64.const 0)) 314(assert_return (invoke "i64.mul_wide_u" (i64.const -7344082851774441644) (i64.const 3896439839137544024)) 315 (i64.const 5738542512914895072) (i64.const 2345175459296971666)) 316(assert_return (invoke "i64.mul_wide_u" (i64.const 0) (i64.const 0)) 317 (i64.const 0) (i64.const 0)) 318(assert_return (invoke "i64.mul_wide_u" (i64.const 616395976148874061) (i64.const 0)) 319 (i64.const 0) (i64.const 0)) 320(assert_return (invoke "i64.mul_wide_u" (i64.const 2810729703362889816) (i64.const -1)) 321 (i64.const -2810729703362889816) (i64.const 2810729703362889815)) 322(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const -1)) 323 (i64.const -1) (i64.const 0)) 324(assert_return (invoke "i64.mul_wide_u" (i64.const 1) (i64.const 0)) 325 (i64.const 0) (i64.const 0)) 326 327(module 328 (func (export "u64::overflowing_add") (param i64 i64) (result i64 i64) 329 local.get 0 330 i64.const 0 331 local.get 1 332 i64.const 0 333 i64.add128) 334) 335 336(assert_return (invoke "u64::overflowing_add" (i64.const 0) (i64.const 0)) 337 (i64.const 0) (i64.const 0)) 338(assert_return (invoke "u64::overflowing_add" (i64.const 0) (i64.const 1)) 339 (i64.const 1) (i64.const 0)) 340(assert_return (invoke "u64::overflowing_add" (i64.const 1) (i64.const -1)) 341 (i64.const 0) (i64.const 1)) 342(assert_return (invoke "u64::overflowing_add" (i64.const -2) (i64.const -1)) 343 (i64.const -3) (i64.const 1)) 344