Ensure Math.clz32/imul compatibility with JS (#474)

This commit is contained in:
Max Graey
2019-02-21 01:32:58 +02:00
committed by Daniel Wirtz
parent 0041572052
commit 6b495f71d0
8 changed files with 786 additions and 257 deletions

View File

@ -8001,7 +8001,7 @@
if
i32.const 0
i32.const 40
i32.const 968
i32.const 976
i32.const 4
call $~lib/env/abort
unreachable
@ -8067,7 +8067,7 @@
if
i32.const 0
i32.const 40
i32.const 977
i32.const 985
i32.const 24
call $~lib/env/abort
unreachable
@ -8114,7 +8114,7 @@
if
i32.const 0
i32.const 40
i32.const 2044
i32.const 2065
i32.const 24
call $~lib/env/abort
unreachable
@ -9222,7 +9222,30 @@
i32.mul
f64.convert_i32_s
)
(func $~lib/math/ipow64 (; 146 ;) (type $IiI) (param $0 i64) (param $1 i32) (result i64)
(func $~lib/math/NativeMath.clz32 (; 146 ;) (type $FF) (param $0 f64) (result f64)
local.get $0
local.get $0
f64.sub
f64.const 0
f64.ne
if
f64.const 32
return
end
local.get $0
f64.const 4294967296
local.get $0
f64.const 2.3283064365386963e-10
f64.mul
f64.floor
f64.mul
f64.sub
i64.trunc_f64_s
i32.wrap_i64
i32.clz
f64.convert_i32_s
)
(func $~lib/math/ipow64 (; 147 ;) (type $IiI) (param $0 i64) (param $1 i32) (result i64)
(local $2 i64)
(local $3 i32)
i64.const 1
@ -9418,7 +9441,7 @@
end
local.get $2
)
(func $~lib/math/ipow32f (; 147 ;) (type $fif) (param $0 f32) (param $1 i32) (result f32)
(func $~lib/math/ipow32f (; 148 ;) (type $fif) (param $0 f32) (param $1 i32) (result f32)
(local $2 f32)
(local $3 i32)
local.get $1
@ -9464,7 +9487,7 @@
end
local.get $2
)
(func $~lib/math/ipow64f (; 148 ;) (type $FiF) (param $0 f64) (param $1 i32) (result f64)
(func $~lib/math/ipow64f (; 149 ;) (type $FiF) (param $0 f64) (param $1 i32) (result f64)
(local $2 f64)
(local $3 i32)
local.get $1
@ -9510,7 +9533,7 @@
end
local.get $2
)
(func $start:std/math (; 149 ;) (type $_)
(func $start:std/math (; 150 ;) (type $_)
(local $0 f64)
(local $1 f32)
(local $2 i32)
@ -37846,11 +37869,10 @@
call $~lib/env/abort
unreachable
end
i64.const 0
i32.const 0
call $~lib/math/ipow64
i64.const 1
i64.ne
f64.const 0
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
@ -37859,11 +37881,10 @@
call $~lib/env/abort
unreachable
end
i64.const 0
i32.const 1
call $~lib/math/ipow64
i64.const 0
i64.ne
f64.const 1
call $~lib/math/NativeMath.clz32
f64.const 31
f64.ne
if
i32.const 0
i32.const 8
@ -37872,11 +37893,10 @@
call $~lib/env/abort
unreachable
end
i64.const 0
i32.const 2
call $~lib/math/ipow64
i64.const 0
i64.ne
f64.const -1
call $~lib/math/NativeMath.clz32
f64.const 0
f64.ne
if
i32.const 0
i32.const 8
@ -37885,6 +37905,201 @@
call $~lib/env/abort
unreachable
end
f64.const -128
call $~lib/math/NativeMath.clz32
f64.const 0
f64.ne
if
i32.const 0
i32.const 8
i32.const 3292
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 4294967295
call $~lib/math/NativeMath.clz32
f64.const 0
f64.ne
if
i32.const 0
i32.const 8
i32.const 3293
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 4294967295.5
call $~lib/math/NativeMath.clz32
f64.const 0
f64.ne
if
i32.const 0
i32.const 8
i32.const 3294
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 4294967296
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
i32.const 3295
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 4294967297
call $~lib/math/NativeMath.clz32
f64.const 31
f64.ne
if
i32.const 0
i32.const 8
i32.const 3296
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const nan:0x8000000000000
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
i32.const 3297
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const inf
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
i32.const 3298
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 9007199254740991
call $~lib/math/NativeMath.clz32
f64.const 0
f64.ne
if
i32.const 0
i32.const 8
i32.const 3299
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const -9007199254740991
call $~lib/math/NativeMath.clz32
f64.const 31
f64.ne
if
i32.const 0
i32.const 8
i32.const 3300
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 1797693134862315708145274e284
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
i32.const 3301
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 5e-324
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
i32.const 3302
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const -1797693134862315708145274e284
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
i32.const 3303
i32.const 0
call $~lib/env/abort
unreachable
end
f64.const 2.220446049250313e-16
call $~lib/math/NativeMath.clz32
f64.const 32
f64.ne
if
i32.const 0
i32.const 8
i32.const 3304
i32.const 0
call $~lib/env/abort
unreachable
end
i64.const 0
i32.const 0
call $~lib/math/ipow64
i64.const 1
i64.ne
if
i32.const 0
i32.const 8
i32.const 3308
i32.const 0
call $~lib/env/abort
unreachable
end
i64.const 0
i32.const 1
call $~lib/math/ipow64
i64.const 0
i64.ne
if
i32.const 0
i32.const 8
i32.const 3309
i32.const 0
call $~lib/env/abort
unreachable
end
i64.const 0
i32.const 2
call $~lib/math/ipow64
i64.const 0
i64.ne
if
i32.const 0
i32.const 8
i32.const 3310
i32.const 0
call $~lib/env/abort
unreachable
end
i64.const 0
i32.const 3
call $~lib/math/ipow64
@ -37893,7 +38108,7 @@
if
i32.const 0
i32.const 8
i32.const 3292
i32.const 3311
i32.const 0
call $~lib/env/abort
unreachable
@ -37906,7 +38121,7 @@
if
i32.const 0
i32.const 8
i32.const 3294
i32.const 3313
i32.const 0
call $~lib/env/abort
unreachable
@ -37919,7 +38134,7 @@
if
i32.const 0
i32.const 8
i32.const 3295
i32.const 3314
i32.const 0
call $~lib/env/abort
unreachable
@ -37932,7 +38147,7 @@
if
i32.const 0
i32.const 8
i32.const 3296
i32.const 3315
i32.const 0
call $~lib/env/abort
unreachable
@ -37945,7 +38160,7 @@
if
i32.const 0
i32.const 8
i32.const 3297
i32.const 3316
i32.const 0
call $~lib/env/abort
unreachable
@ -37958,7 +38173,7 @@
if
i32.const 0
i32.const 8
i32.const 3299
i32.const 3318
i32.const 0
call $~lib/env/abort
unreachable
@ -37971,7 +38186,7 @@
if
i32.const 0
i32.const 8
i32.const 3300
i32.const 3319
i32.const 0
call $~lib/env/abort
unreachable
@ -37984,7 +38199,7 @@
if
i32.const 0
i32.const 8
i32.const 3301
i32.const 3320
i32.const 0
call $~lib/env/abort
unreachable
@ -37997,7 +38212,7 @@
if
i32.const 0
i32.const 8
i32.const 3302
i32.const 3321
i32.const 0
call $~lib/env/abort
unreachable
@ -38010,7 +38225,7 @@
if
i32.const 0
i32.const 8
i32.const 3304
i32.const 3323
i32.const 0
call $~lib/env/abort
unreachable
@ -38023,7 +38238,7 @@
if
i32.const 0
i32.const 8
i32.const 3305
i32.const 3324
i32.const 0
call $~lib/env/abort
unreachable
@ -38036,7 +38251,7 @@
if
i32.const 0
i32.const 8
i32.const 3306
i32.const 3325
i32.const 0
call $~lib/env/abort
unreachable
@ -38049,7 +38264,7 @@
if
i32.const 0
i32.const 8
i32.const 3307
i32.const 3326
i32.const 0
call $~lib/env/abort
unreachable
@ -38062,7 +38277,7 @@
if
i32.const 0
i32.const 8
i32.const 3309
i32.const 3328
i32.const 0
call $~lib/env/abort
unreachable
@ -38075,7 +38290,7 @@
if
i32.const 0
i32.const 8
i32.const 3310
i32.const 3329
i32.const 0
call $~lib/env/abort
unreachable
@ -38088,7 +38303,7 @@
if
i32.const 0
i32.const 8
i32.const 3311
i32.const 3330
i32.const 0
call $~lib/env/abort
unreachable
@ -38101,7 +38316,7 @@
if
i32.const 0
i32.const 8
i32.const 3312
i32.const 3331
i32.const 0
call $~lib/env/abort
unreachable
@ -38114,7 +38329,7 @@
if
i32.const 0
i32.const 8
i32.const 3314
i32.const 3333
i32.const 0
call $~lib/env/abort
unreachable
@ -38127,7 +38342,7 @@
if
i32.const 0
i32.const 8
i32.const 3315
i32.const 3334
i32.const 0
call $~lib/env/abort
unreachable
@ -38140,7 +38355,7 @@
if
i32.const 0
i32.const 8
i32.const 3316
i32.const 3335
i32.const 0
call $~lib/env/abort
unreachable
@ -38153,7 +38368,7 @@
if
i32.const 0
i32.const 8
i32.const 3317
i32.const 3336
i32.const 0
call $~lib/env/abort
unreachable
@ -38166,7 +38381,7 @@
if
i32.const 0
i32.const 8
i32.const 3318
i32.const 3337
i32.const 0
call $~lib/env/abort
unreachable
@ -38179,7 +38394,7 @@
if
i32.const 0
i32.const 8
i32.const 3319
i32.const 3338
i32.const 0
call $~lib/env/abort
unreachable
@ -38192,7 +38407,7 @@
if
i32.const 0
i32.const 8
i32.const 3320
i32.const 3339
i32.const 0
call $~lib/env/abort
unreachable
@ -38209,7 +38424,7 @@
if
i32.const 0
i32.const 8
i32.const 3322
i32.const 3341
i32.const 0
call $~lib/env/abort
unreachable
@ -38222,7 +38437,7 @@
if
i32.const 0
i32.const 8
i32.const 3326
i32.const 3345
i32.const 0
call $~lib/env/abort
unreachable
@ -38235,7 +38450,7 @@
if
i32.const 0
i32.const 8
i32.const 3327
i32.const 3346
i32.const 0
call $~lib/env/abort
unreachable
@ -38249,7 +38464,7 @@
if
i32.const 0
i32.const 8
i32.const 3328
i32.const 3347
i32.const 0
call $~lib/env/abort
unreachable
@ -38263,7 +38478,7 @@
if
i32.const 0
i32.const 8
i32.const 3329
i32.const 3348
i32.const 0
call $~lib/env/abort
unreachable
@ -38277,7 +38492,7 @@
if
i32.const 0
i32.const 8
i32.const 3330
i32.const 3349
i32.const 0
call $~lib/env/abort
unreachable
@ -38290,7 +38505,7 @@
if
i32.const 0
i32.const 8
i32.const 3331
i32.const 3350
i32.const 0
call $~lib/env/abort
unreachable
@ -38303,7 +38518,7 @@
if
i32.const 0
i32.const 8
i32.const 3332
i32.const 3351
i32.const 0
call $~lib/env/abort
unreachable
@ -38316,7 +38531,7 @@
if
i32.const 0
i32.const 8
i32.const 3333
i32.const 3352
i32.const 0
call $~lib/env/abort
unreachable
@ -38329,7 +38544,7 @@
if
i32.const 0
i32.const 8
i32.const 3334
i32.const 3353
i32.const 0
call $~lib/env/abort
unreachable
@ -38342,7 +38557,7 @@
if
i32.const 0
i32.const 8
i32.const 3335
i32.const 3354
i32.const 0
call $~lib/env/abort
unreachable
@ -38355,7 +38570,7 @@
if
i32.const 0
i32.const 8
i32.const 3336
i32.const 3355
i32.const 0
call $~lib/env/abort
unreachable
@ -38368,7 +38583,7 @@
if
i32.const 0
i32.const 8
i32.const 3337
i32.const 3356
i32.const 0
call $~lib/env/abort
unreachable
@ -38381,7 +38596,7 @@
if
i32.const 0
i32.const 8
i32.const 3338
i32.const 3357
i32.const 0
call $~lib/env/abort
unreachable
@ -38394,7 +38609,7 @@
if
i32.const 0
i32.const 8
i32.const 3339
i32.const 3358
i32.const 0
call $~lib/env/abort
unreachable
@ -38407,7 +38622,7 @@
if
i32.const 0
i32.const 8
i32.const 3340
i32.const 3359
i32.const 0
call $~lib/env/abort
unreachable
@ -38420,7 +38635,7 @@
if
i32.const 0
i32.const 8
i32.const 3341
i32.const 3360
i32.const 0
call $~lib/env/abort
unreachable
@ -38433,7 +38648,7 @@
if
i32.const 0
i32.const 8
i32.const 3345
i32.const 3364
i32.const 0
call $~lib/env/abort
unreachable
@ -38446,7 +38661,7 @@
if
i32.const 0
i32.const 8
i32.const 3346
i32.const 3365
i32.const 0
call $~lib/env/abort
unreachable
@ -38460,7 +38675,7 @@
if
i32.const 0
i32.const 8
i32.const 3347
i32.const 3366
i32.const 0
call $~lib/env/abort
unreachable
@ -38474,7 +38689,7 @@
if
i32.const 0
i32.const 8
i32.const 3348
i32.const 3367
i32.const 0
call $~lib/env/abort
unreachable
@ -38488,7 +38703,7 @@
if
i32.const 0
i32.const 8
i32.const 3349
i32.const 3368
i32.const 0
call $~lib/env/abort
unreachable
@ -38501,7 +38716,7 @@
if
i32.const 0
i32.const 8
i32.const 3350
i32.const 3369
i32.const 0
call $~lib/env/abort
unreachable
@ -38514,7 +38729,7 @@
if
i32.const 0
i32.const 8
i32.const 3351
i32.const 3370
i32.const 0
call $~lib/env/abort
unreachable
@ -38527,7 +38742,7 @@
if
i32.const 0
i32.const 8
i32.const 3352
i32.const 3371
i32.const 0
call $~lib/env/abort
unreachable
@ -38540,7 +38755,7 @@
if
i32.const 0
i32.const 8
i32.const 3353
i32.const 3372
i32.const 0
call $~lib/env/abort
unreachable
@ -38553,7 +38768,7 @@
if
i32.const 0
i32.const 8
i32.const 3354
i32.const 3373
i32.const 0
call $~lib/env/abort
unreachable
@ -38566,7 +38781,7 @@
if
i32.const 0
i32.const 8
i32.const 3355
i32.const 3374
i32.const 0
call $~lib/env/abort
unreachable
@ -38579,7 +38794,7 @@
if
i32.const 0
i32.const 8
i32.const 3356
i32.const 3375
i32.const 0
call $~lib/env/abort
unreachable
@ -38592,7 +38807,7 @@
if
i32.const 0
i32.const 8
i32.const 3357
i32.const 3376
i32.const 0
call $~lib/env/abort
unreachable
@ -38605,7 +38820,7 @@
if
i32.const 0
i32.const 8
i32.const 3358
i32.const 3377
i32.const 0
call $~lib/env/abort
unreachable
@ -38618,7 +38833,7 @@
if
i32.const 0
i32.const 8
i32.const 3359
i32.const 3378
i32.const 0
call $~lib/env/abort
unreachable
@ -38631,16 +38846,16 @@
if
i32.const 0
i32.const 8
i32.const 3360
i32.const 3379
i32.const 0
call $~lib/env/abort
unreachable
end
)
(func $start (; 150 ;) (type $_)
(func $start (; 151 ;) (type $_)
call $start:std/math
)
(func $null (; 151 ;) (type $_)
(func $null (; 152 ;) (type $_)
nop
)
)