Skip to content

Commit 02c2124

Browse files
committed
fix
1 parent 6a7ca5f commit 02c2124

File tree

5 files changed

+141
-131
lines changed

5 files changed

+141
-131
lines changed

std/assembly/util/hash.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ function hashStr(key: string): u64 {
7373
return XXH64_SEED;
7474
}
7575
var len = key.length << 1;
76-
var h: u64 = XXH64_SEED + XXH64_P5 + u64(len);
76+
var h: u64 = 0;
7777

7878
if (len >= 32) {
7979
let s1 = XXH64_SEED + XXH64_P1 + XXH64_P2;
@@ -105,6 +105,8 @@ function hashStr(key: string): u64 {
105105

106106
h += u64(len);
107107
len -= i;
108+
} else {
109+
h = u64(len) + XXH64_SEED + XXH64_P5;
108110
}
109111

110112
var i = 0;

tests/compiler/std/hash.optimized.wat

Lines changed: 58 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
(start $~start)
1717
(func $~lib/util/hash/hashStr (param $0 i32)
1818
(local $1 i32)
19-
(local $2 i32)
20-
(local $3 i64)
21-
(local $4 i32)
22-
(local $5 i32)
23-
(local $6 i64)
24-
(local $7 i64)
19+
(local $2 i64)
20+
(local $3 i32)
21+
(local $4 i64)
22+
(local $5 i64)
23+
(local $6 i32)
24+
(local $7 i32)
2525
(local $8 i64)
2626
local.get $0
2727
i32.eqz
@@ -36,35 +36,30 @@
3636
i32.shr_u
3737
i32.const 1
3838
i32.shl
39-
local.tee $2
40-
i64.extend_i32_s
41-
i64.const 2870177450012600261
42-
i64.add
43-
local.set $8
44-
local.get $2
39+
local.tee $3
4540
i32.const 32
4641
i32.ge_s
47-
if (result i32)
42+
if
4843
i64.const 6983438078262162902
49-
local.set $8
44+
local.set $2
5045
i64.const -4417276706812531889
51-
local.set $7
46+
local.set $4
5247
i64.const 7046029288634856825
53-
local.set $6
54-
local.get $2
48+
local.set $5
49+
local.get $3
5550
i32.const 32
5651
i32.sub
57-
local.set $2
52+
local.set $3
5853
loop $while-continue|0
59-
local.get $2
60-
local.get $5
54+
local.get $3
55+
local.get $6
6156
i32.ge_s
6257
if
63-
local.get $8
58+
local.get $2
6459
local.get $0
65-
local.get $5
60+
local.get $6
6661
i32.add
67-
local.tee $4
62+
local.tee $7
6863
i64.load
6964
i64.const -4417276706812531889
7065
i64.mul
@@ -73,9 +68,9 @@
7368
i64.rotl
7469
i64.const -7046029288634856825
7570
i64.mul
76-
local.set $8
77-
local.get $7
71+
local.set $2
7872
local.get $4
73+
local.get $7
7974
i64.load offset=8
8075
i64.const -4417276706812531889
8176
i64.mul
@@ -84,9 +79,9 @@
8479
i64.rotl
8580
i64.const -7046029288634856825
8681
i64.mul
87-
local.set $7
88-
local.get $3
89-
local.get $4
82+
local.set $4
83+
local.get $8
84+
local.get $7
9085
i64.load offset=16
9186
i64.const -4417276706812531889
9287
i64.mul
@@ -95,9 +90,9 @@
9590
i64.rotl
9691
i64.const -7046029288634856825
9792
i64.mul
98-
local.set $3
99-
local.get $6
100-
local.get $4
93+
local.set $8
94+
local.get $5
95+
local.get $7
10196
i64.load offset=24
10297
i64.const -4417276706812531889
10398
i64.mul
@@ -106,32 +101,32 @@
106101
i64.rotl
107102
i64.const -7046029288634856825
108103
i64.mul
109-
local.set $6
110-
local.get $5
104+
local.set $5
105+
local.get $6
111106
i32.const 32
112107
i32.add
113-
local.set $5
108+
local.set $6
114109
br $while-continue|0
115110
end
116111
end
117-
local.get $2
112+
local.get $3
118113
i64.extend_i32_s
119-
local.get $8
114+
local.get $2
120115
i64.const 1
121116
i64.rotl
122-
local.get $7
117+
local.get $4
123118
i64.const 7
124119
i64.rotl
125120
i64.add
126-
local.get $3
121+
local.get $8
127122
i64.const 12
128123
i64.rotl
129124
i64.add
130-
local.get $6
125+
local.get $5
131126
i64.const 18
132127
i64.rotl
133128
i64.add
134-
local.get $8
129+
local.get $2
135130
i64.const -4417276706812531889
136131
i64.mul
137132
i64.const 31
@@ -143,7 +138,7 @@
143138
i64.mul
144139
i64.const -8796714831421723037
145140
i64.add
146-
local.get $7
141+
local.get $4
147142
i64.const -4417276706812531889
148143
i64.mul
149144
i64.const 31
@@ -155,7 +150,7 @@
155150
i64.mul
156151
i64.const -8796714831421723037
157152
i64.add
158-
local.get $3
153+
local.get $8
159154
i64.const -4417276706812531889
160155
i64.mul
161156
i64.const 31
@@ -167,7 +162,7 @@
167162
i64.mul
168163
i64.const -8796714831421723037
169164
i64.add
170-
local.get $6
165+
local.get $5
171166
i64.const -4417276706812531889
172167
i64.mul
173168
i64.const 31
@@ -180,22 +175,28 @@
180175
i64.const -8796714831421723037
181176
i64.add
182177
i64.add
183-
local.set $8
184-
local.get $2
185-
local.get $5
178+
local.set $2
179+
local.get $3
180+
local.get $6
186181
i32.sub
182+
local.set $3
187183
else
188-
local.get $2
184+
local.get $3
185+
i64.extend_i32_s
186+
i64.const 2870177450012600261
187+
i64.add
188+
local.set $2
189189
end
190+
local.get $3
190191
i32.const 8
191192
i32.sub
192-
local.set $2
193+
local.set $3
193194
loop $while-continue|1
194195
local.get $1
195-
local.get $2
196+
local.get $3
196197
i32.le_s
197198
if
198-
local.get $8
199+
local.get $2
199200
local.get $0
200201
local.get $1
201202
i32.add
@@ -213,21 +214,21 @@
213214
i64.mul
214215
i64.const -8796714831421723037
215216
i64.add
216-
local.set $8
217+
local.set $2
217218
local.get $1
218219
i32.const 8
219220
i32.add
220221
local.set $1
221222
br $while-continue|1
222223
end
223224
end
224-
local.get $2
225+
local.get $3
225226
local.get $1
226227
i32.const 4
227228
i32.add
228229
i32.ge_s
229230
if
230-
local.get $8
231+
local.get $2
231232
local.get $0
232233
local.get $1
233234
i32.add
@@ -241,18 +242,18 @@
241242
i64.mul
242243
i64.const 1609587929392839161
243244
i64.add
244-
local.set $8
245+
local.set $2
245246
local.get $1
246247
i32.const 4
247248
i32.add
248249
local.set $1
249250
end
250251
loop $while-continue|2
251252
local.get $1
252-
local.get $2
253+
local.get $3
253254
i32.lt_s
254255
if
255-
local.get $8
256+
local.get $2
256257
local.get $0
257258
local.get $1
258259
i32.add
@@ -264,7 +265,7 @@
264265
i64.rotl
265266
i64.const -7046029288634856825
266267
i64.mul
267-
local.set $8
268+
local.set $2
268269
local.get $1
269270
i32.const 1
270271
i32.add

tests/compiler/std/hash.untouched.wat

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,6 @@
6565
i32.shl
6666
local.set $2
6767
i64.const 0
68-
i64.const 2870177450012600261
69-
i64.add
70-
local.get $2
71-
i64.extend_i32_s
72-
i64.add
7368
local.set $3
7469
local.get $2
7570
i32.const 32
@@ -284,6 +279,14 @@
284279
local.get $7
285280
i32.sub
286281
local.set $2
282+
else
283+
local.get $2
284+
i64.extend_i32_s
285+
i64.const 0
286+
i64.add
287+
i64.const 2870177450012600261
288+
i64.add
289+
local.set $3
287290
end
288291
i32.const 0
289292
local.set $11

0 commit comments

Comments
 (0)