@@ -20,7 +20,7 @@ type dEntrySingle struct {
20
20
21
21
// double-symbols decoding
22
22
type dEntryDouble struct {
23
- seq uint16
23
+ seq [ 4 ] byte
24
24
nBits uint8
25
25
len uint8
26
26
}
@@ -914,7 +914,7 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
914
914
out := dst
915
915
dstEvery := (dstSize + 3 ) / 4
916
916
917
- shift := (8 - d .actualTableLog ) & 7
917
+ shift := (56 + ( 8 - d .actualTableLog )) & 63
918
918
919
919
const tlSize = 1 << 8
920
920
single := d .dt .single [:tlSize ]
@@ -935,79 +935,91 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
935
935
// Interleave 2 decodes.
936
936
const stream = 0
937
937
const stream2 = 1
938
- br [stream ].fillFast ()
939
- br [stream2 ].fillFast ()
940
-
941
- v := single [br [stream ].peekByteFast ()>> shift ].entry
938
+ br1 := & br [stream ]
939
+ br2 := & br [stream2 ]
940
+ br1 .fillFast ()
941
+ br2 .fillFast ()
942
+
943
+ v := single [uint8 (br1 .value >> shift )].entry
944
+ v2 := single [uint8 (br2 .value >> shift )].entry
945
+ br1 .bitsRead += uint8 (v )
946
+ br1 .value <<= v & 63
947
+ br2 .bitsRead += uint8 (v2 )
948
+ br2 .value <<= v2 & 63
942
949
buf [off + bufoff * stream ] = uint8 (v >> 8 )
943
- br [stream ].advance (uint8 (v ))
944
-
945
- v2 := single [br [stream2 ].peekByteFast ()>> shift ].entry
946
950
buf [off + bufoff * stream2 ] = uint8 (v2 >> 8 )
947
- br [stream2 ].advance (uint8 (v2 ))
948
951
949
- v = single [br [stream ].peekByteFast ()>> shift ].entry
952
+ v = single [uint8 (br1 .value >> shift )].entry
953
+ v2 = single [uint8 (br2 .value >> shift )].entry
954
+ br1 .bitsRead += uint8 (v )
955
+ br1 .value <<= v & 63
956
+ br2 .bitsRead += uint8 (v2 )
957
+ br2 .value <<= v2 & 63
950
958
buf [off + bufoff * stream + 1 ] = uint8 (v >> 8 )
951
- br [stream ].advance (uint8 (v ))
952
-
953
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
954
959
buf [off + bufoff * stream2 + 1 ] = uint8 (v2 >> 8 )
955
- br [stream2 ].advance (uint8 (v2 ))
956
960
957
- v = single [br [stream ].peekByteFast ()>> shift ].entry
961
+ v = single [uint8 (br1 .value >> shift )].entry
962
+ v2 = single [uint8 (br2 .value >> shift )].entry
963
+ br1 .bitsRead += uint8 (v )
964
+ br1 .value <<= v & 63
965
+ br2 .bitsRead += uint8 (v2 )
966
+ br2 .value <<= v2 & 63
958
967
buf [off + bufoff * stream + 2 ] = uint8 (v >> 8 )
959
- br [stream ].advance (uint8 (v ))
960
-
961
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
962
968
buf [off + bufoff * stream2 + 2 ] = uint8 (v2 >> 8 )
963
- br [stream2 ].advance (uint8 (v2 ))
964
969
965
- v = single [br [stream ].peekByteFast ()>> shift ].entry
966
- buf [off + bufoff * stream + 3 ] = uint8 (v >> 8 )
967
- br [stream ].advance (uint8 (v ))
968
-
969
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
970
+ v = single [uint8 (br1 .value >> shift )].entry
971
+ v2 = single [uint8 (br2 .value >> shift )].entry
972
+ br1 .bitsRead += uint8 (v )
973
+ br1 .value <<= v & 63
974
+ br2 .bitsRead += uint8 (v2 )
975
+ br2 .value <<= v2 & 63
970
976
buf [off + bufoff * stream2 + 3 ] = uint8 (v2 >> 8 )
971
- br [ stream2 ]. advance ( uint8 (v2 ) )
977
+ buf [ off + bufoff * stream + 3 ] = uint8 (v >> 8 )
972
978
}
973
979
974
980
{
975
981
const stream = 2
976
982
const stream2 = 3
977
- br [stream ].fillFast ()
978
- br [stream2 ].fillFast ()
979
-
980
- v := single [br [stream ].peekByteFast ()>> shift ].entry
983
+ br1 := & br [stream ]
984
+ br2 := & br [stream2 ]
985
+ br1 .fillFast ()
986
+ br2 .fillFast ()
987
+
988
+ v := single [uint8 (br1 .value >> shift )].entry
989
+ v2 := single [uint8 (br2 .value >> shift )].entry
990
+ br1 .bitsRead += uint8 (v )
991
+ br1 .value <<= v & 63
992
+ br2 .bitsRead += uint8 (v2 )
993
+ br2 .value <<= v2 & 63
981
994
buf [off + bufoff * stream ] = uint8 (v >> 8 )
982
- br [stream ].advance (uint8 (v ))
983
-
984
- v2 := single [br [stream2 ].peekByteFast ()>> shift ].entry
985
995
buf [off + bufoff * stream2 ] = uint8 (v2 >> 8 )
986
- br [stream2 ].advance (uint8 (v2 ))
987
996
988
- v = single [br [stream ].peekByteFast ()>> shift ].entry
997
+ v = single [uint8 (br1 .value >> shift )].entry
998
+ v2 = single [uint8 (br2 .value >> shift )].entry
999
+ br1 .bitsRead += uint8 (v )
1000
+ br1 .value <<= v & 63
1001
+ br2 .bitsRead += uint8 (v2 )
1002
+ br2 .value <<= v2 & 63
989
1003
buf [off + bufoff * stream + 1 ] = uint8 (v >> 8 )
990
- br [stream ].advance (uint8 (v ))
991
-
992
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
993
1004
buf [off + bufoff * stream2 + 1 ] = uint8 (v2 >> 8 )
994
- br [stream2 ].advance (uint8 (v2 ))
995
1005
996
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1006
+ v = single [uint8 (br1 .value >> shift )].entry
1007
+ v2 = single [uint8 (br2 .value >> shift )].entry
1008
+ br1 .bitsRead += uint8 (v )
1009
+ br1 .value <<= v & 63
1010
+ br2 .bitsRead += uint8 (v2 )
1011
+ br2 .value <<= v2 & 63
997
1012
buf [off + bufoff * stream + 2 ] = uint8 (v >> 8 )
998
- br [stream ].advance (uint8 (v ))
999
-
1000
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1001
1013
buf [off + bufoff * stream2 + 2 ] = uint8 (v2 >> 8 )
1002
- br [stream2 ].advance (uint8 (v2 ))
1003
-
1004
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1005
- buf [off + bufoff * stream + 3 ] = uint8 (v >> 8 )
1006
- br [stream ].advance (uint8 (v ))
1007
1014
1008
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1015
+ v = single [uint8 (br1 .value >> shift )].entry
1016
+ v2 = single [uint8 (br2 .value >> shift )].entry
1017
+ br1 .bitsRead += uint8 (v )
1018
+ br1 .value <<= v & 63
1019
+ br2 .bitsRead += uint8 (v2 )
1020
+ br2 .value <<= v2 & 63
1009
1021
buf [off + bufoff * stream2 + 3 ] = uint8 (v2 >> 8 )
1010
- br [ stream2 ]. advance ( uint8 (v2 ) )
1022
+ buf [ off + bufoff * stream + 3 ] = uint8 (v >> 8 )
1011
1023
}
1012
1024
1013
1025
off += 4
@@ -1073,7 +1085,7 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {
1073
1085
}
1074
1086
1075
1087
// Read value and increment offset.
1076
- v := single [br .peekByteFast () >> shift ].entry
1088
+ v := single [uint8 ( br .value >> shift ) ].entry
1077
1089
nBits := uint8 (v )
1078
1090
br .advance (nBits )
1079
1091
bitsLeft -= int (nBits )
@@ -1121,7 +1133,7 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
1121
1133
out := dst
1122
1134
dstEvery := (dstSize + 3 ) / 4
1123
1135
1124
- const shift = 0
1136
+ const shift = 56
1125
1137
const tlSize = 1 << 8
1126
1138
const tlMask = tlSize - 1
1127
1139
single := d .dt .single [:tlSize ]
@@ -1145,37 +1157,41 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
1145
1157
br [stream ].fillFast ()
1146
1158
br [stream2 ].fillFast ()
1147
1159
1148
- v := single [br [stream ].peekByteFast ()>> shift ].entry
1160
+ v := single [uint8 (br [stream ].value >> shift )].entry
1161
+ v2 := single [uint8 (br [stream2 ].value >> shift )].entry
1162
+ br [stream ].bitsRead += uint8 (v )
1163
+ br [stream ].value <<= v & 63
1164
+ br [stream2 ].bitsRead += uint8 (v2 )
1165
+ br [stream2 ].value <<= v2 & 63
1149
1166
buf [off + bufoff * stream ] = uint8 (v >> 8 )
1150
- br [stream ].advance (uint8 (v ))
1151
-
1152
- v2 := single [br [stream2 ].peekByteFast ()>> shift ].entry
1153
1167
buf [off + bufoff * stream2 ] = uint8 (v2 >> 8 )
1154
- br [stream2 ].advance (uint8 (v2 ))
1155
1168
1156
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1169
+ v = single [uint8 (br [stream ].value >> shift )].entry
1170
+ v2 = single [uint8 (br [stream2 ].value >> shift )].entry
1171
+ br [stream ].bitsRead += uint8 (v )
1172
+ br [stream ].value <<= v & 63
1173
+ br [stream2 ].bitsRead += uint8 (v2 )
1174
+ br [stream2 ].value <<= v2 & 63
1157
1175
buf [off + bufoff * stream + 1 ] = uint8 (v >> 8 )
1158
- br [stream ].advance (uint8 (v ))
1159
-
1160
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1161
1176
buf [off + bufoff * stream2 + 1 ] = uint8 (v2 >> 8 )
1162
- br [stream2 ].advance (uint8 (v2 ))
1163
1177
1164
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1178
+ v = single [uint8 (br [stream ].value >> shift )].entry
1179
+ v2 = single [uint8 (br [stream2 ].value >> shift )].entry
1180
+ br [stream ].bitsRead += uint8 (v )
1181
+ br [stream ].value <<= v & 63
1182
+ br [stream2 ].bitsRead += uint8 (v2 )
1183
+ br [stream2 ].value <<= v2 & 63
1165
1184
buf [off + bufoff * stream + 2 ] = uint8 (v >> 8 )
1166
- br [stream ].advance (uint8 (v ))
1167
-
1168
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1169
1185
buf [off + bufoff * stream2 + 2 ] = uint8 (v2 >> 8 )
1170
- br [stream2 ].advance (uint8 (v2 ))
1171
1186
1172
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1187
+ v = single [uint8 (br [stream ].value >> shift )].entry
1188
+ v2 = single [uint8 (br [stream2 ].value >> shift )].entry
1189
+ br [stream ].bitsRead += uint8 (v )
1190
+ br [stream ].value <<= v & 63
1191
+ br [stream2 ].bitsRead += uint8 (v2 )
1192
+ br [stream2 ].value <<= v2 & 63
1173
1193
buf [off + bufoff * stream + 3 ] = uint8 (v >> 8 )
1174
- br [stream ].advance (uint8 (v ))
1175
-
1176
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1177
1194
buf [off + bufoff * stream2 + 3 ] = uint8 (v2 >> 8 )
1178
- br [stream2 ].advance (uint8 (v2 ))
1179
1195
}
1180
1196
1181
1197
{
@@ -1184,37 +1200,41 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
1184
1200
br [stream ].fillFast ()
1185
1201
br [stream2 ].fillFast ()
1186
1202
1187
- v := single [br [stream ].peekByteFast ()>> shift ].entry
1203
+ v := single [uint8 (br [stream ].value >> shift )].entry
1204
+ v2 := single [uint8 (br [stream2 ].value >> shift )].entry
1205
+ br [stream ].bitsRead += uint8 (v )
1206
+ br [stream ].value <<= v & 63
1207
+ br [stream2 ].bitsRead += uint8 (v2 )
1208
+ br [stream2 ].value <<= v2 & 63
1188
1209
buf [off + bufoff * stream ] = uint8 (v >> 8 )
1189
- br [stream ].advance (uint8 (v ))
1190
-
1191
- v2 := single [br [stream2 ].peekByteFast ()>> shift ].entry
1192
1210
buf [off + bufoff * stream2 ] = uint8 (v2 >> 8 )
1193
- br [stream2 ].advance (uint8 (v2 ))
1194
1211
1195
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1212
+ v = single [uint8 (br [stream ].value >> shift )].entry
1213
+ v2 = single [uint8 (br [stream2 ].value >> shift )].entry
1214
+ br [stream ].bitsRead += uint8 (v )
1215
+ br [stream ].value <<= v & 63
1216
+ br [stream2 ].bitsRead += uint8 (v2 )
1217
+ br [stream2 ].value <<= v2 & 63
1196
1218
buf [off + bufoff * stream + 1 ] = uint8 (v >> 8 )
1197
- br [stream ].advance (uint8 (v ))
1198
-
1199
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1200
1219
buf [off + bufoff * stream2 + 1 ] = uint8 (v2 >> 8 )
1201
- br [stream2 ].advance (uint8 (v2 ))
1202
1220
1203
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1221
+ v = single [uint8 (br [stream ].value >> shift )].entry
1222
+ v2 = single [uint8 (br [stream2 ].value >> shift )].entry
1223
+ br [stream ].bitsRead += uint8 (v )
1224
+ br [stream ].value <<= v & 63
1225
+ br [stream2 ].bitsRead += uint8 (v2 )
1226
+ br [stream2 ].value <<= v2 & 63
1204
1227
buf [off + bufoff * stream + 2 ] = uint8 (v >> 8 )
1205
- br [stream ].advance (uint8 (v ))
1206
-
1207
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1208
1228
buf [off + bufoff * stream2 + 2 ] = uint8 (v2 >> 8 )
1209
- br [stream2 ].advance (uint8 (v2 ))
1210
1229
1211
- v = single [br [stream ].peekByteFast ()>> shift ].entry
1230
+ v = single [uint8 (br [stream ].value >> shift )].entry
1231
+ v2 = single [uint8 (br [stream2 ].value >> shift )].entry
1232
+ br [stream ].bitsRead += uint8 (v )
1233
+ br [stream ].value <<= v & 63
1234
+ br [stream2 ].bitsRead += uint8 (v2 )
1235
+ br [stream2 ].value <<= v2 & 63
1212
1236
buf [off + bufoff * stream + 3 ] = uint8 (v >> 8 )
1213
- br [stream ].advance (uint8 (v ))
1214
-
1215
- v2 = single [br [stream2 ].peekByteFast ()>> shift ].entry
1216
1237
buf [off + bufoff * stream2 + 3 ] = uint8 (v2 >> 8 )
1217
- br [stream2 ].advance (uint8 (v2 ))
1218
1238
}
1219
1239
1220
1240
off += 4
@@ -1280,7 +1300,7 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {
1280
1300
}
1281
1301
1282
1302
// Read value and increment offset.
1283
- v := single [br .peekByteFast ()>> shift ].entry
1303
+ v := single [br .peekByteFast ()].entry
1284
1304
nBits := uint8 (v )
1285
1305
br .advance (nBits )
1286
1306
bitsLeft -= int (nBits )
0 commit comments