Skip to content

Commit a4d53ad

Browse files
authored
s2: Load after checking src limit on amd64. (#362)
Fixes rare crash on amd64. Fixes #361
1 parent 93b05d6 commit a4d53ad

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

s2/_generate/gen.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,6 @@ func (o options) genEncodeBlockAsm(name string, tableBits, skipLog, hashBytes, m
237237
})
238238

239239
cv := GP64()
240-
MOVQ(Mem{Base: src, Index: s, Scale: 1}, cv)
241240
nextS := GP32()
242241
// nextS := s + (s-nextEmit)>>6 + 4
243242
{
@@ -252,6 +251,7 @@ func (o options) genEncodeBlockAsm(name string, tableBits, skipLog, hashBytes, m
252251
CMPL(nextS.As32(), sLimitL)
253252
JGE(LabelRef("emit_remainder_" + name))
254253
}
254+
MOVQ(Mem{Base: src, Index: s, Scale: 1}, cv)
255255
assert(func(ok LabelRef) {
256256
// Check if s is valid (we should have jumped above if not)
257257
tmp := GP64()
@@ -888,7 +888,6 @@ func (o options) genEncodeBetterBlockAsm(name string, lTableBits, skipLog, lHash
888888
})
889889

890890
cv := GP64()
891-
MOVQ(Mem{Base: src, Index: s, Scale: 1}, cv)
892891
nextS := GP32()
893892
// nextS := s + (s-nextEmit)>>skipLog + 1
894893
{
@@ -903,6 +902,7 @@ func (o options) genEncodeBetterBlockAsm(name string, lTableBits, skipLog, lHash
903902
CMPL(nextS.As32(), sLimitL)
904903
JGE(LabelRef("emit_remainder_" + name))
905904
}
905+
MOVQ(Mem{Base: src, Index: s, Scale: 1}, cv)
906906
assert(func(ok LabelRef) {
907907
// Check if s is valid (we should have jumped above if not)
908908
tmp := GP64()

s2/encodeblock_amd64.s

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ zero_loop_encodeBlockAsm:
4040
MOVQ src_base+24(FP), DX
4141

4242
search_loop_encodeBlockAsm:
43-
MOVQ (DX)(CX*1), SI
4443
MOVL CX, BP
4544
SUBL 12(SP), BP
4645
SHRL $0x06, BP
4746
LEAL 4(CX)(BP*1), BP
4847
CMPL BP, 8(SP)
4948
JGE emit_remainder_encodeBlockAsm
49+
MOVQ (DX)(CX*1), SI
5050
MOVL BP, 20(SP)
5151
MOVQ $0x0000cf1bbcdcbf9b, R8
5252
MOVQ SI, R9
@@ -1252,13 +1252,13 @@ zero_loop_encodeBlockAsm4MB:
12521252
MOVQ src_base+24(FP), DX
12531253

12541254
search_loop_encodeBlockAsm4MB:
1255-
MOVQ (DX)(CX*1), SI
12561255
MOVL CX, BP
12571256
SUBL 12(SP), BP
12581257
SHRL $0x06, BP
12591258
LEAL 4(CX)(BP*1), BP
12601259
CMPL BP, 8(SP)
12611260
JGE emit_remainder_encodeBlockAsm4MB
1261+
MOVQ (DX)(CX*1), SI
12621262
MOVL BP, 20(SP)
12631263
MOVQ $0x0000cf1bbcdcbf9b, R8
12641264
MOVQ SI, R9
@@ -2385,13 +2385,13 @@ zero_loop_encodeBlockAsm12B:
23852385
MOVQ src_base+24(FP), DX
23862386

23872387
search_loop_encodeBlockAsm12B:
2388-
MOVQ (DX)(CX*1), SI
23892388
MOVL CX, BP
23902389
SUBL 12(SP), BP
23912390
SHRL $0x05, BP
23922391
LEAL 4(CX)(BP*1), BP
23932392
CMPL BP, 8(SP)
23942393
JGE emit_remainder_encodeBlockAsm12B
2394+
MOVQ (DX)(CX*1), SI
23952395
MOVL BP, 20(SP)
23962396
MOVQ $0x000000cf1bbcdcbb, R8
23972397
MOVQ SI, R9
@@ -3289,13 +3289,13 @@ zero_loop_encodeBlockAsm10B:
32893289
MOVQ src_base+24(FP), DX
32903290

32913291
search_loop_encodeBlockAsm10B:
3292-
MOVQ (DX)(CX*1), SI
32933292
MOVL CX, BP
32943293
SUBL 12(SP), BP
32953294
SHRL $0x05, BP
32963295
LEAL 4(CX)(BP*1), BP
32973296
CMPL BP, 8(SP)
32983297
JGE emit_remainder_encodeBlockAsm10B
3298+
MOVQ (DX)(CX*1), SI
32993299
MOVL BP, 20(SP)
33003300
MOVQ $0x9e3779b1, R8
33013301
MOVQ SI, R9
@@ -4193,13 +4193,13 @@ zero_loop_encodeBlockAsm8B:
41934193
MOVQ src_base+24(FP), DX
41944194

41954195
search_loop_encodeBlockAsm8B:
4196-
MOVQ (DX)(CX*1), SI
41974196
MOVL CX, BP
41984197
SUBL 12(SP), BP
41994198
SHRL $0x04, BP
42004199
LEAL 4(CX)(BP*1), BP
42014200
CMPL BP, 8(SP)
42024201
JGE emit_remainder_encodeBlockAsm8B
4202+
MOVQ (DX)(CX*1), SI
42034203
MOVL BP, 20(SP)
42044204
MOVQ $0x9e3779b1, R8
42054205
MOVQ SI, R9
@@ -5081,13 +5081,13 @@ zero_loop_encodeBetterBlockAsm:
50815081
MOVQ src_base+24(FP), DX
50825082

50835083
search_loop_encodeBetterBlockAsm:
5084-
MOVQ (DX)(CX*1), SI
50855084
MOVL CX, BP
50865085
SUBL 12(SP), BP
50875086
SHRL $0x07, BP
50885087
LEAL 1(CX)(BP*1), BP
50895088
CMPL BP, 8(SP)
50905089
JGE emit_remainder_encodeBetterBlockAsm
5090+
MOVQ (DX)(CX*1), SI
50915091
MOVL BP, 20(SP)
50925092
MOVQ $0x00cf1bbcdcbfa563, R8
50935093
MOVQ $0x9e3779b1, BP
@@ -6059,13 +6059,13 @@ zero_loop_encodeBetterBlockAsm4MB:
60596059
MOVQ src_base+24(FP), DX
60606060

60616061
search_loop_encodeBetterBlockAsm4MB:
6062-
MOVQ (DX)(CX*1), SI
60636062
MOVL CX, BP
60646063
SUBL 12(SP), BP
60656064
SHRL $0x07, BP
60666065
LEAL 1(CX)(BP*1), BP
60676066
CMPL BP, 8(SP)
60686067
JGE emit_remainder_encodeBetterBlockAsm4MB
6068+
MOVQ (DX)(CX*1), SI
60696069
MOVL BP, 20(SP)
60706070
MOVQ $0x00cf1bbcdcbfa563, R8
60716071
MOVQ $0x9e3779b1, BP
@@ -6980,13 +6980,13 @@ zero_loop_encodeBetterBlockAsm12B:
69806980
MOVQ src_base+24(FP), DX
69816981

69826982
search_loop_encodeBetterBlockAsm12B:
6983-
MOVQ (DX)(CX*1), SI
69846983
MOVL CX, BP
69856984
SUBL 12(SP), BP
69866985
SHRL $0x06, BP
69876986
LEAL 1(CX)(BP*1), BP
69886987
CMPL BP, 8(SP)
69896988
JGE emit_remainder_encodeBetterBlockAsm12B
6989+
MOVQ (DX)(CX*1), SI
69906990
MOVL BP, 20(SP)
69916991
MOVQ $0x0000cf1bbcdcbf9b, R8
69926992
MOVQ $0x9e3779b1, BP
@@ -7755,13 +7755,13 @@ zero_loop_encodeBetterBlockAsm10B:
77557755
MOVQ src_base+24(FP), DX
77567756

77577757
search_loop_encodeBetterBlockAsm10B:
7758-
MOVQ (DX)(CX*1), SI
77597758
MOVL CX, BP
77607759
SUBL 12(SP), BP
77617760
SHRL $0x05, BP
77627761
LEAL 1(CX)(BP*1), BP
77637762
CMPL BP, 8(SP)
77647763
JGE emit_remainder_encodeBetterBlockAsm10B
7764+
MOVQ (DX)(CX*1), SI
77657765
MOVL BP, 20(SP)
77667766
MOVQ $0x0000cf1bbcdcbf9b, R8
77677767
MOVQ $0x9e3779b1, BP
@@ -8530,13 +8530,13 @@ zero_loop_encodeBetterBlockAsm8B:
85308530
MOVQ src_base+24(FP), DX
85318531

85328532
search_loop_encodeBetterBlockAsm8B:
8533-
MOVQ (DX)(CX*1), SI
85348533
MOVL CX, BP
85358534
SUBL 12(SP), BP
85368535
SHRL $0x04, BP
85378536
LEAL 1(CX)(BP*1), BP
85388537
CMPL BP, 8(SP)
85398538
JGE emit_remainder_encodeBetterBlockAsm8B
8539+
MOVQ (DX)(CX*1), SI
85408540
MOVL BP, 20(SP)
85418541
MOVQ $0x0000cf1bbcdcbf9b, R8
85428542
MOVQ $0x9e3779b1, BP
@@ -9295,13 +9295,13 @@ zero_loop_encodeSnappyBlockAsm:
92959295
MOVQ src_base+24(FP), DX
92969296

92979297
search_loop_encodeSnappyBlockAsm:
9298-
MOVQ (DX)(CX*1), SI
92999298
MOVL CX, BP
93009299
SUBL 12(SP), BP
93019300
SHRL $0x06, BP
93029301
LEAL 4(CX)(BP*1), BP
93039302
CMPL BP, 8(SP)
93049303
JGE emit_remainder_encodeSnappyBlockAsm
9304+
MOVQ (DX)(CX*1), SI
93059305
MOVL BP, 20(SP)
93069306
MOVQ $0x0000cf1bbcdcbf9b, R8
93079307
MOVQ SI, R9
@@ -10169,13 +10169,13 @@ zero_loop_encodeSnappyBlockAsm12B:
1016910169
MOVQ src_base+24(FP), DX
1017010170

1017110171
search_loop_encodeSnappyBlockAsm12B:
10172-
MOVQ (DX)(CX*1), SI
1017310172
MOVL CX, BP
1017410173
SUBL 12(SP), BP
1017510174
SHRL $0x05, BP
1017610175
LEAL 4(CX)(BP*1), BP
1017710176
CMPL BP, 8(SP)
1017810177
JGE emit_remainder_encodeSnappyBlockAsm12B
10178+
MOVQ (DX)(CX*1), SI
1017910179
MOVL BP, 20(SP)
1018010180
MOVQ $0x000000cf1bbcdcbb, R8
1018110181
MOVQ SI, R9
@@ -10938,13 +10938,13 @@ zero_loop_encodeSnappyBlockAsm10B:
1093810938
MOVQ src_base+24(FP), DX
1093910939

1094010940
search_loop_encodeSnappyBlockAsm10B:
10941-
MOVQ (DX)(CX*1), SI
1094210941
MOVL CX, BP
1094310942
SUBL 12(SP), BP
1094410943
SHRL $0x05, BP
1094510944
LEAL 4(CX)(BP*1), BP
1094610945
CMPL BP, 8(SP)
1094710946
JGE emit_remainder_encodeSnappyBlockAsm10B
10947+
MOVQ (DX)(CX*1), SI
1094810948
MOVL BP, 20(SP)
1094910949
MOVQ $0x9e3779b1, R8
1095010950
MOVQ SI, R9
@@ -11707,13 +11707,13 @@ zero_loop_encodeSnappyBlockAsm8B:
1170711707
MOVQ src_base+24(FP), DX
1170811708

1170911709
search_loop_encodeSnappyBlockAsm8B:
11710-
MOVQ (DX)(CX*1), SI
1171111710
MOVL CX, BP
1171211711
SUBL 12(SP), BP
1171311712
SHRL $0x04, BP
1171411713
LEAL 4(CX)(BP*1), BP
1171511714
CMPL BP, 8(SP)
1171611715
JGE emit_remainder_encodeSnappyBlockAsm8B
11716+
MOVQ (DX)(CX*1), SI
1171711717
MOVL BP, 20(SP)
1171811718
MOVQ $0x9e3779b1, R8
1171911719
MOVQ SI, R9

0 commit comments

Comments
 (0)