Page-18
Rectangle.1132
Sheet.3
; ; Shuffle the search string characters (xmm0) according to ...
;; Shuffle the search string characters (xmm0) according to the; unique character index (xmm1), and store the results in xmm5.;vpshufb xmm5, xmm0, xmm1
Square.1041
0
0
Square.1042
0
0
Square.1043
1
1
Square.1044
1
1
Square.1045
1
1
Square.1046
1
1
Square.1047
1
1
Square.1048
1
1
Square.1049
0
0
Square.1050
1
1
Square.1051
1
1
Square.1052
1
1
Square.1053
1
1
Square.1054
2
2
Square.1055
2
2
Square.1056
1
1
Sheet.20
Square.1057
Square.1058
Square.1059
Square.1060
Square.1061
Square.1062
Square.1063
Square.1064
Square.1065
Square.1066
Square.1067
Square.1068
Square.1069
Square.1070
T
T
Square.1071
A
A
Square.1072
C
C
Rectangle.1074
xmm0
xmm0
Rectangle.1075
xmm1
xmm1
Rectangle.1076
Search String
Search String
Rectangle.1077
Unique Index
Unique Index
Square.1057
C
C
Square.1058
C
C
Square.1059
A
A
Square.1060
A
A
Square.1061
A
A
Square.1062
A
A
Square.1063
A
A
Square.1064
A
A
Square.1065
C
C
Square.1066
A
A
Square.1067
A
A
Square.1068
A
A
Square.1069
A
A
Square.1070
T
T
Square.1071
T
T
Square.1072
A
A
Rectangle.1095
xmm5
xmm5
Rectangle.1096
Shuffled
Shuffled
Dynamic connector.1097
Dynamic connector.1098
Dynamic connector.1099
Dynamic connector.1100
Sheet.63
Square.1057
15
15
Square.1058
14
14
Square.1059
13
13
Square.1060
12
12
Square.1061
11
11
Square.1062
10
10
Square.1063
9
9
Square.1064
8
8
Square.1065
7
7
Square.1066
6
6
Square.1067
5
5
Square.1068
4
4
Square.1069
3
3
Square.1070
2
2
Square.1071
1
1
Square.1072
0
0
Dynamic connector.1118
Dynamic connector.1119
Dynamic connector.1120
Dynamic connector.1121
Dynamic connector.1122
Dynamic connector.1124
Dynamic connector.1125
Dynamic connector.1126
Dynamic connector.1127
Dynamic connector.1128
Dynamic connector.1129
Dynamic connector.1130
Rectangle.1131
Sheet.93
; ; Load the string buffer into xmm0, and the unique indexes ...
;; Load the string buffer into xmm0, and the unique indexes from; the string table into xmm1.;mov rax, String.Buffer[rdx]vmovdqu xmm0, xmmword ptr [rax]vmovdqa xmm1, xmmword ptr StringTable.UniqueIndex[rcx]
Sheet.94
Square.1057
Square.1058
Square.1059
Square.1060
Square.1061
Square.1062
Square.1063
Square.1064
Square.1065
Square.1066
Square.1067
Square.1068
Square.1069
Square.1070
T
T
Square.1071
A
A
Square.1072
C
C
Rectangle.1150
xmm0
xmm0
Rectangle.1151
Search String
Search String
Sheet.113
Square.1073
0
0
Square.1074
0
0
Square.1075
1
1
Square.1076
1
1
Square.1077
1
1
Square.1078
1
1
Square.1079
1
1
Square.1080
1
1
Square.1081
0
0
Square.1082
1
1
Square.1083
1
1
Square.1084
1
1
Square.1085
1
1
Square.1086
2
2
Square.1087
2
2
Square.1088
1
1
Rectangle.1092
xmm1
xmm1
Rectangle.1094
Unique Index
Unique Index
Rectangle.1155
Sheet.133
; ; Load the string table’s unique characters into xmm2, comp...
;; Load the string table’s unique characters into xmm2, compare; against the shuffled search string characters (xmm5), store; the result back into xmm5.;vmovdqa xmm2, xmmword ptr StringTable.UniqueChars[rcx]vcmpeqb xmm5, xmm5, xmm2
Square.1158
.
.
Square.1159
?
?
Square.1160
D
D
Square.1161
I
I
Square.1162
C
C
Square.1163
V
V
Square.1164
U
U
Square.1165
S
S
Square.1166
$
$
Square.1167
M
M
Square.1168
L
L
Square.1169
E
E
Square.1170
B
B
Square.1171
i
i
Square.1172
a
a
Square.1173
A
A
Rectangle.1091
xmm2
xmm2
Rectangle.1093
Unique Chars
Unique Chars
Square.1073
0
0
Square.1074
0
0
Square.1075
0
0
Square.1076
0
0
Square.1077
0
0
Square.1078
0
0
Square.1079
0
0
Square.1080
0
0
Square.1081
0
0
Square.1082
0
0
Square.1083
0
0
Square.1084
0
0
Square.1085
0
0
Square.1086
0
0
Square.1087
0
0
Square.1088
-1
-1
Rectangle.1092
xmm5
xmm5
Rectangle.1094
Unique Chars Match Mask
Unique CharsMatch Mask
Square.1195
C
C
Square.1196
C
C
Square.1197
A
A
Square.1198
A
A
Square.1199
A
A
Square.1200
A
A
Square.1201
A
A
Square.1202
A
A
Square.1203
C
C
Square.1204
A
A
Square.1205
A
A
Square.1206
A
A
Square.1207
A
A
Square.1208
T
T
Square.1209
T
T
Square.1210
A
A
Rectangle.1211
xmm5
xmm5
Rectangle.1212
Shuffled
Shuffled
Rectangle.1213
Sheet.189
; ; Load the lengths of each string table slot into xmm3, bro...
;; Load the lengths of each string table slot into xmm3, broadcast; the length of the search string (1 byte) across xmm4. Compare; greater than, identifying slots to exclude due to length.;vmovdqa xmm3, xmmword ptr StringTable.Lengths[rcx]vpbroadcastb xmm4, byte ptr String.Length[rdx]vpcmpgtb xmm1, xmm3, xmm4
Rectangle.1232
xmm0
xmm0
Rectangle.1233
Slot Lengths
Slot Lengths
Square.1235
3
3
Square.1236
3
3
Square.1237
3
3
Square.1238
3
3
Square.1239
3
3
Square.1240
3
3
Square.1241
3
3
Square.1242
3
3
Square.1243
3
3
Square.1244
3
3
Square.1245
3
3
Square.1246
3
3
Square.1247
3
3
Square.1248
3
3
Square.1249
3
3
Square.1250
3
3
Rectangle.1251
xmm1
xmm1
Rectangle.1252
Search String Length
Search StringLength
Square.1253
0
0
Square.1254
-1
-1
Square.1255
-1
-1
Square.1256
-1
-1
Square.1257
-1
-1
Square.1258
-1
-1
Square.1259
-1
-1
Square.1260
-1
-1
Square.1261
-1
-1
Square.1262
-1
-1
Square.1263
-1
-1
Square.1264
-1
-1
Square.1265
-1
-1
Square.1266
-1
-1
Square.1267
-1
-1
Square.1268
-1
-1
Rectangle.1269
xmm1
xmm1
Rectangle.1270
Length Match Mask
Length Match Mask
Rectangle.1272
Sheet.246
; ; Test the unique characters mask in xmm5 against the logic...
;; Test the unique characters mask in xmm5 against the logical not; (i.e. the inverse) of the slot length mask (xmm1). This will; set the carry flag, indicating there was no match found.;vptestxmm1, xmm5All zeros -> CY (carry flag) == 1 -> No match found.
Square.1311
-1
-1
Square.1312
0
0
Square.1313
0
0
Square.1314
0
0
Square.1315
0
0
Square.1316
0
0
Square.1317
0
0
Square.1318
0
0
Square.1319
0
0
Square.1320
0
0
Square.1321
0
0
Square.1322
0
0
Square.1323
0
0
Square.1324
0
0
Square.1325
0
0
Square.1326
0
0
Rectangle.1327
xmm1
xmm1
Rectangle.1328
Inverted Length Match Mask
Inverted Length Match Mask
Square.1329
0
0
Square.1330
0
0
Square.1331
0
0
Square.1332
0
0
Square.1333
0
0
Square.1334
0
0
Square.1335
0
0
Square.1336
0
0
Square.1337
0
0
Square.1338
0
0
Square.1339
0
0
Square.1340
0
0
Square.1341
0
0
Square.1342
0
0
Square.1343
0
0
Square.1344
-1
-1
Rectangle.1345
xmm5
xmm5
Rectangle.1346
Unique Chars Match Mask
Unique CharsMatch Mask
Square.1347
0
0
Square.1348
0
0
Square.1349
0
0
Square.1350
0
0
Square.1351
0
0
Square.1352
0
0
Square.1353
0
0
Square.1354
0
0
Square.1355
0
0
Square.1356
0
0
Square.1357
0
0
Square.1358
0
0
Square.1359
0
0
Square.1360
0
0
Square.1361
0
0
Square.1362
0
0
Dynamic connector
Dynamic connector.300
Sheet.301
http://trent.me/is-prefix-of-string-in-table Copyright 2018, ...
http://trent.me/is-prefix-of-string-in-table Copyright 2018, Trent Nelson <trent@trent.me>
Dynamic connector.302
Sheet.304
Square.191
1
1
Square.192
4
4
Square.193
5
5
Square.194
17
17
Square.195
6
6
Square.196
7
7
Square.197
7
7
Square.198
7
7
Square.199
4
4
Square.200
8
8
Square.201
8
8
Square.202
7
7
Square.203
5
5
Square.204
7
7
Square.205
8
8
Square.206
8
8