Optimize some std mem methods by replacing expensive rem operations to fast bit logic (#24)

This commit is contained in:
Max Graey
2018-02-12 19:47:32 +02:00
committed by Daniel Wirtz
parent 74f8189ac1
commit 2175e6fbdc
8 changed files with 193 additions and 172 deletions

View File

@ -182,10 +182,11 @@
(i32.const 0)
)
;;@ (lib)/memory.ts:8:14
(i32.rem_u
(i32.and
;;@ (lib)/memory.ts:8:15
(get_local $1)
;;@ (lib)/memory.ts:8:20
(i32.const 4)
;;@ (lib)/memory.ts:8:21
(i32.const 3)
)
(get_local $2)
)
@ -240,15 +241,16 @@
(if
;;@ (lib)/memory.ts:14:6
(i32.eq
(i32.rem_u
(i32.and
;;@ (lib)/memory.ts:14:7
(get_local $0)
;;@ (lib)/memory.ts:14:13
(i32.const 4)
;;@ (lib)/memory.ts:14:14
(i32.const 3)
)
;;@ (lib)/memory.ts:14:18
;;@ (lib)/memory.ts:14:20
(i32.const 0)
)
;;@ (lib)/memory.ts:14:21
;;@ (lib)/memory.ts:14:23
(block
(block $break|1
(loop $continue|1
@ -547,10 +549,10 @@
(block $case0|2
(set_local $5
;;@ (lib)/memory.ts:44:12
(i32.rem_u
(i32.and
(get_local $0)
;;@ (lib)/memory.ts:44:19
(i32.const 4)
(i32.const 3)
)
)
(br_if $case0|2
@ -2485,28 +2487,30 @@
(if
;;@ (lib)/memory.ts:155:8
(i32.eq
(i32.rem_u
(i32.and
;;@ (lib)/memory.ts:155:9
(get_local $1)
;;@ (lib)/memory.ts:155:14
(i32.const 8)
;;@ (lib)/memory.ts:155:15
(i32.const 7)
)
;;@ (lib)/memory.ts:155:19
(i32.rem_u
;;@ (lib)/memory.ts:155:21
(i32.and
;;@ (lib)/memory.ts:155:22
(get_local $0)
;;@ (lib)/memory.ts:155:26
(i32.const 8)
;;@ (lib)/memory.ts:155:29
(i32.const 7)
)
)
;;@ (lib)/memory.ts:155:29
;;@ (lib)/memory.ts:155:33
(block
(block $break|0
(loop $continue|0
(if
;;@ (lib)/memory.ts:156:13
(i32.rem_u
(i32.and
(get_local $0)
;;@ (lib)/memory.ts:156:20
(i32.const 8)
(i32.const 7)
)
(block
(block
@ -2592,7 +2596,7 @@
(set_local $2
(i32.sub
(get_local $2)
;;@ (lib)/memory.ts:164:13
;;@ (lib)/memory.ts:164:16
(i32.const 8)
)
)
@ -2608,7 +2612,7 @@
(set_local $1
(i32.add
(get_local $1)
;;@ (lib)/memory.ts:166:15
;;@ (lib)/memory.ts:166:16
(i32.const 8)
)
)
@ -2681,25 +2685,27 @@
(if
;;@ (lib)/memory.ts:174:8
(i32.eq
(i32.rem_u
(i32.and
;;@ (lib)/memory.ts:174:9
(get_local $1)
;;@ (lib)/memory.ts:174:14
(i32.const 8)
;;@ (lib)/memory.ts:174:15
(i32.const 7)
)
;;@ (lib)/memory.ts:174:19
(i32.rem_u
;;@ (lib)/memory.ts:174:21
(i32.and
;;@ (lib)/memory.ts:174:22
(get_local $0)
;;@ (lib)/memory.ts:174:26
(i32.const 8)
;;@ (lib)/memory.ts:174:29
(i32.const 7)
)
)
;;@ (lib)/memory.ts:174:29
;;@ (lib)/memory.ts:174:33
(block
(block $break|3
(loop $continue|3
(if
;;@ (lib)/memory.ts:175:13
(i32.rem_u
(i32.and
(i32.add
;;@ (lib)/memory.ts:175:14
(get_local $0)
@ -2707,7 +2713,7 @@
(get_local $2)
)
;;@ (lib)/memory.ts:175:26
(i32.const 8)
(i32.const 7)
)
(block
(block
@ -3448,15 +3454,16 @@
;;@ (lib)/memory.ts:220:17
(i32.mul
(i32.div_u
;;@ (lib)/memory.ts:220:18
(i32.sub
(i32.const 0)
;;@ (lib)/memory.ts:220:18
;;@ (lib)/memory.ts:220:19
(i32.const 1)
)
;;@ (lib)/memory.ts:220:22
;;@ (lib)/memory.ts:220:23
(i32.const 255)
)
;;@ (lib)/memory.ts:220:28
;;@ (lib)/memory.ts:220:30
(get_local $1)
)
)