Skip to content

Commit 2da53a0

Browse files
committed
Cleanup HUFv07_decompress4X2_usingDTable_internal a bit
1 parent 57790f5 commit 2da53a0

File tree

1 file changed

+32
-87
lines changed

1 file changed

+32
-87
lines changed

lib/legacy/zstd_v07.rs

Lines changed: 32 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -950,10 +950,10 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
950950
let opStart2 = ostart.add(segmentSize);
951951
let opStart3 = opStart2.add(segmentSize);
952952
let opStart4 = opStart3.add(segmentSize);
953-
let mut op1 = ostart;
954-
let mut op2 = opStart2;
955-
let mut op3 = opStart3;
956-
let mut op4 = opStart4;
953+
let mut op1 = Writer::from_range(ostart, opStart2);
954+
let mut op2 = Writer::from_range(opStart2, opStart3);
955+
let mut op3 = Writer::from_range(opStart3, opStart4);
956+
let mut op4 = Writer::from_range(opStart4, oend);
957957
let dtLog = DTable.description.tableLog as u32;
958958
if length4 > cSrc.len() {
959959
return Err(Error::corruption_detected);
@@ -967,97 +967,43 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
967967
endSignal &= bitD2.reload() == StreamStatus::Unfinished;
968968
endSignal &= bitD3.reload() == StreamStatus::Unfinished;
969969
endSignal &= bitD4.reload() == StreamStatus::Unfinished;
970-
while endSignal && op4 < oend.sub(7) {
971-
if MEM_64bits() {
972-
let fresh18 = op1;
973-
op1 = op1.add(1);
974-
*fresh18 = HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog);
975-
}
976-
if MEM_64bits() {
977-
let fresh19 = op2;
978-
op2 = op2.add(1);
979-
*fresh19 = HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog);
980-
}
981-
if MEM_64bits() {
982-
let fresh20 = op3;
983-
op3 = op3.add(1);
984-
*fresh20 = HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog);
985-
}
970+
while endSignal
971+
&& op1.capacity() >= 8
972+
&& op2.capacity() >= 8
973+
&& op3.capacity() >= 8
974+
&& op4.capacity() >= 8
975+
{
986976
if MEM_64bits() {
987-
let fresh21 = op4;
988-
op4 = op4.add(1);
989-
*fresh21 = HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog);
990-
}
991-
if MEM_64bits() || HUFv07_TABLELOG_MAX <= 12 {
992-
let fresh22 = op1;
993-
op1 = op1.add(1);
994-
*fresh22 = HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog);
995-
}
996-
if MEM_64bits() || HUFv07_TABLELOG_MAX <= 12 {
997-
let fresh23 = op2;
998-
op2 = op2.add(1);
999-
*fresh23 = HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog);
1000-
}
1001-
if MEM_64bits() || HUFv07_TABLELOG_MAX <= 12 {
1002-
let fresh24 = op3;
1003-
op3 = op3.add(1);
1004-
*fresh24 = HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog);
977+
op1.write_u8(HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog));
978+
op2.write_u8(HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog));
979+
op3.write_u8(HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog));
980+
op4.write_u8(HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog));
1005981
}
1006982
if MEM_64bits() || HUFv07_TABLELOG_MAX <= 12 {
1007-
let fresh25 = op4;
1008-
op4 = op4.add(1);
1009-
*fresh25 = HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog);
1010-
}
1011-
if MEM_64bits() {
1012-
let fresh26 = op1;
1013-
op1 = op1.add(1);
1014-
*fresh26 = HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog);
1015-
}
1016-
if MEM_64bits() {
1017-
let fresh27 = op2;
1018-
op2 = op2.add(1);
1019-
*fresh27 = HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog);
1020-
}
1021-
if MEM_64bits() {
1022-
let fresh28 = op3;
1023-
op3 = op3.add(1);
1024-
*fresh28 = HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog);
983+
op1.write_u8(HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog));
984+
op2.write_u8(HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog));
985+
op3.write_u8(HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog));
986+
op4.write_u8(HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog));
1025987
}
1026988
if MEM_64bits() {
1027-
let fresh29 = op4;
1028-
op4 = op4.add(1);
1029-
*fresh29 = HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog);
1030-
}
1031-
let fresh30 = op1;
1032-
op1 = op1.add(1);
1033-
*fresh30 = HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog);
1034-
let fresh31 = op2;
1035-
op2 = op2.add(1);
1036-
*fresh31 = HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog);
1037-
let fresh32 = op3;
1038-
op3 = op3.add(1);
1039-
*fresh32 = HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog);
1040-
let fresh33 = op4;
1041-
op4 = op4.add(1);
1042-
*fresh33 = HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog);
989+
op1.write_u8(HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog));
990+
op2.write_u8(HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog));
991+
op3.write_u8(HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog));
992+
op4.write_u8(HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog));
993+
}
994+
op1.write_u8(HUFv07_decodeSymbolX2(&mut bitD1, dt, dtLog));
995+
op2.write_u8(HUFv07_decodeSymbolX2(&mut bitD2, dt, dtLog));
996+
op3.write_u8(HUFv07_decodeSymbolX2(&mut bitD3, dt, dtLog));
997+
op4.write_u8(HUFv07_decodeSymbolX2(&mut bitD4, dt, dtLog));
1043998
endSignal &= bitD1.reload() == StreamStatus::Unfinished;
1044999
endSignal &= bitD2.reload() == StreamStatus::Unfinished;
10451000
endSignal &= bitD3.reload() == StreamStatus::Unfinished;
10461001
endSignal &= bitD4.reload() == StreamStatus::Unfinished;
10471002
}
1048-
if op1 > opStart2 {
1049-
return Err(Error::corruption_detected);
1050-
}
1051-
if op2 > opStart3 {
1052-
return Err(Error::corruption_detected);
1053-
}
1054-
if op3 > opStart4 {
1055-
return Err(Error::corruption_detected);
1056-
}
1057-
HUFv07_decodeStreamX2(Writer::from_range(op1, opStart2), &mut bitD1, dt, dtLog);
1058-
HUFv07_decodeStreamX2(Writer::from_range(op2, opStart3), &mut bitD2, dt, dtLog);
1059-
HUFv07_decodeStreamX2(Writer::from_range(op3, opStart4), &mut bitD3, dt, dtLog);
1060-
HUFv07_decodeStreamX2(Writer::from_range(op4, oend), &mut bitD4, dt, dtLog);
1003+
HUFv07_decodeStreamX2(op1, &mut bitD1, dt, dtLog);
1004+
HUFv07_decodeStreamX2(op2, &mut bitD2, dt, dtLog);
1005+
HUFv07_decodeStreamX2(op3, &mut bitD3, dt, dtLog);
1006+
HUFv07_decodeStreamX2(op4, &mut bitD4, dt, dtLog);
10611007
if !(bitD1.is_empty() && bitD2.is_empty() && bitD3.is_empty() && bitD4.is_empty()) {
10621008
return Err(Error::corruption_detected);
10631009
}
@@ -1408,8 +1354,7 @@ unsafe fn HUFv07_decompress4X4_usingDTable_internal(
14081354
let mut op2 = Writer::from_range(opStart2, opStart3);
14091355
let mut op3 = Writer::from_range(opStart3, opStart3);
14101356
let mut op4 = Writer::from_range(opStart4, oend);
1411-
let dtd = DTable.description;
1412-
let dtLog = dtd.tableLog as u32;
1357+
let dtLog = DTable.description.tableLog as u32;
14131358
if length4 > cSrc.len() {
14141359
return Err(Error::corruption_detected);
14151360
}

0 commit comments

Comments
 (0)