Skip to content

Commit f39f553

Browse files
committed
Use stack instead of AA, BB, CC and DD variables
The motivation is to hope for increase in speed where we avoid getting and setting these variables once for every 64-byte block.
1 parent a476fdc commit f39f553

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

MD5.wat.m4

+9-9
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ define(`I', `(i32.xor (local.get $$2) (i32.or (local.get $$1) (i32.xor (local.ge
2727
(func (export "update") (param $start i32) (param $n_bytes i32) (param $context i32)
2828
(local $end i32)
2929
(local $A i32) (local $B i32) (local $C i32) (local $D i32)
30-
(local $AA i32) (local $BB i32) (local $CC i32) (local $DD i32)
3130
(local.set $A (i32.load offset=0 (local.get $context)))
3231
(local.set $B (i32.load offset=4 (local.get $context)))
3332
(local.set $C (i32.load offset=8 (local.get $context)))
3433
(local.set $D (i32.load offset=12 (local.get $context)))
3534
(local.set $end (i32.add (local.get $start) (local.get $n_bytes)))
3635
(loop $process_block
37-
(local.set $AA (local.get $A))
38-
(local.tee $BB (local.get $B))
39-
(local.set $CC (local.get $C))
40-
(local.set $DD (local.get $D))
36+
local.get $C
37+
local.get $D
38+
local.get $A
39+
local.get $B
40+
local.get $B
4141
R(A, B, C, D, 0, 0xd76aa478, 7, `F')
4242
R(D, A, B, C, 1, 0xe8c7b756, 12, `F')
4343
R(C, D, A, B, 2, 0x242070db, 17, `F')
@@ -105,10 +105,10 @@ define(`I', `(i32.xor (local.get $$2) (i32.or (local.get $$1) (i32.xor (local.ge
105105
R(D, A, B, C, 11, 0xbd3af235, 10, `I')
106106
R(C, D, A, B, 2, 0x2ad7d2bb, 15, `I')
107107
R(B, C, D, A, 9, 0xeb86d391, 21, `I')
108-
(local.set $A (i32.add (local.get $A) (local.get $AA)))
109-
(local.set $B (i32.add (local.get $BB)))
110-
(local.set $C (i32.add (local.get $C) (local.get $CC)))
111-
(local.set $D (i32.add (local.get $D) (local.get $DD)))
108+
(local.set $B (i32.add))
109+
(local.set $A (i32.add (local.get $A)))
110+
(local.set $D (i32.add (local.get $D)))
111+
(local.set $C (i32.add (local.get $C)))
112112
(local.set $start (i32.add (local.get $start) (i32.const 64)))
113113
(br_if 0 (i32.ne (local.get $start) (local.get $end))))
114114
(i32.store offset=0 (local.get $context) (local.get $A))

0 commit comments

Comments
 (0)