From 5831b68341827b544ea3f268c921e9044bd11047 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Thu, 8 Dec 2022 19:28:01 +0200 Subject: [PATCH 1/4] AstGen: add check for missing builtin argument Closes #13817 --- src/AstGen.zig | 4 ++++ .../missing_builtin_arg_in_initializer.zig | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 test/cases/compile_errors/missing_builtin_arg_in_initializer.zig diff --git a/src/AstGen.zig b/src/AstGen.zig index c9f44a6216..021990883a 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -9098,6 +9098,8 @@ fn nodeMayNeedMemoryLocation(tree: *const Ast, start_node: Ast.Node.Index, have_ .always => return true, .forward1 => node = node_datas[node].rhs, } + // Missing builtin arg is not a parsing error, expect an error later. + if (node == 0) return false; }, .builtin_call, .builtin_call_comma => { @@ -9112,6 +9114,8 @@ fn nodeMayNeedMemoryLocation(tree: *const Ast, start_node: Ast.Node.Index, have_ .always => return true, .forward1 => node = params[1], } + // Missing builtin arg is not a parsing error, expect an error later. + if (node == 0) return false; }, } } diff --git a/test/cases/compile_errors/missing_builtin_arg_in_initializer.zig b/test/cases/compile_errors/missing_builtin_arg_in_initializer.zig new file mode 100644 index 0000000000..0bada117b2 --- /dev/null +++ b/test/cases/compile_errors/missing_builtin_arg_in_initializer.zig @@ -0,0 +1,13 @@ +comptime { + const v = @as(); +} +comptime { + const u = @bitCast(u32); +} + +// error +// backend=stage2 +// target=native +// +// :2:15: error: expected 2 arguments, found 0 +// :5:15: error: expected 2 arguments, found 1 From 9d93b2ccf11f584320a2c5209dd2d94705167695 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Thu, 8 Dec 2022 19:52:05 +0200 Subject: [PATCH 2/4] Eliminate `BoundFn` type from the language Closes #9484 --- doc/langref.html.in | 7 +------ lib/std/builtin.zig | 1 - lib/std/hash/auto_hash.zig | 2 +- lib/std/mem.zig | 1 - lib/std/meta/trait.zig | 1 - lib/std/testing.zig | 1 - src/Autodoc.zig | 1 - src/Sema.zig | 14 -------------- src/arch/aarch64/CodeGen.zig | 1 - src/arch/aarch64/abi.zig | 1 - src/arch/arm/CodeGen.zig | 1 - src/arch/arm/abi.zig | 1 - src/arch/riscv64/abi.zig | 1 - src/arch/wasm/CodeGen.zig | 1 - src/arch/wasm/abi.zig | 1 - src/arch/x86_64/CodeGen.zig | 1 - src/arch/x86_64/abi.zig | 1 - src/codegen/c.zig | 4 ---- src/codegen/llvm.zig | 6 ------ src/codegen/spirv.zig | 2 -- src/type.zig | 2 -- src/value.zig | 2 -- test/behavior/type_info.zig | 2 +- 23 files changed, 3 insertions(+), 52 deletions(-) diff --git a/doc/langref.html.in b/doc/langref.html.in index e8f2770bbf..e79d5fbfc7 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -9366,12 +9366,7 @@ test "integer truncation" {
  • {#link|union#}
  • - For these types, {#syntax#}@Type{#endsyntax#} is not available: -

    - + {#syntax#}@Type{#endsyntax#} is not available for {#link|Functions#}. {#header_close#} {#header_open|@typeInfo#}
    {#syntax#}@typeInfo(comptime T: type) std.builtin.Type{#endsyntax#}
    diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig index fac5819b38..4ee9d4306b 100644 --- a/lib/std/builtin.zig +++ b/lib/std/builtin.zig @@ -210,7 +210,6 @@ pub const Type = union(enum) { Enum: Enum, Union: Union, Fn: Fn, - BoundFn: Fn, Opaque: Opaque, Frame: Frame, AnyFrame: AnyFrame, diff --git a/lib/std/hash/auto_hash.zig b/lib/std/hash/auto_hash.zig index 56cb4c726c..76cbab8698 100644 --- a/lib/std/hash/auto_hash.zig +++ b/lib/std/hash/auto_hash.zig @@ -101,7 +101,7 @@ pub fn hash(hasher: anytype, key: anytype, comptime strat: HashStrategy) void { .Bool => hash(hasher, @boolToInt(key), strat), .Enum => hash(hasher, @enumToInt(key), strat), .ErrorSet => hash(hasher, @errorToInt(key), strat), - .AnyFrame, .BoundFn, .Fn => hash(hasher, @ptrToInt(key), strat), + .AnyFrame, .Fn => hash(hasher, @ptrToInt(key), strat), .Pointer => @call(.{ .modifier = .always_inline }, hashPointer, .{ hasher, key, strat }), diff --git a/lib/std/mem.zig b/lib/std/mem.zig index c0385f6e98..a020c9b7e0 100644 --- a/lib/std/mem.zig +++ b/lib/std/mem.zig @@ -308,7 +308,6 @@ pub fn zeroes(comptime T: type) T { .ErrorUnion, .ErrorSet, .Fn, - .BoundFn, .Type, .NoReturn, .Undefined, diff --git a/lib/std/meta/trait.zig b/lib/std/meta/trait.zig index 51cc3638fb..2e9c2165f7 100644 --- a/lib/std/meta/trait.zig +++ b/lib/std/meta/trait.zig @@ -549,7 +549,6 @@ pub fn hasUniqueRepresentation(comptime T: type) bool { else => return false, // TODO can we know if it's true for some of these types ? .AnyFrame, - .BoundFn, .Enum, .ErrorSet, .Fn, diff --git a/lib/std/testing.zig b/lib/std/testing.zig index 6882a19f1d..3bb3d6e14b 100644 --- a/lib/std/testing.zig +++ b/lib/std/testing.zig @@ -46,7 +46,6 @@ pub fn expectError(expected_error: anyerror, actual_error_union: anytype) !void pub fn expectEqual(expected: anytype, actual: @TypeOf(expected)) !void { switch (@typeInfo(@TypeOf(actual))) { .NoReturn, - .BoundFn, .Opaque, .Frame, .AnyFrame, diff --git a/src/Autodoc.zig b/src/Autodoc.zig index 10fc336a41..55ff048482 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -607,7 +607,6 @@ const DocData = struct { is_test: bool = false, is_extern: bool = false, }, - BoundFn: struct { name: []const u8 }, Opaque: struct { name: []const u8, src: usize, // index into astNodes diff --git a/src/Sema.zig b/src/Sema.zig index c38ef626e6..7109a3c385 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -9275,7 +9275,6 @@ fn zirBitcast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air dest_ty.fmt(sema.mod), container, }); }, - .BoundFn => @panic("TODO remove this type from the language and compiler"), .Array, .Bool, @@ -9339,7 +9338,6 @@ fn zirBitcast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air operand_ty.fmt(sema.mod), container, }); }, - .BoundFn => @panic("TODO remove this type from the language and compiler"), .Array, .Bool, @@ -9777,7 +9775,6 @@ fn zirSwitchCond( .Undefined, .Null, .Optional, - .BoundFn, .Opaque, .Vector, .Frame, @@ -10361,7 +10358,6 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError .Undefined, .Null, .Optional, - .BoundFn, .Opaque, .Vector, .Frame, @@ -14833,7 +14829,6 @@ fn zirSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air. .NoReturn, .Undefined, .Null, - .BoundFn, .Opaque, => return sema.fail(block, operand_src, "no size available for type '{}'", .{ty.fmt(sema.mod)}), @@ -14877,7 +14872,6 @@ fn zirBitSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A .NoReturn, .Undefined, .Null, - .BoundFn, .Opaque, => return sema.fail(block, operand_src, "no size available for type '{}'", .{operand_ty.fmt(sema.mod)}), @@ -15908,7 +15902,6 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }), ); }, - .BoundFn => @panic("TODO remove this type from the language and compiler"), .Frame => return sema.failWithUseOfAsync(block, src), .AnyFrame => return sema.failWithUseOfAsync(block, src), } @@ -18609,7 +18602,6 @@ fn zirReify(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData, in const ty = try Type.Tag.function.create(sema.arena, fn_info); return sema.addType(ty); }, - .BoundFn => @panic("TODO delete BoundFn from the language"), .Frame => return sema.failWithUseOfAsync(block, src), } } @@ -21790,7 +21782,6 @@ fn validateRunTimeType( .Enum => return !(try sema.typeRequiresComptime(ty)), - .BoundFn, .ComptimeFloat, .ComptimeInt, .EnumLiteral, @@ -21876,7 +21867,6 @@ fn explainWhyTypeIsComptimeInner( try mod.errNoteNonLazy(src_loc, msg, "types are not available at runtime", .{}); }, - .BoundFn, .ComptimeFloat, .ComptimeInt, .EnumLiteral, @@ -21986,7 +21976,6 @@ fn validateExternType( .Null, .ErrorUnion, .ErrorSet, - .BoundFn, .Frame, => return false, .Void => return position == .union_field or position == .ret_ty, @@ -22058,7 +22047,6 @@ fn explainWhyTypeIsNotExtern( .Null, .ErrorUnion, .ErrorSet, - .BoundFn, .Frame, => return, @@ -22116,7 +22104,6 @@ fn validatePackedType(ty: Type) bool { .Null, .ErrorUnion, .ErrorSet, - .BoundFn, .Frame, .NoReturn, .Opaque, @@ -22158,7 +22145,6 @@ fn explainWhyTypeIsNotPacked( .EnumLiteral, .Undefined, .Null, - .BoundFn, .Frame, .NoReturn, .Opaque, diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index 4d541c4da7..2edc6cb7f9 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -6200,7 +6200,6 @@ fn genTypedValue(self: *Self, arg_tv: TypedValue) InnerError!MCValue { .NoReturn => unreachable, .Undefined => unreachable, .Null => unreachable, - .BoundFn => unreachable, .Opaque => unreachable, else => {}, diff --git a/src/arch/aarch64/abi.zig b/src/arch/aarch64/abi.zig index e83cc0444a..9b5cacc98e 100644 --- a/src/arch/aarch64/abi.zig +++ b/src/arch/aarch64/abi.zig @@ -64,7 +64,6 @@ pub fn classifyType(ty: Type, target: std.Target) Class { .ComptimeInt, .Undefined, .Null, - .BoundFn, .Fn, .Opaque, .EnumLiteral, diff --git a/src/arch/arm/CodeGen.zig b/src/arch/arm/CodeGen.zig index 257255e00c..6125ef1914 100644 --- a/src/arch/arm/CodeGen.zig +++ b/src/arch/arm/CodeGen.zig @@ -6156,7 +6156,6 @@ fn genTypedValue(self: *Self, arg_tv: TypedValue) InnerError!MCValue { .NoReturn => unreachable, .Undefined => unreachable, .Null => unreachable, - .BoundFn => unreachable, .Opaque => unreachable, else => {}, diff --git a/src/arch/arm/abi.zig b/src/arch/arm/abi.zig index 13424fd9fa..8b9ec45e24 100644 --- a/src/arch/arm/abi.zig +++ b/src/arch/arm/abi.zig @@ -105,7 +105,6 @@ pub fn classifyType(ty: Type, target: std.Target, ctx: Context) Class { .ComptimeInt, .Undefined, .Null, - .BoundFn, .Fn, .Opaque, .EnumLiteral, diff --git a/src/arch/riscv64/abi.zig b/src/arch/riscv64/abi.zig index 8a560f4596..26286a1e22 100644 --- a/src/arch/riscv64/abi.zig +++ b/src/arch/riscv64/abi.zig @@ -63,7 +63,6 @@ pub fn classifyType(ty: Type, target: std.Target) Class { .ComptimeInt, .Undefined, .Null, - .BoundFn, .Fn, .Opaque, .EnumLiteral, diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index d4e3559006..faed432a38 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -1599,7 +1599,6 @@ fn isByRef(ty: Type, target: std.Target) bool { .EnumLiteral, .Undefined, .Null, - .BoundFn, .Opaque, => unreachable, diff --git a/src/arch/wasm/abi.zig b/src/arch/wasm/abi.zig index de3cf64ea3..4692f65dd1 100644 --- a/src/arch/wasm/abi.zig +++ b/src/arch/wasm/abi.zig @@ -80,7 +80,6 @@ pub fn classifyType(ty: Type, target: Target) [2]Class { .ComptimeInt, .Undefined, .Null, - .BoundFn, .Fn, .Opaque, .EnumLiteral, diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index baafdc9d1f..cd36642b03 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -6942,7 +6942,6 @@ fn genTypedValue(self: *Self, arg_tv: TypedValue) InnerError!MCValue { .NoReturn => unreachable, .Undefined => unreachable, .Null => unreachable, - .BoundFn => unreachable, .Opaque => unreachable, else => {}, diff --git a/src/arch/x86_64/abi.zig b/src/arch/x86_64/abi.zig index aa53da8169..393d4db3d5 100644 --- a/src/arch/x86_64/abi.zig +++ b/src/arch/x86_64/abi.zig @@ -52,7 +52,6 @@ pub fn classifyWindows(ty: Type, target: Target) Class { .ComptimeInt, .Undefined, .Null, - .BoundFn, .Fn, .Opaque, .EnumLiteral, diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 1fd9539730..364d8f586d 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -866,7 +866,6 @@ pub const DeclGen = struct { .NoReturn, .Undefined, .Null, - .BoundFn, .Opaque, => unreachable, @@ -1320,7 +1319,6 @@ pub const DeclGen = struct { .NoReturn => unreachable, .Undefined => unreachable, .Null => unreachable, - .BoundFn => unreachable, .Opaque => unreachable, .Frame, @@ -2050,8 +2048,6 @@ pub const DeclGen = struct { .ComptimeInt, .Type, => unreachable, // must be const or comptime - - .BoundFn => unreachable, // this type will be deleted from the language } } diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 4115a4870e..7d70a51666 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -2341,8 +2341,6 @@ pub const Object = struct { .Null => unreachable, .EnumLiteral => unreachable, - .BoundFn => @panic("TODO remove BoundFn from the language"), - .Frame => @panic("TODO implement lowerDebugType for Frame types"), .AnyFrame => @panic("TODO implement lowerDebugType for AnyFrame types"), } @@ -3095,8 +3093,6 @@ pub const DeclGen = struct { .Null => unreachable, .EnumLiteral => unreachable, - .BoundFn => @panic("TODO remove BoundFn from the language"), - .Frame => @panic("TODO implement llvmType for Frame types"), .AnyFrame => @panic("TODO implement llvmType for AnyFrame types"), } @@ -3896,7 +3892,6 @@ pub const DeclGen = struct { .NoReturn => unreachable, .Undefined => unreachable, .Null => unreachable, - .BoundFn => unreachable, .Opaque => unreachable, .Frame, @@ -10792,7 +10787,6 @@ fn isByRef(ty: Type) bool { .EnumLiteral, .Undefined, .Null, - .BoundFn, .Opaque, => unreachable, diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index bd0c8bc53c..4db3b34b1e 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -538,8 +538,6 @@ pub const DeclGen = struct { .Type, => unreachable, // Must be comptime. - .BoundFn => unreachable, // this type will be deleted from the language. - else => |tag| return self.todo("Implement zig type '{}'", .{tag}), }; } diff --git a/src/type.zig b/src/type.zig index 1aefa8f7a1..e64f310d79 100644 --- a/src/type.zig +++ b/src/type.zig @@ -185,7 +185,6 @@ pub const Type = extern union { .Void, .ErrorSet, .Fn, - .BoundFn, .Opaque, .AnyFrame, .Enum, @@ -4074,7 +4073,6 @@ pub const Type = extern union { => return true, .Opaque => return is_extern, - .BoundFn, .ComptimeFloat, .ComptimeInt, .EnumLiteral, diff --git a/src/value.zig b/src/value.zig index d3035946f9..dc0b150abc 100644 --- a/src/value.zig +++ b/src/value.zig @@ -2419,7 +2419,6 @@ pub const Value = extern union { if (val.tag() == .runtime_value) return; switch (zig_ty_tag) { - .BoundFn => unreachable, // TODO remove this from the language .Opaque => unreachable, // Cannot hash opaque types .Void, @@ -2566,7 +2565,6 @@ pub const Value = extern union { if (val.tag() == .runtime_value) return; switch (ty.zigTypeTag()) { - .BoundFn => unreachable, // TODO remove this from the language .Opaque => unreachable, // Cannot hash opaque types .Void, .NoReturn, diff --git a/test/behavior/type_info.zig b/test/behavior/type_info.zig index c0aaa2cfa7..568ea4e345 100644 --- a/test/behavior/type_info.zig +++ b/test/behavior/type_info.zig @@ -252,7 +252,7 @@ fn testUnion() !void { try expect(typeinfo_info == .Union); try expect(typeinfo_info.Union.layout == .Auto); try expect(typeinfo_info.Union.tag_type.? == TypeId); - try expect(typeinfo_info.Union.fields.len == 25); + try expect(typeinfo_info.Union.fields.len == 24); try expect(typeinfo_info.Union.fields[4].field_type == @TypeOf(@typeInfo(u8).Int)); try expect(typeinfo_info.Union.decls.len == 22); From c51288f1f6be20be9f162c086b6c1ef9382b30cd Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 9 Dec 2022 16:33:32 -0700 Subject: [PATCH 3/4] remove the zstd mechanism from the build process --- CMakeLists.txt | 22 +- build.zig | 13 +- stage1/InputStream.h | 61 +- stage1/zstd/LICENSE | 30 - stage1/zstd/lib/common/bitstream.h | 478 -- stage1/zstd/lib/common/compiler.h | 335 - stage1/zstd/lib/common/cpu.h | 213 - stage1/zstd/lib/common/debug.c | 24 - stage1/zstd/lib/common/debug.h | 107 - stage1/zstd/lib/common/entropy_common.c | 368 -- stage1/zstd/lib/common/error_private.c | 56 - stage1/zstd/lib/common/error_private.h | 159 - stage1/zstd/lib/common/fse.h | 717 --- stage1/zstd/lib/common/fse_decompress.c | 403 -- stage1/zstd/lib/common/huf.h | 364 -- stage1/zstd/lib/common/mem.h | 442 -- stage1/zstd/lib/common/pool.c | 355 - stage1/zstd/lib/common/pool.h | 84 - stage1/zstd/lib/common/portability_macros.h | 137 - stage1/zstd/lib/common/threading.c | 122 - stage1/zstd/lib/common/threading.h | 155 - stage1/zstd/lib/common/xxhash.c | 24 - stage1/zstd/lib/common/xxhash.h | 5686 ----------------- stage1/zstd/lib/common/zstd_common.c | 83 - stage1/zstd/lib/common/zstd_deps.h | 111 - stage1/zstd/lib/common/zstd_internal.h | 493 -- stage1/zstd/lib/common/zstd_trace.h | 163 - stage1/zstd/lib/decompress/huf_decompress.c | 1889 ------ stage1/zstd/lib/decompress/zstd_ddict.c | 244 - stage1/zstd/lib/decompress/zstd_ddict.h | 44 - stage1/zstd/lib/decompress/zstd_decompress.c | 2230 ------- .../lib/decompress/zstd_decompress_block.c | 2072 ------ .../lib/decompress/zstd_decompress_block.h | 68 - .../lib/decompress/zstd_decompress_internal.h | 236 - stage1/zstd/lib/zstd.h | 2575 -------- stage1/zstd/lib/zstd_errors.h | 95 - 36 files changed, 14 insertions(+), 20644 deletions(-) delete mode 100644 stage1/zstd/LICENSE delete mode 100644 stage1/zstd/lib/common/bitstream.h delete mode 100644 stage1/zstd/lib/common/compiler.h delete mode 100644 stage1/zstd/lib/common/cpu.h delete mode 100644 stage1/zstd/lib/common/debug.c delete mode 100644 stage1/zstd/lib/common/debug.h delete mode 100644 stage1/zstd/lib/common/entropy_common.c delete mode 100644 stage1/zstd/lib/common/error_private.c delete mode 100644 stage1/zstd/lib/common/error_private.h delete mode 100644 stage1/zstd/lib/common/fse.h delete mode 100644 stage1/zstd/lib/common/fse_decompress.c delete mode 100644 stage1/zstd/lib/common/huf.h delete mode 100644 stage1/zstd/lib/common/mem.h delete mode 100644 stage1/zstd/lib/common/pool.c delete mode 100644 stage1/zstd/lib/common/pool.h delete mode 100644 stage1/zstd/lib/common/portability_macros.h delete mode 100644 stage1/zstd/lib/common/threading.c delete mode 100644 stage1/zstd/lib/common/threading.h delete mode 100644 stage1/zstd/lib/common/xxhash.c delete mode 100644 stage1/zstd/lib/common/xxhash.h delete mode 100644 stage1/zstd/lib/common/zstd_common.c delete mode 100644 stage1/zstd/lib/common/zstd_deps.h delete mode 100644 stage1/zstd/lib/common/zstd_internal.h delete mode 100644 stage1/zstd/lib/common/zstd_trace.h delete mode 100644 stage1/zstd/lib/decompress/huf_decompress.c delete mode 100644 stage1/zstd/lib/decompress/zstd_ddict.c delete mode 100644 stage1/zstd/lib/decompress/zstd_ddict.h delete mode 100644 stage1/zstd/lib/decompress/zstd_decompress.c delete mode 100644 stage1/zstd/lib/decompress/zstd_decompress_block.c delete mode 100644 stage1/zstd/lib/decompress/zstd_decompress_block.h delete mode 100644 stage1/zstd/lib/decompress/zstd_decompress_internal.h delete mode 100644 stage1/zstd/lib/zstd.h delete mode 100644 stage1/zstd/lib/zstd_errors.h diff --git a/CMakeLists.txt b/CMakeLists.txt index f41817f042..8f3f73690a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,16 +181,6 @@ set(ZIG_CONFIG_ZIG_OUT "${CMAKE_BINARY_DIR}/config.zig") set(ZIG_WASM2C_SOURCES "${CMAKE_SOURCE_DIR}/stage1/wasm2c.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/decompress/huf_decompress.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/decompress/zstd_ddict.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/decompress/zstd_decompress.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/decompress/zstd_decompress_block.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/common/entropy_common.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/common/error_private.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/common/fse_decompress.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/common/pool.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/common/xxhash.c" - "${CMAKE_SOURCE_DIR}/stage1/zstd/lib/common/zstd_common.c" ) set(ZIG_CPP_SOURCES # These are planned to stay even when we are self-hosted. @@ -738,21 +728,19 @@ else() endif() endif() -set(ZIG1_WASM_ZST_SOURCE "${CMAKE_SOURCE_DIR}/stage1/zig1.wasm.zst") +set(ZIG1_WASM_MODULE "${CMAKE_SOURCE_DIR}/stage1/zig1.wasm") set(ZIG1_C_SOURCE "${CMAKE_BINARY_DIR}/zig1.c") set(ZIG2_C_SOURCE "${CMAKE_BINARY_DIR}/zig2.c") set(ZIG_COMPILER_RT_C_SOURCE "${CMAKE_BINARY_DIR}/compiler_rt.c") add_executable(zig-wasm2c ${ZIG_WASM2C_SOURCES}) set_target_properties(zig-wasm2c PROPERTIES COMPILE_FLAGS "${ZIG_WASM2C_COMPILE_FLAGS}") -target_include_directories(zig-wasm2c PUBLIC "${CMAKE_SOURCE_DIR}/stage1/zstd/lib") -target_compile_definitions(zig-wasm2c PRIVATE ZSTD_DISABLE_ASM) add_custom_command( OUTPUT "${ZIG1_C_SOURCE}" - COMMAND zig-wasm2c "${ZIG1_WASM_ZST_SOURCE}" "${ZIG1_C_SOURCE}" - DEPENDS zig-wasm2c "${ZIG1_WASM_ZST_SOURCE}" - COMMENT STATUS "Converting ${ZIG1_WASM_ZST_SOURCE} to ${ZIG1_C_SOURCE}" + COMMAND zig-wasm2c "${ZIG1_WASM_MODULE}" "${ZIG1_C_SOURCE}" + DEPENDS zig-wasm2c "${ZIG1_WASM_MODULE}" + COMMENT STATUS "Converting ${ZIG1_WASM_MODULE} to ${ZIG1_C_SOURCE}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" ) @@ -764,8 +752,6 @@ if(MSVC) else() target_link_libraries(zig1 LINK_PUBLIC m) endif() -target_include_directories(zig1 PUBLIC "${CMAKE_SOURCE_DIR}/stage1/zstd/lib") -target_compile_definitions(zig1 PRIVATE ZSTD_DISABLE_ASM) set(BUILD_ZIG2_ARGS "${CMAKE_SOURCE_DIR}/lib" diff --git a/build.zig b/build.zig index bcc50ea9fa..f2a7e48dc7 100644 --- a/build.zig +++ b/build.zig @@ -502,17 +502,8 @@ fn addWasiUpdateStep(b: *Builder, version: [:0]const u8) !void { run_opt.addArg("-o"); run_opt.addFileSourceArg(.{ .path = "stage1/zig1.wasm" }); - const run_zstd = b.addSystemCommand(&.{ "zstd", "-19", "-f" }); - run_zstd.step.dependOn(&run_opt.step); - run_zstd.addFileSourceArg(.{ .path = "stage1/zig1.wasm" }); - run_zstd.addArg("-o"); - run_zstd.addFileSourceArg(.{ .path = "stage1/zig1.wasm.zst" }); - - const cleanup = b.addRemoveDirTree("stage1/zig1.wasm"); - cleanup.step.dependOn(&run_zstd.step); - - const update_zig1_step = b.step("update-zig1", "Update stage1/zig1.wasm.zst"); - update_zig1_step.dependOn(&cleanup.step); + const update_zig1_step = b.step("update-zig1", "Update stage1/zig1.wasm"); + update_zig1_step.dependOn(&run_opt.step); } fn addCompilerStep(b: *Builder) *std.build.LibExeObjStep { diff --git a/stage1/InputStream.h b/stage1/InputStream.h index 36de3d6c7b..c5bceb13b1 100644 --- a/stage1/InputStream.h +++ b/stage1/InputStream.h @@ -4,67 +4,35 @@ #include "panic.h" #include "wasm.h" -#include - #include #include #include #include #include #include +#include struct InputStream { FILE *stream; - ZSTD_DStream *ds; - ZSTD_outBuffer out; - ZSTD_inBuffer in; - size_t pos; }; static void InputStream_open(struct InputStream *self, const char *path) { self->stream = fopen(path, "rb"); if (self->stream == NULL) panic("unable to open input file"); - self->ds = ZSTD_createDStream(); - if (self->ds == NULL) panic("unable to create zstd context"); - size_t in_size = ZSTD_initDStream(self->ds); - if (ZSTD_isError(in_size)) panic(ZSTD_getErrorName(in_size)); - self->out.size = ZSTD_DStreamOutSize(); - self->out.dst = malloc(self->out.size + ZSTD_DStreamInSize()); - if (self->out.dst == NULL) panic("unable to allocate input buffers"); - self->out.pos = 0; - self->in.src = (const char *)self->out.dst + self->out.size; - self->in.size = fread((void *)self->in.src, 1, in_size, self->stream); - self->in.pos = 0; - self->pos = 0; } static void InputStream_close(struct InputStream *self) { - free(self->out.dst); - ZSTD_freeDStream(self->ds); fclose(self->stream); } static bool InputStream_atEnd(struct InputStream *self) { - while (self->pos >= self->out.pos) { - self->out.pos = 0; - self->pos = 0; - size_t in_size = ZSTD_decompressStream(self->ds, &self->out, &self->in); - if (ZSTD_isError(in_size)) panic(ZSTD_getErrorName(in_size)); - if (self->in.pos >= self->in.size) { - size_t max_in_size = ZSTD_DStreamInSize(); - if (in_size > max_in_size) in_size = max_in_size; - self->in.size = fread((void *)self->in.src, 1, in_size, self->stream); - self->in.pos = 0; - if (self->in.pos >= self->in.size) return true; - } - } - return false; + return feof(self->stream) != 0; } static uint8_t InputStream_readByte(struct InputStream *self) { - if (InputStream_atEnd(self)) panic("unexpected end of input stream"); - uint8_t value = ((uint8_t *)self->out.dst)[self->pos]; - self->pos += 1; + int value; + value = fgetc(self->stream); + if (value == EOF) panic("unexpected end of input stream"); return value; } @@ -168,26 +136,13 @@ static char *InputStream_readName(struct InputStream *self) { uint32_t len = InputStream_readLeb128_u32(self); char *name = malloc(len + 1); if (name == NULL) panic("out of memory"); - for (uint32_t i = 0; i < len; ) { - if (InputStream_atEnd(self)) panic("unexpected end of input stream"); - size_t remaining = self->out.pos - self->pos; - if (remaining > len - i) remaining = len - i; - memcpy(&name[i], &((char *)self->out.dst)[self->pos], remaining); - i += remaining; - self->pos += remaining; - } - name[len] = '\0'; + if (fread(name, 1, len, self->stream) != len) panic("unexpected end of input stream"); + name[len] = 0; return name; } static void InputStream_skipBytes(struct InputStream *self, size_t len) { - for (size_t i = 0; i < len; ) { - if (InputStream_atEnd(self)) panic("unexpected end of input stream"); - size_t remaining = self->out.pos - self->pos; - if (remaining > len - i) remaining = len - i; - i += remaining; - self->pos += remaining; - } + if (fseek(self->stream, len, SEEK_CUR) == -1) panic("unexpected end of input stream"); } static uint32_t InputStream_skipToSection(struct InputStream *self, uint8_t expected_id) { diff --git a/stage1/zstd/LICENSE b/stage1/zstd/LICENSE deleted file mode 100644 index a793a80289..0000000000 --- a/stage1/zstd/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -BSD License - -For Zstandard software - -Copyright (c) 2016-present, Facebook, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/stage1/zstd/lib/common/bitstream.h b/stage1/zstd/lib/common/bitstream.h deleted file mode 100644 index 84b6062ff3..0000000000 --- a/stage1/zstd/lib/common/bitstream.h +++ /dev/null @@ -1,478 +0,0 @@ -/* ****************************************************************** - * bitstream - * Part of FSE library - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ -#ifndef BITSTREAM_H_MODULE -#define BITSTREAM_H_MODULE - -#if defined (__cplusplus) -extern "C" { -#endif -/* -* This API consists of small unitary functions, which must be inlined for best performance. -* Since link-time-optimization is not available for all compilers, -* these functions are defined into a .h to be included. -*/ - -/*-**************************************** -* Dependencies -******************************************/ -#include "mem.h" /* unaligned access routines */ -#include "compiler.h" /* UNLIKELY() */ -#include "debug.h" /* assert(), DEBUGLOG(), RAWLOG() */ -#include "error_private.h" /* error codes and messages */ - - -/*========================================= -* Target specific -=========================================*/ -#ifndef ZSTD_NO_INTRINSICS -# if defined(__BMI__) && defined(__GNUC__) -# include /* support for bextr (experimental) */ -# elif defined(__ICCARM__) -# include -# endif -#endif - -#define STREAM_ACCUMULATOR_MIN_32 25 -#define STREAM_ACCUMULATOR_MIN_64 57 -#define STREAM_ACCUMULATOR_MIN ((U32)(MEM_32bits() ? STREAM_ACCUMULATOR_MIN_32 : STREAM_ACCUMULATOR_MIN_64)) - - -/*-****************************************** -* bitStream encoding API (write forward) -********************************************/ -/* bitStream can mix input from multiple sources. - * A critical property of these streams is that they encode and decode in **reverse** direction. - * So the first bit sequence you add will be the last to be read, like a LIFO stack. - */ -typedef struct { - size_t bitContainer; - unsigned bitPos; - char* startPtr; - char* ptr; - char* endPtr; -} BIT_CStream_t; - -MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC, void* dstBuffer, size_t dstCapacity); -MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC, size_t value, unsigned nbBits); -MEM_STATIC void BIT_flushBits(BIT_CStream_t* bitC); -MEM_STATIC size_t BIT_closeCStream(BIT_CStream_t* bitC); - -/* Start with initCStream, providing the size of buffer to write into. -* bitStream will never write outside of this buffer. -* `dstCapacity` must be >= sizeof(bitD->bitContainer), otherwise @return will be an error code. -* -* bits are first added to a local register. -* Local register is size_t, hence 64-bits on 64-bits systems, or 32-bits on 32-bits systems. -* Writing data into memory is an explicit operation, performed by the flushBits function. -* Hence keep track how many bits are potentially stored into local register to avoid register overflow. -* After a flushBits, a maximum of 7 bits might still be stored into local register. -* -* Avoid storing elements of more than 24 bits if you want compatibility with 32-bits bitstream readers. -* -* Last operation is to close the bitStream. -* The function returns the final size of CStream in bytes. -* If data couldn't fit into `dstBuffer`, it will return a 0 ( == not storable) -*/ - - -/*-******************************************** -* bitStream decoding API (read backward) -**********************************************/ -typedef struct { - size_t bitContainer; - unsigned bitsConsumed; - const char* ptr; - const char* start; - const char* limitPtr; -} BIT_DStream_t; - -typedef enum { BIT_DStream_unfinished = 0, - BIT_DStream_endOfBuffer = 1, - BIT_DStream_completed = 2, - BIT_DStream_overflow = 3 } BIT_DStream_status; /* result of BIT_reloadDStream() */ - /* 1,2,4,8 would be better for bitmap combinations, but slows down performance a bit ... :( */ - -MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, size_t srcSize); -MEM_STATIC size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits); -MEM_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD); -MEM_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t* bitD); - - -/* Start by invoking BIT_initDStream(). -* A chunk of the bitStream is then stored into a local register. -* Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (size_t). -* You can then retrieve bitFields stored into the local register, **in reverse order**. -* Local register is explicitly reloaded from memory by the BIT_reloadDStream() method. -* A reload guarantee a minimum of ((8*sizeof(bitD->bitContainer))-7) bits when its result is BIT_DStream_unfinished. -* Otherwise, it can be less than that, so proceed accordingly. -* Checking if DStream has reached its end can be performed with BIT_endOfDStream(). -*/ - - -/*-**************************************** -* unsafe API -******************************************/ -MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC, size_t value, unsigned nbBits); -/* faster, but works only if value is "clean", meaning all high bits above nbBits are 0 */ - -MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC); -/* unsafe version; does not check buffer overflow */ - -MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits); -/* faster, but works only if nbBits >= 1 */ - - - -/*-************************************************************** -* Internal functions -****************************************************************/ -MEM_STATIC unsigned BIT_highbit32 (U32 val) -{ - assert(val != 0); - { -# if defined(_MSC_VER) /* Visual */ -# if STATIC_BMI2 == 1 - return _lzcnt_u32(val) ^ 31; -# else - if (val != 0) { - unsigned long r; - _BitScanReverse(&r, val); - return (unsigned)r; - } else { - /* Should not reach this code path */ - __assume(0); - } -# endif -# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */ - return __builtin_clz (val) ^ 31; -# elif defined(__ICCARM__) /* IAR Intrinsic */ - return 31 - __CLZ(val); -# else /* Software version */ - static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, - 11, 14, 16, 18, 22, 25, 3, 30, - 8, 12, 20, 28, 15, 17, 24, 7, - 19, 27, 23, 6, 26, 5, 4, 31 }; - U32 v = val; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - return DeBruijnClz[ (U32) (v * 0x07C4ACDDU) >> 27]; -# endif - } -} - -/*===== Local Constants =====*/ -static const unsigned BIT_mask[] = { - 0, 1, 3, 7, 0xF, 0x1F, - 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, - 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0x1FFFF, - 0x3FFFF, 0x7FFFF, 0xFFFFF, 0x1FFFFF, 0x3FFFFF, 0x7FFFFF, - 0xFFFFFF, 0x1FFFFFF, 0x3FFFFFF, 0x7FFFFFF, 0xFFFFFFF, 0x1FFFFFFF, - 0x3FFFFFFF, 0x7FFFFFFF}; /* up to 31 bits */ -#define BIT_MASK_SIZE (sizeof(BIT_mask) / sizeof(BIT_mask[0])) - -/*-************************************************************** -* bitStream encoding -****************************************************************/ -/*! BIT_initCStream() : - * `dstCapacity` must be > sizeof(size_t) - * @return : 0 if success, - * otherwise an error code (can be tested using ERR_isError()) */ -MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC, - void* startPtr, size_t dstCapacity) -{ - bitC->bitContainer = 0; - bitC->bitPos = 0; - bitC->startPtr = (char*)startPtr; - bitC->ptr = bitC->startPtr; - bitC->endPtr = bitC->startPtr + dstCapacity - sizeof(bitC->bitContainer); - if (dstCapacity <= sizeof(bitC->bitContainer)) return ERROR(dstSize_tooSmall); - return 0; -} - -/*! BIT_addBits() : - * can add up to 31 bits into `bitC`. - * Note : does not check for register overflow ! */ -MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC, - size_t value, unsigned nbBits) -{ - DEBUG_STATIC_ASSERT(BIT_MASK_SIZE == 32); - assert(nbBits < BIT_MASK_SIZE); - assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8); - bitC->bitContainer |= (value & BIT_mask[nbBits]) << bitC->bitPos; - bitC->bitPos += nbBits; -} - -/*! BIT_addBitsFast() : - * works only if `value` is _clean_, - * meaning all high bits above nbBits are 0 */ -MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC, - size_t value, unsigned nbBits) -{ - assert((value>>nbBits) == 0); - assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8); - bitC->bitContainer |= value << bitC->bitPos; - bitC->bitPos += nbBits; -} - -/*! BIT_flushBitsFast() : - * assumption : bitContainer has not overflowed - * unsafe version; does not check buffer overflow */ -MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC) -{ - size_t const nbBytes = bitC->bitPos >> 3; - assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8); - assert(bitC->ptr <= bitC->endPtr); - MEM_writeLEST(bitC->ptr, bitC->bitContainer); - bitC->ptr += nbBytes; - bitC->bitPos &= 7; - bitC->bitContainer >>= nbBytes*8; -} - -/*! BIT_flushBits() : - * assumption : bitContainer has not overflowed - * safe version; check for buffer overflow, and prevents it. - * note : does not signal buffer overflow. - * overflow will be revealed later on using BIT_closeCStream() */ -MEM_STATIC void BIT_flushBits(BIT_CStream_t* bitC) -{ - size_t const nbBytes = bitC->bitPos >> 3; - assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8); - assert(bitC->ptr <= bitC->endPtr); - MEM_writeLEST(bitC->ptr, bitC->bitContainer); - bitC->ptr += nbBytes; - if (bitC->ptr > bitC->endPtr) bitC->ptr = bitC->endPtr; - bitC->bitPos &= 7; - bitC->bitContainer >>= nbBytes*8; -} - -/*! BIT_closeCStream() : - * @return : size of CStream, in bytes, - * or 0 if it could not fit into dstBuffer */ -MEM_STATIC size_t BIT_closeCStream(BIT_CStream_t* bitC) -{ - BIT_addBitsFast(bitC, 1, 1); /* endMark */ - BIT_flushBits(bitC); - if (bitC->ptr >= bitC->endPtr) return 0; /* overflow detected */ - return (bitC->ptr - bitC->startPtr) + (bitC->bitPos > 0); -} - - -/*-******************************************************** -* bitStream decoding -**********************************************************/ -/*! BIT_initDStream() : - * Initialize a BIT_DStream_t. - * `bitD` : a pointer to an already allocated BIT_DStream_t structure. - * `srcSize` must be the *exact* size of the bitStream, in bytes. - * @return : size of stream (== srcSize), or an errorCode if a problem is detected - */ -MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, size_t srcSize) -{ - if (srcSize < 1) { ZSTD_memset(bitD, 0, sizeof(*bitD)); return ERROR(srcSize_wrong); } - - bitD->start = (const char*)srcBuffer; - bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer); - - if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */ - bitD->ptr = (const char*)srcBuffer + srcSize - sizeof(bitD->bitContainer); - bitD->bitContainer = MEM_readLEST(bitD->ptr); - { BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1]; - bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */ - if (lastByte == 0) return ERROR(GENERIC); /* endMark not present */ } - } else { - bitD->ptr = bitD->start; - bitD->bitContainer = *(const BYTE*)(bitD->start); - switch(srcSize) - { - case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16); - ZSTD_FALLTHROUGH; - - case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24); - ZSTD_FALLTHROUGH; - - case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32); - ZSTD_FALLTHROUGH; - - case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24; - ZSTD_FALLTHROUGH; - - case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16; - ZSTD_FALLTHROUGH; - - case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8; - ZSTD_FALLTHROUGH; - - default: break; - } - { BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1]; - bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; - if (lastByte == 0) return ERROR(corruption_detected); /* endMark not present */ - } - bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8; - } - - return srcSize; -} - -MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getUpperBits(size_t bitContainer, U32 const start) -{ - return bitContainer >> start; -} - -MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 const nbBits) -{ - U32 const regMask = sizeof(bitContainer)*8 - 1; - /* if start > regMask, bitstream is corrupted, and result is undefined */ - assert(nbBits < BIT_MASK_SIZE); - /* x86 transform & ((1 << nbBits) - 1) to bzhi instruction, it is better - * than accessing memory. When bmi2 instruction is not present, we consider - * such cpus old (pre-Haswell, 2013) and their performance is not of that - * importance. - */ -#if defined(__x86_64__) || defined(_M_X86) - return (bitContainer >> (start & regMask)) & ((((U64)1) << nbBits) - 1); -#else - return (bitContainer >> (start & regMask)) & BIT_mask[nbBits]; -#endif -} - -MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits) -{ -#if defined(STATIC_BMI2) && STATIC_BMI2 == 1 - return _bzhi_u64(bitContainer, nbBits); -#else - assert(nbBits < BIT_MASK_SIZE); - return bitContainer & BIT_mask[nbBits]; -#endif -} - -/*! BIT_lookBits() : - * Provides next n bits from local register. - * local register is not modified. - * On 32-bits, maxNbBits==24. - * On 64-bits, maxNbBits==56. - * @return : value extracted */ -MEM_STATIC FORCE_INLINE_ATTR size_t BIT_lookBits(const BIT_DStream_t* bitD, U32 nbBits) -{ - /* arbitrate between double-shift and shift+mask */ -#if 1 - /* if bitD->bitsConsumed + nbBits > sizeof(bitD->bitContainer)*8, - * bitstream is likely corrupted, and result is undefined */ - return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits); -#else - /* this code path is slower on my os-x laptop */ - U32 const regMask = sizeof(bitD->bitContainer)*8 - 1; - return ((bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> 1) >> ((regMask-nbBits) & regMask); -#endif -} - -/*! BIT_lookBitsFast() : - * unsafe version; only works if nbBits >= 1 */ -MEM_STATIC size_t BIT_lookBitsFast(const BIT_DStream_t* bitD, U32 nbBits) -{ - U32 const regMask = sizeof(bitD->bitContainer)*8 - 1; - assert(nbBits >= 1); - return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask); -} - -MEM_STATIC FORCE_INLINE_ATTR void BIT_skipBits(BIT_DStream_t* bitD, U32 nbBits) -{ - bitD->bitsConsumed += nbBits; -} - -/*! BIT_readBits() : - * Read (consume) next n bits from local register and update. - * Pay attention to not read more than nbBits contained into local register. - * @return : extracted value. */ -MEM_STATIC FORCE_INLINE_ATTR size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits) -{ - size_t const value = BIT_lookBits(bitD, nbBits); - BIT_skipBits(bitD, nbBits); - return value; -} - -/*! BIT_readBitsFast() : - * unsafe version; only works only if nbBits >= 1 */ -MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits) -{ - size_t const value = BIT_lookBitsFast(bitD, nbBits); - assert(nbBits >= 1); - BIT_skipBits(bitD, nbBits); - return value; -} - -/*! BIT_reloadDStreamFast() : - * Similar to BIT_reloadDStream(), but with two differences: - * 1. bitsConsumed <= sizeof(bitD->bitContainer)*8 must hold! - * 2. Returns BIT_DStream_overflow when bitD->ptr < bitD->limitPtr, at this - * point you must use BIT_reloadDStream() to reload. - */ -MEM_STATIC BIT_DStream_status BIT_reloadDStreamFast(BIT_DStream_t* bitD) -{ - if (UNLIKELY(bitD->ptr < bitD->limitPtr)) - return BIT_DStream_overflow; - assert(bitD->bitsConsumed <= sizeof(bitD->bitContainer)*8); - bitD->ptr -= bitD->bitsConsumed >> 3; - bitD->bitsConsumed &= 7; - bitD->bitContainer = MEM_readLEST(bitD->ptr); - return BIT_DStream_unfinished; -} - -/*! BIT_reloadDStream() : - * Refill `bitD` from buffer previously set in BIT_initDStream() . - * This function is safe, it guarantees it will not read beyond src buffer. - * @return : status of `BIT_DStream_t` internal register. - * when status == BIT_DStream_unfinished, internal register is filled with at least 25 or 57 bits */ -MEM_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD) -{ - if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */ - return BIT_DStream_overflow; - - if (bitD->ptr >= bitD->limitPtr) { - return BIT_reloadDStreamFast(bitD); - } - if (bitD->ptr == bitD->start) { - if (bitD->bitsConsumed < sizeof(bitD->bitContainer)*8) return BIT_DStream_endOfBuffer; - return BIT_DStream_completed; - } - /* start < ptr < limitPtr */ - { U32 nbBytes = bitD->bitsConsumed >> 3; - BIT_DStream_status result = BIT_DStream_unfinished; - if (bitD->ptr - nbBytes < bitD->start) { - nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */ - result = BIT_DStream_endOfBuffer; - } - bitD->ptr -= nbBytes; - bitD->bitsConsumed -= nbBytes*8; - bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */ - return result; - } -} - -/*! BIT_endOfDStream() : - * @return : 1 if DStream has _exactly_ reached its end (all bits consumed). - */ -MEM_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t* DStream) -{ - return ((DStream->ptr == DStream->start) && (DStream->bitsConsumed == sizeof(DStream->bitContainer)*8)); -} - -#if defined (__cplusplus) -} -#endif - -#endif /* BITSTREAM_H_MODULE */ diff --git a/stage1/zstd/lib/common/compiler.h b/stage1/zstd/lib/common/compiler.h deleted file mode 100644 index 516930c01e..0000000000 --- a/stage1/zstd/lib/common/compiler.h +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef ZSTD_COMPILER_H -#define ZSTD_COMPILER_H - -#include "portability_macros.h" - -/*-******************************************************* -* Compiler specifics -*********************************************************/ -/* force inlining */ - -#if !defined(ZSTD_NO_INLINE) -#if (defined(__GNUC__) && !defined(__STRICT_ANSI__)) || defined(__cplusplus) || defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ -# define INLINE_KEYWORD inline -#else -# define INLINE_KEYWORD -#endif - -#if defined(__GNUC__) || defined(__ICCARM__) -# define FORCE_INLINE_ATTR __attribute__((always_inline)) -#elif defined(_MSC_VER) -# define FORCE_INLINE_ATTR __forceinline -#else -# define FORCE_INLINE_ATTR -#endif - -#else - -#define INLINE_KEYWORD -#define FORCE_INLINE_ATTR - -#endif - -/** - On MSVC qsort requires that functions passed into it use the __cdecl calling conversion(CC). - This explicitly marks such functions as __cdecl so that the code will still compile - if a CC other than __cdecl has been made the default. -*/ -#if defined(_MSC_VER) -# define WIN_CDECL __cdecl -#else -# define WIN_CDECL -#endif - -/** - * FORCE_INLINE_TEMPLATE is used to define C "templates", which take constant - * parameters. They must be inlined for the compiler to eliminate the constant - * branches. - */ -#define FORCE_INLINE_TEMPLATE static INLINE_KEYWORD FORCE_INLINE_ATTR -/** - * HINT_INLINE is used to help the compiler generate better code. It is *not* - * used for "templates", so it can be tweaked based on the compilers - * performance. - * - * gcc-4.8 and gcc-4.9 have been shown to benefit from leaving off the - * always_inline attribute. - * - * clang up to 5.0.0 (trunk) benefit tremendously from the always_inline - * attribute. - */ -#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 8 && __GNUC__ < 5 -# define HINT_INLINE static INLINE_KEYWORD -#else -# define HINT_INLINE static INLINE_KEYWORD FORCE_INLINE_ATTR -#endif - -/* UNUSED_ATTR tells the compiler it is okay if the function is unused. */ -#if defined(__GNUC__) -# define UNUSED_ATTR __attribute__((unused)) -#else -# define UNUSED_ATTR -#endif - -/* force no inlining */ -#ifdef _MSC_VER -# define FORCE_NOINLINE static __declspec(noinline) -#else -# if defined(__GNUC__) || defined(__ICCARM__) -# define FORCE_NOINLINE static __attribute__((__noinline__)) -# else -# define FORCE_NOINLINE static -# endif -#endif - - -/* target attribute */ -#if defined(__GNUC__) || defined(__ICCARM__) -# define TARGET_ATTRIBUTE(target) __attribute__((__target__(target))) -#else -# define TARGET_ATTRIBUTE(target) -#endif - -/* Target attribute for BMI2 dynamic dispatch. - * Enable lzcnt, bmi, and bmi2. - * We test for bmi1 & bmi2. lzcnt is included in bmi1. - */ -#define BMI2_TARGET_ATTRIBUTE TARGET_ATTRIBUTE("lzcnt,bmi,bmi2") - -/* prefetch - * can be disabled, by declaring NO_PREFETCH build macro */ -#if defined(NO_PREFETCH) -# define PREFETCH_L1(ptr) (void)(ptr) /* disabled */ -# define PREFETCH_L2(ptr) (void)(ptr) /* disabled */ -#else -# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) /* _mm_prefetch() is not defined outside of x86/x64 */ -# include /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */ -# define PREFETCH_L1(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0) -# define PREFETCH_L2(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T1) -# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) ) -# define PREFETCH_L1(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */) -# define PREFETCH_L2(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 2 /* locality */) -# elif defined(__aarch64__) -# define PREFETCH_L1(ptr) __asm__ __volatile__("prfm pldl1keep, %0" ::"Q"(*(ptr))) -# define PREFETCH_L2(ptr) __asm__ __volatile__("prfm pldl2keep, %0" ::"Q"(*(ptr))) -# else -# define PREFETCH_L1(ptr) (void)(ptr) /* disabled */ -# define PREFETCH_L2(ptr) (void)(ptr) /* disabled */ -# endif -#endif /* NO_PREFETCH */ - -#define CACHELINE_SIZE 64 - -#define PREFETCH_AREA(p, s) { \ - const char* const _ptr = (const char*)(p); \ - size_t const _size = (size_t)(s); \ - size_t _pos; \ - for (_pos=0; _pos<_size; _pos+=CACHELINE_SIZE) { \ - PREFETCH_L2(_ptr + _pos); \ - } \ -} - -/* vectorization - * older GCC (pre gcc-4.3 picked as the cutoff) uses a different syntax, - * and some compilers, like Intel ICC and MCST LCC, do not support it at all. */ -#if !defined(__INTEL_COMPILER) && !defined(__clang__) && defined(__GNUC__) && !defined(__LCC__) -# if (__GNUC__ == 4 && __GNUC_MINOR__ > 3) || (__GNUC__ >= 5) -# define DONT_VECTORIZE __attribute__((optimize("no-tree-vectorize"))) -# else -# define DONT_VECTORIZE _Pragma("GCC optimize(\"no-tree-vectorize\")") -# endif -#else -# define DONT_VECTORIZE -#endif - -/* Tell the compiler that a branch is likely or unlikely. - * Only use these macros if it causes the compiler to generate better code. - * If you can remove a LIKELY/UNLIKELY annotation without speed changes in gcc - * and clang, please do. - */ -#if defined(__GNUC__) -#define LIKELY(x) (__builtin_expect((x), 1)) -#define UNLIKELY(x) (__builtin_expect((x), 0)) -#else -#define LIKELY(x) (x) -#define UNLIKELY(x) (x) -#endif - -/* disable warnings */ -#ifdef _MSC_VER /* Visual Studio */ -# include /* For Visual 2005 */ -# pragma warning(disable : 4100) /* disable: C4100: unreferenced formal parameter */ -# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ -# pragma warning(disable : 4204) /* disable: C4204: non-constant aggregate initializer */ -# pragma warning(disable : 4214) /* disable: C4214: non-int bitfields */ -# pragma warning(disable : 4324) /* disable: C4324: padded structure */ -#endif - -/*Like DYNAMIC_BMI2 but for compile time determination of BMI2 support*/ -#ifndef STATIC_BMI2 -# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) -# ifdef __AVX2__ //MSVC does not have a BMI2 specific flag, but every CPU that supports AVX2 also supports BMI2 -# define STATIC_BMI2 1 -# endif -# endif -#endif - -#ifndef STATIC_BMI2 - #define STATIC_BMI2 0 -#endif - -/* compile time determination of SIMD support */ -#if !defined(ZSTD_NO_INTRINSICS) -# if defined(__SSE2__) || defined(_M_AMD64) || (defined (_M_IX86) && defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) -# define ZSTD_ARCH_X86_SSE2 -# endif -# if defined(__ARM_NEON) || defined(_M_ARM64) -# define ZSTD_ARCH_ARM_NEON -# endif -# -# if defined(ZSTD_ARCH_X86_SSE2) -# include -# elif defined(ZSTD_ARCH_ARM_NEON) -# include -# endif -#endif - -/* C-language Attributes are added in C23. */ -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L) && defined(__has_c_attribute) -# define ZSTD_HAS_C_ATTRIBUTE(x) __has_c_attribute(x) -#else -# define ZSTD_HAS_C_ATTRIBUTE(x) 0 -#endif - -/* Only use C++ attributes in C++. Some compilers report support for C++ - * attributes when compiling with C. - */ -#if defined(__cplusplus) && defined(__has_cpp_attribute) -# define ZSTD_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) -#else -# define ZSTD_HAS_CPP_ATTRIBUTE(x) 0 -#endif - -/* Define ZSTD_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute. - * - C23: https://en.cppreference.com/w/c/language/attributes/fallthrough - * - CPP17: https://en.cppreference.com/w/cpp/language/attributes/fallthrough - * - Else: __attribute__((__fallthrough__)) - */ -#ifndef ZSTD_FALLTHROUGH -# if ZSTD_HAS_C_ATTRIBUTE(fallthrough) -# define ZSTD_FALLTHROUGH [[fallthrough]] -# elif ZSTD_HAS_CPP_ATTRIBUTE(fallthrough) -# define ZSTD_FALLTHROUGH [[fallthrough]] -# elif __has_attribute(__fallthrough__) -/* Leading semicolon is to satisfy gcc-11 with -pedantic. Without the semicolon - * gcc complains about: a label can only be part of a statement and a declaration is not a statement. - */ -# define ZSTD_FALLTHROUGH ; __attribute__((__fallthrough__)) -# else -# define ZSTD_FALLTHROUGH -# endif -#endif - -/*-************************************************************** -* Alignment check -*****************************************************************/ - -/* this test was initially positioned in mem.h, - * but this file is removed (or replaced) for linux kernel - * so it's now hosted in compiler.h, - * which remains valid for both user & kernel spaces. - */ - -#ifndef ZSTD_ALIGNOF -# if defined(__GNUC__) || defined(_MSC_VER) -/* covers gcc, clang & MSVC */ -/* note : this section must come first, before C11, - * due to a limitation in the kernel source generator */ -# define ZSTD_ALIGNOF(T) __alignof(T) - -# elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) -/* C11 support */ -# include -# define ZSTD_ALIGNOF(T) alignof(T) - -# else -/* No known support for alignof() - imperfect backup */ -# define ZSTD_ALIGNOF(T) (sizeof(void*) < sizeof(T) ? sizeof(void*) : sizeof(T)) - -# endif -#endif /* ZSTD_ALIGNOF */ - -/*-************************************************************** -* Sanitizer -*****************************************************************/ - -#if ZSTD_MEMORY_SANITIZER -/* Not all platforms that support msan provide sanitizers/msan_interface.h. - * We therefore declare the functions we need ourselves, rather than trying to - * include the header file... */ -#include /* size_t */ -#define ZSTD_DEPS_NEED_STDINT -#include "zstd_deps.h" /* intptr_t */ - -/* Make memory region fully initialized (without changing its contents). */ -void __msan_unpoison(const volatile void *a, size_t size); - -/* Make memory region fully uninitialized (without changing its contents). - This is a legacy interface that does not update origin information. Use - __msan_allocated_memory() instead. */ -void __msan_poison(const volatile void *a, size_t size); - -/* Returns the offset of the first (at least partially) poisoned byte in the - memory range, or -1 if the whole range is good. */ -intptr_t __msan_test_shadow(const volatile void *x, size_t size); -#endif - -#if ZSTD_ADDRESS_SANITIZER -/* Not all platforms that support asan provide sanitizers/asan_interface.h. - * We therefore declare the functions we need ourselves, rather than trying to - * include the header file... */ -#include /* size_t */ - -/** - * Marks a memory region ([addr, addr+size)) as unaddressable. - * - * This memory must be previously allocated by your program. Instrumented - * code is forbidden from accessing addresses in this region until it is - * unpoisoned. This function is not guaranteed to poison the entire region - - * it could poison only a subregion of [addr, addr+size) due to ASan - * alignment restrictions. - * - * \note This function is not thread-safe because no two threads can poison or - * unpoison memory in the same memory region simultaneously. - * - * \param addr Start of memory region. - * \param size Size of memory region. */ -void __asan_poison_memory_region(void const volatile *addr, size_t size); - -/** - * Marks a memory region ([addr, addr+size)) as addressable. - * - * This memory must be previously allocated by your program. Accessing - * addresses in this region is allowed until this region is poisoned again. - * This function could unpoison a super-region of [addr, addr+size) due - * to ASan alignment restrictions. - * - * \note This function is not thread-safe because no two threads can - * poison or unpoison memory in the same memory region simultaneously. - * - * \param addr Start of memory region. - * \param size Size of memory region. */ -void __asan_unpoison_memory_region(void const volatile *addr, size_t size); -#endif - -#endif /* ZSTD_COMPILER_H */ diff --git a/stage1/zstd/lib/common/cpu.h b/stage1/zstd/lib/common/cpu.h deleted file mode 100644 index 8acd33be3c..0000000000 --- a/stage1/zstd/lib/common/cpu.h +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef ZSTD_COMMON_CPU_H -#define ZSTD_COMMON_CPU_H - -/** - * Implementation taken from folly/CpuId.h - * https://github.com/facebook/folly/blob/master/folly/CpuId.h - */ - -#include "mem.h" - -#ifdef _MSC_VER -#include -#endif - -typedef struct { - U32 f1c; - U32 f1d; - U32 f7b; - U32 f7c; -} ZSTD_cpuid_t; - -MEM_STATIC ZSTD_cpuid_t ZSTD_cpuid(void) { - U32 f1c = 0; - U32 f1d = 0; - U32 f7b = 0; - U32 f7c = 0; -#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) - int reg[4]; - __cpuid((int*)reg, 0); - { - int const n = reg[0]; - if (n >= 1) { - __cpuid((int*)reg, 1); - f1c = (U32)reg[2]; - f1d = (U32)reg[3]; - } - if (n >= 7) { - __cpuidex((int*)reg, 7, 0); - f7b = (U32)reg[1]; - f7c = (U32)reg[2]; - } - } -#elif defined(__i386__) && defined(__PIC__) && !defined(__clang__) && defined(__GNUC__) - /* The following block like the normal cpuid branch below, but gcc - * reserves ebx for use of its pic register so we must specially - * handle the save and restore to avoid clobbering the register - */ - U32 n; - __asm__( - "pushl %%ebx\n\t" - "cpuid\n\t" - "popl %%ebx\n\t" - : "=a"(n) - : "a"(0) - : "ecx", "edx"); - if (n >= 1) { - U32 f1a; - __asm__( - "pushl %%ebx\n\t" - "cpuid\n\t" - "popl %%ebx\n\t" - : "=a"(f1a), "=c"(f1c), "=d"(f1d) - : "a"(1)); - } - if (n >= 7) { - __asm__( - "pushl %%ebx\n\t" - "cpuid\n\t" - "movl %%ebx, %%eax\n\t" - "popl %%ebx" - : "=a"(f7b), "=c"(f7c) - : "a"(7), "c"(0) - : "edx"); - } -#elif defined(__x86_64__) || defined(_M_X64) || defined(__i386__) - U32 n; - __asm__("cpuid" : "=a"(n) : "a"(0) : "ebx", "ecx", "edx"); - if (n >= 1) { - U32 f1a; - __asm__("cpuid" : "=a"(f1a), "=c"(f1c), "=d"(f1d) : "a"(1) : "ebx"); - } - if (n >= 7) { - U32 f7a; - __asm__("cpuid" - : "=a"(f7a), "=b"(f7b), "=c"(f7c) - : "a"(7), "c"(0) - : "edx"); - } -#endif - { - ZSTD_cpuid_t cpuid; - cpuid.f1c = f1c; - cpuid.f1d = f1d; - cpuid.f7b = f7b; - cpuid.f7c = f7c; - return cpuid; - } -} - -#define X(name, r, bit) \ - MEM_STATIC int ZSTD_cpuid_##name(ZSTD_cpuid_t const cpuid) { \ - return ((cpuid.r) & (1U << bit)) != 0; \ - } - -/* cpuid(1): Processor Info and Feature Bits. */ -#define C(name, bit) X(name, f1c, bit) - C(sse3, 0) - C(pclmuldq, 1) - C(dtes64, 2) - C(monitor, 3) - C(dscpl, 4) - C(vmx, 5) - C(smx, 6) - C(eist, 7) - C(tm2, 8) - C(ssse3, 9) - C(cnxtid, 10) - C(fma, 12) - C(cx16, 13) - C(xtpr, 14) - C(pdcm, 15) - C(pcid, 17) - C(dca, 18) - C(sse41, 19) - C(sse42, 20) - C(x2apic, 21) - C(movbe, 22) - C(popcnt, 23) - C(tscdeadline, 24) - C(aes, 25) - C(xsave, 26) - C(osxsave, 27) - C(avx, 28) - C(f16c, 29) - C(rdrand, 30) -#undef C -#define D(name, bit) X(name, f1d, bit) - D(fpu, 0) - D(vme, 1) - D(de, 2) - D(pse, 3) - D(tsc, 4) - D(msr, 5) - D(pae, 6) - D(mce, 7) - D(cx8, 8) - D(apic, 9) - D(sep, 11) - D(mtrr, 12) - D(pge, 13) - D(mca, 14) - D(cmov, 15) - D(pat, 16) - D(pse36, 17) - D(psn, 18) - D(clfsh, 19) - D(ds, 21) - D(acpi, 22) - D(mmx, 23) - D(fxsr, 24) - D(sse, 25) - D(sse2, 26) - D(ss, 27) - D(htt, 28) - D(tm, 29) - D(pbe, 31) -#undef D - -/* cpuid(7): Extended Features. */ -#define B(name, bit) X(name, f7b, bit) - B(bmi1, 3) - B(hle, 4) - B(avx2, 5) - B(smep, 7) - B(bmi2, 8) - B(erms, 9) - B(invpcid, 10) - B(rtm, 11) - B(mpx, 14) - B(avx512f, 16) - B(avx512dq, 17) - B(rdseed, 18) - B(adx, 19) - B(smap, 20) - B(avx512ifma, 21) - B(pcommit, 22) - B(clflushopt, 23) - B(clwb, 24) - B(avx512pf, 26) - B(avx512er, 27) - B(avx512cd, 28) - B(sha, 29) - B(avx512bw, 30) - B(avx512vl, 31) -#undef B -#define C(name, bit) X(name, f7c, bit) - C(prefetchwt1, 0) - C(avx512vbmi, 1) -#undef C - -#undef X - -#endif /* ZSTD_COMMON_CPU_H */ diff --git a/stage1/zstd/lib/common/debug.c b/stage1/zstd/lib/common/debug.c deleted file mode 100644 index bb863c9ea6..0000000000 --- a/stage1/zstd/lib/common/debug.c +++ /dev/null @@ -1,24 +0,0 @@ -/* ****************************************************************** - * debug - * Part of FSE library - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ - - -/* - * This module only hosts one global variable - * which can be used to dynamically influence the verbosity of traces, - * such as DEBUGLOG and RAWLOG - */ - -#include "debug.h" - -int g_debuglevel = DEBUGLEVEL; diff --git a/stage1/zstd/lib/common/debug.h b/stage1/zstd/lib/common/debug.h deleted file mode 100644 index 3b2a320a18..0000000000 --- a/stage1/zstd/lib/common/debug.h +++ /dev/null @@ -1,107 +0,0 @@ -/* ****************************************************************** - * debug - * Part of FSE library - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ - - -/* - * The purpose of this header is to enable debug functions. - * They regroup assert(), DEBUGLOG() and RAWLOG() for run-time, - * and DEBUG_STATIC_ASSERT() for compile-time. - * - * By default, DEBUGLEVEL==0, which means run-time debug is disabled. - * - * Level 1 enables assert() only. - * Starting level 2, traces can be generated and pushed to stderr. - * The higher the level, the more verbose the traces. - * - * It's possible to dynamically adjust level using variable g_debug_level, - * which is only declared if DEBUGLEVEL>=2, - * and is a global variable, not multi-thread protected (use with care) - */ - -#ifndef DEBUG_H_12987983217 -#define DEBUG_H_12987983217 - -#if defined (__cplusplus) -extern "C" { -#endif - - -/* static assert is triggered at compile time, leaving no runtime artefact. - * static assert only works with compile-time constants. - * Also, this variant can only be used inside a function. */ -#define DEBUG_STATIC_ASSERT(c) (void)sizeof(char[(c) ? 1 : -1]) - - -/* DEBUGLEVEL is expected to be defined externally, - * typically through compiler command line. - * Value must be a number. */ -#ifndef DEBUGLEVEL -# define DEBUGLEVEL 0 -#endif - - -/* recommended values for DEBUGLEVEL : - * 0 : release mode, no debug, all run-time checks disabled - * 1 : enables assert() only, no display - * 2 : reserved, for currently active debug path - * 3 : events once per object lifetime (CCtx, CDict, etc.) - * 4 : events once per frame - * 5 : events once per block - * 6 : events once per sequence (verbose) - * 7+: events at every position (*very* verbose) - * - * It's generally inconvenient to output traces > 5. - * In which case, it's possible to selectively trigger high verbosity levels - * by modifying g_debug_level. - */ - -#if (DEBUGLEVEL>=1) -# define ZSTD_DEPS_NEED_ASSERT -# include "zstd_deps.h" -#else -# ifndef assert /* assert may be already defined, due to prior #include */ -# define assert(condition) ((void)0) /* disable assert (default) */ -# endif -#endif - -#if (DEBUGLEVEL>=2) -# define ZSTD_DEPS_NEED_IO -# include "zstd_deps.h" -extern int g_debuglevel; /* the variable is only declared, - it actually lives in debug.c, - and is shared by the whole process. - It's not thread-safe. - It's useful when enabling very verbose levels - on selective conditions (such as position in src) */ - -# define RAWLOG(l, ...) { \ - if (l<=g_debuglevel) { \ - ZSTD_DEBUG_PRINT(__VA_ARGS__); \ - } } -# define DEBUGLOG(l, ...) { \ - if (l<=g_debuglevel) { \ - ZSTD_DEBUG_PRINT(__FILE__ ": " __VA_ARGS__); \ - ZSTD_DEBUG_PRINT(" \n"); \ - } } -#else -# define RAWLOG(l, ...) {} /* disabled */ -# define DEBUGLOG(l, ...) {} /* disabled */ -#endif - - -#if defined (__cplusplus) -} -#endif - -#endif /* DEBUG_H_12987983217 */ diff --git a/stage1/zstd/lib/common/entropy_common.c b/stage1/zstd/lib/common/entropy_common.c deleted file mode 100644 index 4229b40c5e..0000000000 --- a/stage1/zstd/lib/common/entropy_common.c +++ /dev/null @@ -1,368 +0,0 @@ -/* ****************************************************************** - * Common functions of New Generation Entropy library - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - Public forum : https://groups.google.com/forum/#!forum/lz4c - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ - -/* ************************************* -* Dependencies -***************************************/ -#include "mem.h" -#include "error_private.h" /* ERR_*, ERROR */ -#define FSE_STATIC_LINKING_ONLY /* FSE_MIN_TABLELOG */ -#include "fse.h" -#define HUF_STATIC_LINKING_ONLY /* HUF_TABLELOG_ABSOLUTEMAX */ -#include "huf.h" - - -/*=== Version ===*/ -unsigned FSE_versionNumber(void) { return FSE_VERSION_NUMBER; } - - -/*=== Error Management ===*/ -unsigned FSE_isError(size_t code) { return ERR_isError(code); } -const char* FSE_getErrorName(size_t code) { return ERR_getErrorName(code); } - -unsigned HUF_isError(size_t code) { return ERR_isError(code); } -const char* HUF_getErrorName(size_t code) { return ERR_getErrorName(code); } - - -/*-************************************************************** -* FSE NCount encoding-decoding -****************************************************************/ -static U32 FSE_ctz(U32 val) -{ - assert(val != 0); - { -# if defined(_MSC_VER) /* Visual */ - if (val != 0) { - unsigned long r; - _BitScanForward(&r, val); - return (unsigned)r; - } else { - /* Should not reach this code path */ - __assume(0); - } -# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */ - return __builtin_ctz(val); -# elif defined(__ICCARM__) /* IAR Intrinsic */ - return __CTZ(val); -# else /* Software version */ - U32 count = 0; - while ((val & 1) == 0) { - val >>= 1; - ++count; - } - return count; -# endif - } -} - -FORCE_INLINE_TEMPLATE -size_t FSE_readNCount_body(short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr, - const void* headerBuffer, size_t hbSize) -{ - const BYTE* const istart = (const BYTE*) headerBuffer; - const BYTE* const iend = istart + hbSize; - const BYTE* ip = istart; - int nbBits; - int remaining; - int threshold; - U32 bitStream; - int bitCount; - unsigned charnum = 0; - unsigned const maxSV1 = *maxSVPtr + 1; - int previous0 = 0; - - if (hbSize < 8) { - /* This function only works when hbSize >= 8 */ - char buffer[8] = {0}; - ZSTD_memcpy(buffer, headerBuffer, hbSize); - { size_t const countSize = FSE_readNCount(normalizedCounter, maxSVPtr, tableLogPtr, - buffer, sizeof(buffer)); - if (FSE_isError(countSize)) return countSize; - if (countSize > hbSize) return ERROR(corruption_detected); - return countSize; - } } - assert(hbSize >= 8); - - /* init */ - ZSTD_memset(normalizedCounter, 0, (*maxSVPtr+1) * sizeof(normalizedCounter[0])); /* all symbols not present in NCount have a frequency of 0 */ - bitStream = MEM_readLE32(ip); - nbBits = (bitStream & 0xF) + FSE_MIN_TABLELOG; /* extract tableLog */ - if (nbBits > FSE_TABLELOG_ABSOLUTE_MAX) return ERROR(tableLog_tooLarge); - bitStream >>= 4; - bitCount = 4; - *tableLogPtr = nbBits; - remaining = (1<> 1; - while (repeats >= 12) { - charnum += 3 * 12; - if (LIKELY(ip <= iend-7)) { - ip += 3; - } else { - bitCount -= (int)(8 * (iend - 7 - ip)); - bitCount &= 31; - ip = iend - 4; - } - bitStream = MEM_readLE32(ip) >> bitCount; - repeats = FSE_ctz(~bitStream | 0x80000000) >> 1; - } - charnum += 3 * repeats; - bitStream >>= 2 * repeats; - bitCount += 2 * repeats; - - /* Add the final repeat which isn't 0b11. */ - assert((bitStream & 3) < 3); - charnum += bitStream & 3; - bitCount += 2; - - /* This is an error, but break and return an error - * at the end, because returning out of a loop makes - * it harder for the compiler to optimize. - */ - if (charnum >= maxSV1) break; - - /* We don't need to set the normalized count to 0 - * because we already memset the whole buffer to 0. - */ - - if (LIKELY(ip <= iend-7) || (ip + (bitCount>>3) <= iend-4)) { - assert((bitCount >> 3) <= 3); /* For first condition to work */ - ip += bitCount>>3; - bitCount &= 7; - } else { - bitCount -= (int)(8 * (iend - 4 - ip)); - bitCount &= 31; - ip = iend - 4; - } - bitStream = MEM_readLE32(ip) >> bitCount; - } - { - int const max = (2*threshold-1) - remaining; - int count; - - if ((bitStream & (threshold-1)) < (U32)max) { - count = bitStream & (threshold-1); - bitCount += nbBits-1; - } else { - count = bitStream & (2*threshold-1); - if (count >= threshold) count -= max; - bitCount += nbBits; - } - - count--; /* extra accuracy */ - /* When it matters (small blocks), this is a - * predictable branch, because we don't use -1. - */ - if (count >= 0) { - remaining -= count; - } else { - assert(count == -1); - remaining += count; - } - normalizedCounter[charnum++] = (short)count; - previous0 = !count; - - assert(threshold > 1); - if (remaining < threshold) { - /* This branch can be folded into the - * threshold update condition because we - * know that threshold > 1. - */ - if (remaining <= 1) break; - nbBits = BIT_highbit32(remaining) + 1; - threshold = 1 << (nbBits - 1); - } - if (charnum >= maxSV1) break; - - if (LIKELY(ip <= iend-7) || (ip + (bitCount>>3) <= iend-4)) { - ip += bitCount>>3; - bitCount &= 7; - } else { - bitCount -= (int)(8 * (iend - 4 - ip)); - bitCount &= 31; - ip = iend - 4; - } - bitStream = MEM_readLE32(ip) >> bitCount; - } } - if (remaining != 1) return ERROR(corruption_detected); - /* Only possible when there are too many zeros. */ - if (charnum > maxSV1) return ERROR(maxSymbolValue_tooSmall); - if (bitCount > 32) return ERROR(corruption_detected); - *maxSVPtr = charnum-1; - - ip += (bitCount+7)>>3; - return ip-istart; -} - -/* Avoids the FORCE_INLINE of the _body() function. */ -static size_t FSE_readNCount_body_default( - short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr, - const void* headerBuffer, size_t hbSize) -{ - return FSE_readNCount_body(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize); -} - -#if DYNAMIC_BMI2 -BMI2_TARGET_ATTRIBUTE static size_t FSE_readNCount_body_bmi2( - short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr, - const void* headerBuffer, size_t hbSize) -{ - return FSE_readNCount_body(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize); -} -#endif - -size_t FSE_readNCount_bmi2( - short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr, - const void* headerBuffer, size_t hbSize, int bmi2) -{ -#if DYNAMIC_BMI2 - if (bmi2) { - return FSE_readNCount_body_bmi2(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize); - } -#endif - (void)bmi2; - return FSE_readNCount_body_default(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize); -} - -size_t FSE_readNCount( - short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr, - const void* headerBuffer, size_t hbSize) -{ - return FSE_readNCount_bmi2(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize, /* bmi2 */ 0); -} - - -/*! HUF_readStats() : - Read compact Huffman tree, saved by HUF_writeCTable(). - `huffWeight` is destination buffer. - `rankStats` is assumed to be a table of at least HUF_TABLELOG_MAX U32. - @return : size read from `src` , or an error Code . - Note : Needed by HUF_readCTable() and HUF_readDTableX?() . -*/ -size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats, - U32* nbSymbolsPtr, U32* tableLogPtr, - const void* src, size_t srcSize) -{ - U32 wksp[HUF_READ_STATS_WORKSPACE_SIZE_U32]; - return HUF_readStats_wksp(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, wksp, sizeof(wksp), /* bmi2 */ 0); -} - -FORCE_INLINE_TEMPLATE size_t -HUF_readStats_body(BYTE* huffWeight, size_t hwSize, U32* rankStats, - U32* nbSymbolsPtr, U32* tableLogPtr, - const void* src, size_t srcSize, - void* workSpace, size_t wkspSize, - int bmi2) -{ - U32 weightTotal; - const BYTE* ip = (const BYTE*) src; - size_t iSize; - size_t oSize; - - if (!srcSize) return ERROR(srcSize_wrong); - iSize = ip[0]; - /* ZSTD_memset(huffWeight, 0, hwSize); *//* is not necessary, even though some analyzer complain ... */ - - if (iSize >= 128) { /* special header */ - oSize = iSize - 127; - iSize = ((oSize+1)/2); - if (iSize+1 > srcSize) return ERROR(srcSize_wrong); - if (oSize >= hwSize) return ERROR(corruption_detected); - ip += 1; - { U32 n; - for (n=0; n> 4; - huffWeight[n+1] = ip[n/2] & 15; - } } } - else { /* header compressed with FSE (normal case) */ - if (iSize+1 > srcSize) return ERROR(srcSize_wrong); - /* max (hwSize-1) values decoded, as last one is implied */ - oSize = FSE_decompress_wksp_bmi2(huffWeight, hwSize-1, ip+1, iSize, 6, workSpace, wkspSize, bmi2); - if (FSE_isError(oSize)) return oSize; - } - - /* collect weight stats */ - ZSTD_memset(rankStats, 0, (HUF_TABLELOG_MAX + 1) * sizeof(U32)); - weightTotal = 0; - { U32 n; for (n=0; n HUF_TABLELOG_MAX) return ERROR(corruption_detected); - rankStats[huffWeight[n]]++; - weightTotal += (1 << huffWeight[n]) >> 1; - } } - if (weightTotal == 0) return ERROR(corruption_detected); - - /* get last non-null symbol weight (implied, total must be 2^n) */ - { U32 const tableLog = BIT_highbit32(weightTotal) + 1; - if (tableLog > HUF_TABLELOG_MAX) return ERROR(corruption_detected); - *tableLogPtr = tableLog; - /* determine last weight */ - { U32 const total = 1 << tableLog; - U32 const rest = total - weightTotal; - U32 const verif = 1 << BIT_highbit32(rest); - U32 const lastWeight = BIT_highbit32(rest) + 1; - if (verif != rest) return ERROR(corruption_detected); /* last value must be a clean power of 2 */ - huffWeight[oSize] = (BYTE)lastWeight; - rankStats[lastWeight]++; - } } - - /* check tree construction validity */ - if ((rankStats[1] < 2) || (rankStats[1] & 1)) return ERROR(corruption_detected); /* by construction : at least 2 elts of rank 1, must be even */ - - /* results */ - *nbSymbolsPtr = (U32)(oSize+1); - return iSize+1; -} - -/* Avoids the FORCE_INLINE of the _body() function. */ -static size_t HUF_readStats_body_default(BYTE* huffWeight, size_t hwSize, U32* rankStats, - U32* nbSymbolsPtr, U32* tableLogPtr, - const void* src, size_t srcSize, - void* workSpace, size_t wkspSize) -{ - return HUF_readStats_body(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize, 0); -} - -#if DYNAMIC_BMI2 -static BMI2_TARGET_ATTRIBUTE size_t HUF_readStats_body_bmi2(BYTE* huffWeight, size_t hwSize, U32* rankStats, - U32* nbSymbolsPtr, U32* tableLogPtr, - const void* src, size_t srcSize, - void* workSpace, size_t wkspSize) -{ - return HUF_readStats_body(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize, 1); -} -#endif - -size_t HUF_readStats_wksp(BYTE* huffWeight, size_t hwSize, U32* rankStats, - U32* nbSymbolsPtr, U32* tableLogPtr, - const void* src, size_t srcSize, - void* workSpace, size_t wkspSize, - int bmi2) -{ -#if DYNAMIC_BMI2 - if (bmi2) { - return HUF_readStats_body_bmi2(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize); - } -#endif - (void)bmi2; - return HUF_readStats_body_default(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize); -} diff --git a/stage1/zstd/lib/common/error_private.c b/stage1/zstd/lib/common/error_private.c deleted file mode 100644 index 6d1135f8c3..0000000000 --- a/stage1/zstd/lib/common/error_private.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -/* The purpose of this file is to have a single list of error strings embedded in binary */ - -#include "error_private.h" - -const char* ERR_getErrorString(ERR_enum code) -{ -#ifdef ZSTD_STRIP_ERROR_STRINGS - (void)code; - return "Error strings stripped"; -#else - static const char* const notErrorCode = "Unspecified error code"; - switch( code ) - { - case PREFIX(no_error): return "No error detected"; - case PREFIX(GENERIC): return "Error (generic)"; - case PREFIX(prefix_unknown): return "Unknown frame descriptor"; - case PREFIX(version_unsupported): return "Version not supported"; - case PREFIX(frameParameter_unsupported): return "Unsupported frame parameter"; - case PREFIX(frameParameter_windowTooLarge): return "Frame requires too much memory for decoding"; - case PREFIX(corruption_detected): return "Corrupted block detected"; - case PREFIX(checksum_wrong): return "Restored data doesn't match checksum"; - case PREFIX(parameter_unsupported): return "Unsupported parameter"; - case PREFIX(parameter_outOfBound): return "Parameter is out of bound"; - case PREFIX(init_missing): return "Context should be init first"; - case PREFIX(memory_allocation): return "Allocation error : not enough memory"; - case PREFIX(workSpace_tooSmall): return "workSpace buffer is not large enough"; - case PREFIX(stage_wrong): return "Operation not authorized at current processing stage"; - case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory : unsupported"; - case PREFIX(maxSymbolValue_tooLarge): return "Unsupported max Symbol Value : too large"; - case PREFIX(maxSymbolValue_tooSmall): return "Specified maxSymbolValue is too small"; - case PREFIX(dictionary_corrupted): return "Dictionary is corrupted"; - case PREFIX(dictionary_wrong): return "Dictionary mismatch"; - case PREFIX(dictionaryCreation_failed): return "Cannot create Dictionary from provided samples"; - case PREFIX(dstSize_tooSmall): return "Destination buffer is too small"; - case PREFIX(srcSize_wrong): return "Src size is incorrect"; - case PREFIX(dstBuffer_null): return "Operation on NULL destination buffer"; - /* following error codes are not stable and may be removed or changed in a future version */ - case PREFIX(frameIndex_tooLarge): return "Frame index is too large"; - case PREFIX(seekableIO): return "An I/O error occurred when reading/seeking"; - case PREFIX(dstBuffer_wrong): return "Destination buffer is wrong"; - case PREFIX(srcBuffer_wrong): return "Source buffer is wrong"; - case PREFIX(maxCode): - default: return notErrorCode; - } -#endif -} diff --git a/stage1/zstd/lib/common/error_private.h b/stage1/zstd/lib/common/error_private.h deleted file mode 100644 index 007d81066a..0000000000 --- a/stage1/zstd/lib/common/error_private.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -/* Note : this module is expected to remain private, do not expose it */ - -#ifndef ERROR_H_MODULE -#define ERROR_H_MODULE - -#if defined (__cplusplus) -extern "C" { -#endif - - -/* **************************************** -* Dependencies -******************************************/ -#include "../zstd_errors.h" /* enum list */ -#include "compiler.h" -#include "debug.h" -#include "zstd_deps.h" /* size_t */ - - -/* **************************************** -* Compiler-specific -******************************************/ -#if defined(__GNUC__) -# define ERR_STATIC static __attribute__((unused)) -#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) -# define ERR_STATIC static inline -#elif defined(_MSC_VER) -# define ERR_STATIC static __inline -#else -# define ERR_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */ -#endif - - -/*-**************************************** -* Customization (error_public.h) -******************************************/ -typedef ZSTD_ErrorCode ERR_enum; -#define PREFIX(name) ZSTD_error_##name - - -/*-**************************************** -* Error codes handling -******************************************/ -#undef ERROR /* already defined on Visual Studio */ -#define ERROR(name) ZSTD_ERROR(name) -#define ZSTD_ERROR(name) ((size_t)-PREFIX(name)) - -ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); } - -ERR_STATIC ERR_enum ERR_getErrorCode(size_t code) { if (!ERR_isError(code)) return (ERR_enum)0; return (ERR_enum) (0-code); } - -/* check and forward error code */ -#define CHECK_V_F(e, f) size_t const e = f; if (ERR_isError(e)) return e -#define CHECK_F(f) { CHECK_V_F(_var_err__, f); } - - -/*-**************************************** -* Error Strings -******************************************/ - -const char* ERR_getErrorString(ERR_enum code); /* error_private.c */ - -ERR_STATIC const char* ERR_getErrorName(size_t code) -{ - return ERR_getErrorString(ERR_getErrorCode(code)); -} - -/** - * Ignore: this is an internal helper. - * - * This is a helper function to help force C99-correctness during compilation. - * Under strict compilation modes, variadic macro arguments can't be empty. - * However, variadic function arguments can be. Using a function therefore lets - * us statically check that at least one (string) argument was passed, - * independent of the compilation flags. - */ -static INLINE_KEYWORD UNUSED_ATTR -void _force_has_format_string(const char *format, ...) { - (void)format; -} - -/** - * Ignore: this is an internal helper. - * - * We want to force this function invocation to be syntactically correct, but - * we don't want to force runtime evaluation of its arguments. - */ -#define _FORCE_HAS_FORMAT_STRING(...) \ - if (0) { \ - _force_has_format_string(__VA_ARGS__); \ - } - -#define ERR_QUOTE(str) #str - -/** - * Return the specified error if the condition evaluates to true. - * - * In debug modes, prints additional information. - * In order to do that (particularly, printing the conditional that failed), - * this can't just wrap RETURN_ERROR(). - */ -#define RETURN_ERROR_IF(cond, err, ...) \ - if (cond) { \ - RAWLOG(3, "%s:%d: ERROR!: check %s failed, returning %s", \ - __FILE__, __LINE__, ERR_QUOTE(cond), ERR_QUOTE(ERROR(err))); \ - _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \ - RAWLOG(3, ": " __VA_ARGS__); \ - RAWLOG(3, "\n"); \ - return ERROR(err); \ - } - -/** - * Unconditionally return the specified error. - * - * In debug modes, prints additional information. - */ -#define RETURN_ERROR(err, ...) \ - do { \ - RAWLOG(3, "%s:%d: ERROR!: unconditional check failed, returning %s", \ - __FILE__, __LINE__, ERR_QUOTE(ERROR(err))); \ - _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \ - RAWLOG(3, ": " __VA_ARGS__); \ - RAWLOG(3, "\n"); \ - return ERROR(err); \ - } while(0); - -/** - * If the provided expression evaluates to an error code, returns that error code. - * - * In debug modes, prints additional information. - */ -#define FORWARD_IF_ERROR(err, ...) \ - do { \ - size_t const err_code = (err); \ - if (ERR_isError(err_code)) { \ - RAWLOG(3, "%s:%d: ERROR!: forwarding error in %s: %s", \ - __FILE__, __LINE__, ERR_QUOTE(err), ERR_getErrorName(err_code)); \ - _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \ - RAWLOG(3, ": " __VA_ARGS__); \ - RAWLOG(3, "\n"); \ - return err_code; \ - } \ - } while(0); - -#if defined (__cplusplus) -} -#endif - -#endif /* ERROR_H_MODULE */ diff --git a/stage1/zstd/lib/common/fse.h b/stage1/zstd/lib/common/fse.h deleted file mode 100644 index 714bfd3e7f..0000000000 --- a/stage1/zstd/lib/common/fse.h +++ /dev/null @@ -1,717 +0,0 @@ -/* ****************************************************************** - * FSE : Finite State Entropy codec - * Public Prototypes declaration - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ - -#if defined (__cplusplus) -extern "C" { -#endif - -#ifndef FSE_H -#define FSE_H - - -/*-***************************************** -* Dependencies -******************************************/ -#include "zstd_deps.h" /* size_t, ptrdiff_t */ - - -/*-***************************************** -* FSE_PUBLIC_API : control library symbols visibility -******************************************/ -#if defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) && defined(__GNUC__) && (__GNUC__ >= 4) -# define FSE_PUBLIC_API __attribute__ ((visibility ("default"))) -#elif defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) /* Visual expected */ -# define FSE_PUBLIC_API __declspec(dllexport) -#elif defined(FSE_DLL_IMPORT) && (FSE_DLL_IMPORT==1) -# define FSE_PUBLIC_API __declspec(dllimport) /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ -#else -# define FSE_PUBLIC_API -#endif - -/*------ Version ------*/ -#define FSE_VERSION_MAJOR 0 -#define FSE_VERSION_MINOR 9 -#define FSE_VERSION_RELEASE 0 - -#define FSE_LIB_VERSION FSE_VERSION_MAJOR.FSE_VERSION_MINOR.FSE_VERSION_RELEASE -#define FSE_QUOTE(str) #str -#define FSE_EXPAND_AND_QUOTE(str) FSE_QUOTE(str) -#define FSE_VERSION_STRING FSE_EXPAND_AND_QUOTE(FSE_LIB_VERSION) - -#define FSE_VERSION_NUMBER (FSE_VERSION_MAJOR *100*100 + FSE_VERSION_MINOR *100 + FSE_VERSION_RELEASE) -FSE_PUBLIC_API unsigned FSE_versionNumber(void); /**< library version number; to be used when checking dll version */ - - -/*-**************************************** -* FSE simple functions -******************************************/ -/*! FSE_compress() : - Compress content of buffer 'src', of size 'srcSize', into destination buffer 'dst'. - 'dst' buffer must be already allocated. Compression runs faster is dstCapacity >= FSE_compressBound(srcSize). - @return : size of compressed data (<= dstCapacity). - Special values : if return == 0, srcData is not compressible => Nothing is stored within dst !!! - if return == 1, srcData is a single byte symbol * srcSize times. Use RLE compression instead. - if FSE_isError(return), compression failed (more details using FSE_getErrorName()) -*/ -FSE_PUBLIC_API size_t FSE_compress(void* dst, size_t dstCapacity, - const void* src, size_t srcSize); - -/*! FSE_decompress(): - Decompress FSE data from buffer 'cSrc', of size 'cSrcSize', - into already allocated destination buffer 'dst', of size 'dstCapacity'. - @return : size of regenerated data (<= maxDstSize), - or an error code, which can be tested using FSE_isError() . - - ** Important ** : FSE_decompress() does not decompress non-compressible nor RLE data !!! - Why ? : making this distinction requires a header. - Header management is intentionally delegated to the user layer, which can better manage special cases. -*/ -FSE_PUBLIC_API size_t FSE_decompress(void* dst, size_t dstCapacity, - const void* cSrc, size_t cSrcSize); - - -/*-***************************************** -* Tool functions -******************************************/ -FSE_PUBLIC_API size_t FSE_compressBound(size_t size); /* maximum compressed size */ - -/* Error Management */ -FSE_PUBLIC_API unsigned FSE_isError(size_t code); /* tells if a return value is an error code */ -FSE_PUBLIC_API const char* FSE_getErrorName(size_t code); /* provides error code string (useful for debugging) */ - - -/*-***************************************** -* FSE advanced functions -******************************************/ -/*! FSE_compress2() : - Same as FSE_compress(), but allows the selection of 'maxSymbolValue' and 'tableLog' - Both parameters can be defined as '0' to mean : use default value - @return : size of compressed data - Special values : if return == 0, srcData is not compressible => Nothing is stored within cSrc !!! - if return == 1, srcData is a single byte symbol * srcSize times. Use RLE compression. - if FSE_isError(return), it's an error code. -*/ -FSE_PUBLIC_API size_t FSE_compress2 (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog); - - -/*-***************************************** -* FSE detailed API -******************************************/ -/*! -FSE_compress() does the following: -1. count symbol occurrence from source[] into table count[] (see hist.h) -2. normalize counters so that sum(count[]) == Power_of_2 (2^tableLog) -3. save normalized counters to memory buffer using writeNCount() -4. build encoding table 'CTable' from normalized counters -5. encode the data stream using encoding table 'CTable' - -FSE_decompress() does the following: -1. read normalized counters with readNCount() -2. build decoding table 'DTable' from normalized counters -3. decode the data stream using decoding table 'DTable' - -The following API allows targeting specific sub-functions for advanced tasks. -For example, it's possible to compress several blocks using the same 'CTable', -or to save and provide normalized distribution using external method. -*/ - -/* *** COMPRESSION *** */ - -/*! FSE_optimalTableLog(): - dynamically downsize 'tableLog' when conditions are met. - It saves CPU time, by using smaller tables, while preserving or even improving compression ratio. - @return : recommended tableLog (necessarily <= 'maxTableLog') */ -FSE_PUBLIC_API unsigned FSE_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue); - -/*! FSE_normalizeCount(): - normalize counts so that sum(count[]) == Power_of_2 (2^tableLog) - 'normalizedCounter' is a table of short, of minimum size (maxSymbolValue+1). - useLowProbCount is a boolean parameter which trades off compressed size for - faster header decoding. When it is set to 1, the compressed data will be slightly - smaller. And when it is set to 0, FSE_readNCount() and FSE_buildDTable() will be - faster. If you are compressing a small amount of data (< 2 KB) then useLowProbCount=0 - is a good default, since header deserialization makes a big speed difference. - Otherwise, useLowProbCount=1 is a good default, since the speed difference is small. - @return : tableLog, - or an errorCode, which can be tested using FSE_isError() */ -FSE_PUBLIC_API size_t FSE_normalizeCount(short* normalizedCounter, unsigned tableLog, - const unsigned* count, size_t srcSize, unsigned maxSymbolValue, unsigned useLowProbCount); - -/*! FSE_NCountWriteBound(): - Provides the maximum possible size of an FSE normalized table, given 'maxSymbolValue' and 'tableLog'. - Typically useful for allocation purpose. */ -FSE_PUBLIC_API size_t FSE_NCountWriteBound(unsigned maxSymbolValue, unsigned tableLog); - -/*! FSE_writeNCount(): - Compactly save 'normalizedCounter' into 'buffer'. - @return : size of the compressed table, - or an errorCode, which can be tested using FSE_isError(). */ -FSE_PUBLIC_API size_t FSE_writeNCount (void* buffer, size_t bufferSize, - const short* normalizedCounter, - unsigned maxSymbolValue, unsigned tableLog); - -/*! Constructor and Destructor of FSE_CTable. - Note that FSE_CTable size depends on 'tableLog' and 'maxSymbolValue' */ -typedef unsigned FSE_CTable; /* don't allocate that. It's only meant to be more restrictive than void* */ -FSE_PUBLIC_API FSE_CTable* FSE_createCTable (unsigned maxSymbolValue, unsigned tableLog); -FSE_PUBLIC_API void FSE_freeCTable (FSE_CTable* ct); - -/*! FSE_buildCTable(): - Builds `ct`, which must be already allocated, using FSE_createCTable(). - @return : 0, or an errorCode, which can be tested using FSE_isError() */ -FSE_PUBLIC_API size_t FSE_buildCTable(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog); - -/*! FSE_compress_usingCTable(): - Compress `src` using `ct` into `dst` which must be already allocated. - @return : size of compressed data (<= `dstCapacity`), - or 0 if compressed data could not fit into `dst`, - or an errorCode, which can be tested using FSE_isError() */ -FSE_PUBLIC_API size_t FSE_compress_usingCTable (void* dst, size_t dstCapacity, const void* src, size_t srcSize, const FSE_CTable* ct); - -/*! -Tutorial : ----------- -The first step is to count all symbols. FSE_count() does this job very fast. -Result will be saved into 'count', a table of unsigned int, which must be already allocated, and have 'maxSymbolValuePtr[0]+1' cells. -'src' is a table of bytes of size 'srcSize'. All values within 'src' MUST be <= maxSymbolValuePtr[0] -maxSymbolValuePtr[0] will be updated, with its real value (necessarily <= original value) -FSE_count() will return the number of occurrence of the most frequent symbol. -This can be used to know if there is a single symbol within 'src', and to quickly evaluate its compressibility. -If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError()). - -The next step is to normalize the frequencies. -FSE_normalizeCount() will ensure that sum of frequencies is == 2 ^'tableLog'. -It also guarantees a minimum of 1 to any Symbol with frequency >= 1. -You can use 'tableLog'==0 to mean "use default tableLog value". -If you are unsure of which tableLog value to use, you can ask FSE_optimalTableLog(), -which will provide the optimal valid tableLog given sourceSize, maxSymbolValue, and a user-defined maximum (0 means "default"). - -The result of FSE_normalizeCount() will be saved into a table, -called 'normalizedCounter', which is a table of signed short. -'normalizedCounter' must be already allocated, and have at least 'maxSymbolValue+1' cells. -The return value is tableLog if everything proceeded as expected. -It is 0 if there is a single symbol within distribution. -If there is an error (ex: invalid tableLog value), the function will return an ErrorCode (which can be tested using FSE_isError()). - -'normalizedCounter' can be saved in a compact manner to a memory area using FSE_writeNCount(). -'buffer' must be already allocated. -For guaranteed success, buffer size must be at least FSE_headerBound(). -The result of the function is the number of bytes written into 'buffer'. -If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError(); ex : buffer size too small). - -'normalizedCounter' can then be used to create the compression table 'CTable'. -The space required by 'CTable' must be already allocated, using FSE_createCTable(). -You can then use FSE_buildCTable() to fill 'CTable'. -If there is an error, both functions will return an ErrorCode (which can be tested using FSE_isError()). - -'CTable' can then be used to compress 'src', with FSE_compress_usingCTable(). -Similar to FSE_count(), the convention is that 'src' is assumed to be a table of char of size 'srcSize' -The function returns the size of compressed data (without header), necessarily <= `dstCapacity`. -If it returns '0', compressed data could not fit into 'dst'. -If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError()). -*/ - - -/* *** DECOMPRESSION *** */ - -/*! FSE_readNCount(): - Read compactly saved 'normalizedCounter' from 'rBuffer'. - @return : size read from 'rBuffer', - or an errorCode, which can be tested using FSE_isError(). - maxSymbolValuePtr[0] and tableLogPtr[0] will also be updated with their respective values */ -FSE_PUBLIC_API size_t FSE_readNCount (short* normalizedCounter, - unsigned* maxSymbolValuePtr, unsigned* tableLogPtr, - const void* rBuffer, size_t rBuffSize); - -/*! FSE_readNCount_bmi2(): - * Same as FSE_readNCount() but pass bmi2=1 when your CPU supports BMI2 and 0 otherwise. - */ -FSE_PUBLIC_API size_t FSE_readNCount_bmi2(short* normalizedCounter, - unsigned* maxSymbolValuePtr, unsigned* tableLogPtr, - const void* rBuffer, size_t rBuffSize, int bmi2); - -/*! Constructor and Destructor of FSE_DTable. - Note that its size depends on 'tableLog' */ -typedef unsigned FSE_DTable; /* don't allocate that. It's just a way to be more restrictive than void* */ -FSE_PUBLIC_API FSE_DTable* FSE_createDTable(unsigned tableLog); -FSE_PUBLIC_API void FSE_freeDTable(FSE_DTable* dt); - -/*! FSE_buildDTable(): - Builds 'dt', which must be already allocated, using FSE_createDTable(). - return : 0, or an errorCode, which can be tested using FSE_isError() */ -FSE_PUBLIC_API size_t FSE_buildDTable (FSE_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog); - -/*! FSE_decompress_usingDTable(): - Decompress compressed source `cSrc` of size `cSrcSize` using `dt` - into `dst` which must be already allocated. - @return : size of regenerated data (necessarily <= `dstCapacity`), - or an errorCode, which can be tested using FSE_isError() */ -FSE_PUBLIC_API size_t FSE_decompress_usingDTable(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, const FSE_DTable* dt); - -/*! -Tutorial : ----------- -(Note : these functions only decompress FSE-compressed blocks. - If block is uncompressed, use memcpy() instead - If block is a single repeated byte, use memset() instead ) - -The first step is to obtain the normalized frequencies of symbols. -This can be performed by FSE_readNCount() if it was saved using FSE_writeNCount(). -'normalizedCounter' must be already allocated, and have at least 'maxSymbolValuePtr[0]+1' cells of signed short. -In practice, that means it's necessary to know 'maxSymbolValue' beforehand, -or size the table to handle worst case situations (typically 256). -FSE_readNCount() will provide 'tableLog' and 'maxSymbolValue'. -The result of FSE_readNCount() is the number of bytes read from 'rBuffer'. -Note that 'rBufferSize' must be at least 4 bytes, even if useful information is less than that. -If there is an error, the function will return an error code, which can be tested using FSE_isError(). - -The next step is to build the decompression tables 'FSE_DTable' from 'normalizedCounter'. -This is performed by the function FSE_buildDTable(). -The space required by 'FSE_DTable' must be already allocated using FSE_createDTable(). -If there is an error, the function will return an error code, which can be tested using FSE_isError(). - -`FSE_DTable` can then be used to decompress `cSrc`, with FSE_decompress_usingDTable(). -`cSrcSize` must be strictly correct, otherwise decompression will fail. -FSE_decompress_usingDTable() result will tell how many bytes were regenerated (<=`dstCapacity`). -If there is an error, the function will return an error code, which can be tested using FSE_isError(). (ex: dst buffer too small) -*/ - -#endif /* FSE_H */ - -#if defined(FSE_STATIC_LINKING_ONLY) && !defined(FSE_H_FSE_STATIC_LINKING_ONLY) -#define FSE_H_FSE_STATIC_LINKING_ONLY - -/* *** Dependency *** */ -#include "bitstream.h" - - -/* ***************************************** -* Static allocation -*******************************************/ -/* FSE buffer bounds */ -#define FSE_NCOUNTBOUND 512 -#define FSE_BLOCKBOUND(size) ((size) + ((size)>>7) + 4 /* fse states */ + sizeof(size_t) /* bitContainer */) -#define FSE_COMPRESSBOUND(size) (FSE_NCOUNTBOUND + FSE_BLOCKBOUND(size)) /* Macro version, useful for static allocation */ - -/* It is possible to statically allocate FSE CTable/DTable as a table of FSE_CTable/FSE_DTable using below macros */ -#define FSE_CTABLE_SIZE_U32(maxTableLog, maxSymbolValue) (1 + (1<<((maxTableLog)-1)) + (((maxSymbolValue)+1)*2)) -#define FSE_DTABLE_SIZE_U32(maxTableLog) (1 + (1<<(maxTableLog))) - -/* or use the size to malloc() space directly. Pay attention to alignment restrictions though */ -#define FSE_CTABLE_SIZE(maxTableLog, maxSymbolValue) (FSE_CTABLE_SIZE_U32(maxTableLog, maxSymbolValue) * sizeof(FSE_CTable)) -#define FSE_DTABLE_SIZE(maxTableLog) (FSE_DTABLE_SIZE_U32(maxTableLog) * sizeof(FSE_DTable)) - - -/* ***************************************** - * FSE advanced API - ***************************************** */ - -unsigned FSE_optimalTableLog_internal(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, unsigned minus); -/**< same as FSE_optimalTableLog(), which used `minus==2` */ - -/* FSE_compress_wksp() : - * Same as FSE_compress2(), but using an externally allocated scratch buffer (`workSpace`). - * FSE_COMPRESS_WKSP_SIZE_U32() provides the minimum size required for `workSpace` as a table of FSE_CTable. - */ -#define FSE_COMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) ( FSE_CTABLE_SIZE_U32(maxTableLog, maxSymbolValue) + ((maxTableLog > 12) ? (1 << (maxTableLog - 2)) : 1024) ) -size_t FSE_compress_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); - -size_t FSE_buildCTable_raw (FSE_CTable* ct, unsigned nbBits); -/**< build a fake FSE_CTable, designed for a flat distribution, where each symbol uses nbBits */ - -size_t FSE_buildCTable_rle (FSE_CTable* ct, unsigned char symbolValue); -/**< build a fake FSE_CTable, designed to compress always the same symbolValue */ - -/* FSE_buildCTable_wksp() : - * Same as FSE_buildCTable(), but using an externally allocated scratch buffer (`workSpace`). - * `wkspSize` must be >= `FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)` of `unsigned`. - * See FSE_buildCTable_wksp() for breakdown of workspace usage. - */ -#define FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog) (((maxSymbolValue + 2) + (1ull << (tableLog)))/2 + sizeof(U64)/sizeof(U32) /* additional 8 bytes for potential table overwrite */) -#define FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog) (sizeof(unsigned) * FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)) -size_t FSE_buildCTable_wksp(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); - -#define FSE_BUILD_DTABLE_WKSP_SIZE(maxTableLog, maxSymbolValue) (sizeof(short) * (maxSymbolValue + 1) + (1ULL << maxTableLog) + 8) -#define FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) ((FSE_BUILD_DTABLE_WKSP_SIZE(maxTableLog, maxSymbolValue) + sizeof(unsigned) - 1) / sizeof(unsigned)) -FSE_PUBLIC_API size_t FSE_buildDTable_wksp(FSE_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); -/**< Same as FSE_buildDTable(), using an externally allocated `workspace` produced with `FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxSymbolValue)` */ - -size_t FSE_buildDTable_raw (FSE_DTable* dt, unsigned nbBits); -/**< build a fake FSE_DTable, designed to read a flat distribution where each symbol uses nbBits */ - -size_t FSE_buildDTable_rle (FSE_DTable* dt, unsigned char symbolValue); -/**< build a fake FSE_DTable, designed to always generate the same symbolValue */ - -#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) + (FSE_MAX_SYMBOL_VALUE + 1) / 2 + 1) -#define FSE_DECOMPRESS_WKSP_SIZE(maxTableLog, maxSymbolValue) (FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) * sizeof(unsigned)) -size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize); -/**< same as FSE_decompress(), using an externally allocated `workSpace` produced with `FSE_DECOMPRESS_WKSP_SIZE_U32(maxLog, maxSymbolValue)` */ - -size_t FSE_decompress_wksp_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize, int bmi2); -/**< Same as FSE_decompress_wksp() but with dynamic BMI2 support. Pass 1 if your CPU supports BMI2 or 0 if it doesn't. */ - -typedef enum { - FSE_repeat_none, /**< Cannot use the previous table */ - FSE_repeat_check, /**< Can use the previous table but it must be checked */ - FSE_repeat_valid /**< Can use the previous table and it is assumed to be valid */ - } FSE_repeat; - -/* ***************************************** -* FSE symbol compression API -*******************************************/ -/*! - This API consists of small unitary functions, which highly benefit from being inlined. - Hence their body are included in next section. -*/ -typedef struct { - ptrdiff_t value; - const void* stateTable; - const void* symbolTT; - unsigned stateLog; -} FSE_CState_t; - -static void FSE_initCState(FSE_CState_t* CStatePtr, const FSE_CTable* ct); - -static void FSE_encodeSymbol(BIT_CStream_t* bitC, FSE_CState_t* CStatePtr, unsigned symbol); - -static void FSE_flushCState(BIT_CStream_t* bitC, const FSE_CState_t* CStatePtr); - -/**< -These functions are inner components of FSE_compress_usingCTable(). -They allow the creation of custom streams, mixing multiple tables and bit sources. - -A key property to keep in mind is that encoding and decoding are done **in reverse direction**. -So the first symbol you will encode is the last you will decode, like a LIFO stack. - -You will need a few variables to track your CStream. They are : - -FSE_CTable ct; // Provided by FSE_buildCTable() -BIT_CStream_t bitStream; // bitStream tracking structure -FSE_CState_t state; // State tracking structure (can have several) - - -The first thing to do is to init bitStream and state. - size_t errorCode = BIT_initCStream(&bitStream, dstBuffer, maxDstSize); - FSE_initCState(&state, ct); - -Note that BIT_initCStream() can produce an error code, so its result should be tested, using FSE_isError(); -You can then encode your input data, byte after byte. -FSE_encodeSymbol() outputs a maximum of 'tableLog' bits at a time. -Remember decoding will be done in reverse direction. - FSE_encodeByte(&bitStream, &state, symbol); - -At any time, you can also add any bit sequence. -Note : maximum allowed nbBits is 25, for compatibility with 32-bits decoders - BIT_addBits(&bitStream, bitField, nbBits); - -The above methods don't commit data to memory, they just store it into local register, for speed. -Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (size_t). -Writing data to memory is a manual operation, performed by the flushBits function. - BIT_flushBits(&bitStream); - -Your last FSE encoding operation shall be to flush your last state value(s). - FSE_flushState(&bitStream, &state); - -Finally, you must close the bitStream. -The function returns the size of CStream in bytes. -If data couldn't fit into dstBuffer, it will return a 0 ( == not compressible) -If there is an error, it returns an errorCode (which can be tested using FSE_isError()). - size_t size = BIT_closeCStream(&bitStream); -*/ - - -/* ***************************************** -* FSE symbol decompression API -*******************************************/ -typedef struct { - size_t state; - const void* table; /* precise table may vary, depending on U16 */ -} FSE_DState_t; - - -static void FSE_initDState(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD, const FSE_DTable* dt); - -static unsigned char FSE_decodeSymbol(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD); - -static unsigned FSE_endOfDState(const FSE_DState_t* DStatePtr); - -/**< -Let's now decompose FSE_decompress_usingDTable() into its unitary components. -You will decode FSE-encoded symbols from the bitStream, -and also any other bitFields you put in, **in reverse order**. - -You will need a few variables to track your bitStream. They are : - -BIT_DStream_t DStream; // Stream context -FSE_DState_t DState; // State context. Multiple ones are possible -FSE_DTable* DTablePtr; // Decoding table, provided by FSE_buildDTable() - -The first thing to do is to init the bitStream. - errorCode = BIT_initDStream(&DStream, srcBuffer, srcSize); - -You should then retrieve your initial state(s) -(in reverse flushing order if you have several ones) : - errorCode = FSE_initDState(&DState, &DStream, DTablePtr); - -You can then decode your data, symbol after symbol. -For information the maximum number of bits read by FSE_decodeSymbol() is 'tableLog'. -Keep in mind that symbols are decoded in reverse order, like a LIFO stack (last in, first out). - unsigned char symbol = FSE_decodeSymbol(&DState, &DStream); - -You can retrieve any bitfield you eventually stored into the bitStream (in reverse order) -Note : maximum allowed nbBits is 25, for 32-bits compatibility - size_t bitField = BIT_readBits(&DStream, nbBits); - -All above operations only read from local register (which size depends on size_t). -Refueling the register from memory is manually performed by the reload method. - endSignal = FSE_reloadDStream(&DStream); - -BIT_reloadDStream() result tells if there is still some more data to read from DStream. -BIT_DStream_unfinished : there is still some data left into the DStream. -BIT_DStream_endOfBuffer : Dstream reached end of buffer. Its container may no longer be completely filled. -BIT_DStream_completed : Dstream reached its exact end, corresponding in general to decompression completed. -BIT_DStream_tooFar : Dstream went too far. Decompression result is corrupted. - -When reaching end of buffer (BIT_DStream_endOfBuffer), progress slowly, notably if you decode multiple symbols per loop, -to properly detect the exact end of stream. -After each decoded symbol, check if DStream is fully consumed using this simple test : - BIT_reloadDStream(&DStream) >= BIT_DStream_completed - -When it's done, verify decompression is fully completed, by checking both DStream and the relevant states. -Checking if DStream has reached its end is performed by : - BIT_endOfDStream(&DStream); -Check also the states. There might be some symbols left there, if some high probability ones (>50%) are possible. - FSE_endOfDState(&DState); -*/ - - -/* ***************************************** -* FSE unsafe API -*******************************************/ -static unsigned char FSE_decodeSymbolFast(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD); -/* faster, but works only if nbBits is always >= 1 (otherwise, result will be corrupted) */ - - -/* ***************************************** -* Implementation of inlined functions -*******************************************/ -typedef struct { - int deltaFindState; - U32 deltaNbBits; -} FSE_symbolCompressionTransform; /* total 8 bytes */ - -MEM_STATIC void FSE_initCState(FSE_CState_t* statePtr, const FSE_CTable* ct) -{ - const void* ptr = ct; - const U16* u16ptr = (const U16*) ptr; - const U32 tableLog = MEM_read16(ptr); - statePtr->value = (ptrdiff_t)1<stateTable = u16ptr+2; - statePtr->symbolTT = ct + 1 + (tableLog ? (1<<(tableLog-1)) : 1); - statePtr->stateLog = tableLog; -} - - -/*! FSE_initCState2() : -* Same as FSE_initCState(), but the first symbol to include (which will be the last to be read) -* uses the smallest state value possible, saving the cost of this symbol */ -MEM_STATIC void FSE_initCState2(FSE_CState_t* statePtr, const FSE_CTable* ct, U32 symbol) -{ - FSE_initCState(statePtr, ct); - { const FSE_symbolCompressionTransform symbolTT = ((const FSE_symbolCompressionTransform*)(statePtr->symbolTT))[symbol]; - const U16* stateTable = (const U16*)(statePtr->stateTable); - U32 nbBitsOut = (U32)((symbolTT.deltaNbBits + (1<<15)) >> 16); - statePtr->value = (nbBitsOut << 16) - symbolTT.deltaNbBits; - statePtr->value = stateTable[(statePtr->value >> nbBitsOut) + symbolTT.deltaFindState]; - } -} - -MEM_STATIC void FSE_encodeSymbol(BIT_CStream_t* bitC, FSE_CState_t* statePtr, unsigned symbol) -{ - FSE_symbolCompressionTransform const symbolTT = ((const FSE_symbolCompressionTransform*)(statePtr->symbolTT))[symbol]; - const U16* const stateTable = (const U16*)(statePtr->stateTable); - U32 const nbBitsOut = (U32)((statePtr->value + symbolTT.deltaNbBits) >> 16); - BIT_addBits(bitC, statePtr->value, nbBitsOut); - statePtr->value = stateTable[ (statePtr->value >> nbBitsOut) + symbolTT.deltaFindState]; -} - -MEM_STATIC void FSE_flushCState(BIT_CStream_t* bitC, const FSE_CState_t* statePtr) -{ - BIT_addBits(bitC, statePtr->value, statePtr->stateLog); - BIT_flushBits(bitC); -} - - -/* FSE_getMaxNbBits() : - * Approximate maximum cost of a symbol, in bits. - * Fractional get rounded up (i.e : a symbol with a normalized frequency of 3 gives the same result as a frequency of 2) - * note 1 : assume symbolValue is valid (<= maxSymbolValue) - * note 2 : if freq[symbolValue]==0, @return a fake cost of tableLog+1 bits */ -MEM_STATIC U32 FSE_getMaxNbBits(const void* symbolTTPtr, U32 symbolValue) -{ - const FSE_symbolCompressionTransform* symbolTT = (const FSE_symbolCompressionTransform*) symbolTTPtr; - return (symbolTT[symbolValue].deltaNbBits + ((1<<16)-1)) >> 16; -} - -/* FSE_bitCost() : - * Approximate symbol cost, as fractional value, using fixed-point format (accuracyLog fractional bits) - * note 1 : assume symbolValue is valid (<= maxSymbolValue) - * note 2 : if freq[symbolValue]==0, @return a fake cost of tableLog+1 bits */ -MEM_STATIC U32 FSE_bitCost(const void* symbolTTPtr, U32 tableLog, U32 symbolValue, U32 accuracyLog) -{ - const FSE_symbolCompressionTransform* symbolTT = (const FSE_symbolCompressionTransform*) symbolTTPtr; - U32 const minNbBits = symbolTT[symbolValue].deltaNbBits >> 16; - U32 const threshold = (minNbBits+1) << 16; - assert(tableLog < 16); - assert(accuracyLog < 31-tableLog); /* ensure enough room for renormalization double shift */ - { U32 const tableSize = 1 << tableLog; - U32 const deltaFromThreshold = threshold - (symbolTT[symbolValue].deltaNbBits + tableSize); - U32 const normalizedDeltaFromThreshold = (deltaFromThreshold << accuracyLog) >> tableLog; /* linear interpolation (very approximate) */ - U32 const bitMultiplier = 1 << accuracyLog; - assert(symbolTT[symbolValue].deltaNbBits + tableSize <= threshold); - assert(normalizedDeltaFromThreshold <= bitMultiplier); - return (minNbBits+1)*bitMultiplier - normalizedDeltaFromThreshold; - } -} - - -/* ====== Decompression ====== */ - -typedef struct { - U16 tableLog; - U16 fastMode; -} FSE_DTableHeader; /* sizeof U32 */ - -typedef struct -{ - unsigned short newState; - unsigned char symbol; - unsigned char nbBits; -} FSE_decode_t; /* size == U32 */ - -MEM_STATIC void FSE_initDState(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD, const FSE_DTable* dt) -{ - const void* ptr = dt; - const FSE_DTableHeader* const DTableH = (const FSE_DTableHeader*)ptr; - DStatePtr->state = BIT_readBits(bitD, DTableH->tableLog); - BIT_reloadDStream(bitD); - DStatePtr->table = dt + 1; -} - -MEM_STATIC BYTE FSE_peekSymbol(const FSE_DState_t* DStatePtr) -{ - FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state]; - return DInfo.symbol; -} - -MEM_STATIC void FSE_updateState(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD) -{ - FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state]; - U32 const nbBits = DInfo.nbBits; - size_t const lowBits = BIT_readBits(bitD, nbBits); - DStatePtr->state = DInfo.newState + lowBits; -} - -MEM_STATIC BYTE FSE_decodeSymbol(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD) -{ - FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state]; - U32 const nbBits = DInfo.nbBits; - BYTE const symbol = DInfo.symbol; - size_t const lowBits = BIT_readBits(bitD, nbBits); - - DStatePtr->state = DInfo.newState + lowBits; - return symbol; -} - -/*! FSE_decodeSymbolFast() : - unsafe, only works if no symbol has a probability > 50% */ -MEM_STATIC BYTE FSE_decodeSymbolFast(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD) -{ - FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state]; - U32 const nbBits = DInfo.nbBits; - BYTE const symbol = DInfo.symbol; - size_t const lowBits = BIT_readBitsFast(bitD, nbBits); - - DStatePtr->state = DInfo.newState + lowBits; - return symbol; -} - -MEM_STATIC unsigned FSE_endOfDState(const FSE_DState_t* DStatePtr) -{ - return DStatePtr->state == 0; -} - - - -#ifndef FSE_COMMONDEFS_ONLY - -/* ************************************************************** -* Tuning parameters -****************************************************************/ -/*!MEMORY_USAGE : -* Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) -* Increasing memory usage improves compression ratio -* Reduced memory usage can improve speed, due to cache effect -* Recommended max value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */ -#ifndef FSE_MAX_MEMORY_USAGE -# define FSE_MAX_MEMORY_USAGE 14 -#endif -#ifndef FSE_DEFAULT_MEMORY_USAGE -# define FSE_DEFAULT_MEMORY_USAGE 13 -#endif -#if (FSE_DEFAULT_MEMORY_USAGE > FSE_MAX_MEMORY_USAGE) -# error "FSE_DEFAULT_MEMORY_USAGE must be <= FSE_MAX_MEMORY_USAGE" -#endif - -/*!FSE_MAX_SYMBOL_VALUE : -* Maximum symbol value authorized. -* Required for proper stack allocation */ -#ifndef FSE_MAX_SYMBOL_VALUE -# define FSE_MAX_SYMBOL_VALUE 255 -#endif - -/* ************************************************************** -* template functions type & suffix -****************************************************************/ -#define FSE_FUNCTION_TYPE BYTE -#define FSE_FUNCTION_EXTENSION -#define FSE_DECODE_TYPE FSE_decode_t - - -#endif /* !FSE_COMMONDEFS_ONLY */ - - -/* *************************************************************** -* Constants -*****************************************************************/ -#define FSE_MAX_TABLELOG (FSE_MAX_MEMORY_USAGE-2) -#define FSE_MAX_TABLESIZE (1U< FSE_TABLELOG_ABSOLUTE_MAX -# error "FSE_MAX_TABLELOG > FSE_TABLELOG_ABSOLUTE_MAX is not supported" -#endif - -#define FSE_TABLESTEP(tableSize) (((tableSize)>>1) + ((tableSize)>>3) + 3) - - -#endif /* FSE_STATIC_LINKING_ONLY */ - - -#if defined (__cplusplus) -} -#endif diff --git a/stage1/zstd/lib/common/fse_decompress.c b/stage1/zstd/lib/common/fse_decompress.c deleted file mode 100644 index a5a358015f..0000000000 --- a/stage1/zstd/lib/common/fse_decompress.c +++ /dev/null @@ -1,403 +0,0 @@ -/* ****************************************************************** - * FSE : Finite State Entropy decoder - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - Public forum : https://groups.google.com/forum/#!forum/lz4c - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ - - -/* ************************************************************** -* Includes -****************************************************************/ -#include "debug.h" /* assert */ -#include "bitstream.h" -#include "compiler.h" -#define FSE_STATIC_LINKING_ONLY -#include "fse.h" -#include "error_private.h" -#define ZSTD_DEPS_NEED_MALLOC -#include "zstd_deps.h" - - -/* ************************************************************** -* Error Management -****************************************************************/ -#define FSE_isError ERR_isError -#define FSE_STATIC_ASSERT(c) DEBUG_STATIC_ASSERT(c) /* use only *after* variable declarations */ - - -/* ************************************************************** -* Templates -****************************************************************/ -/* - designed to be included - for type-specific functions (template emulation in C) - Objective is to write these functions only once, for improved maintenance -*/ - -/* safety checks */ -#ifndef FSE_FUNCTION_EXTENSION -# error "FSE_FUNCTION_EXTENSION must be defined" -#endif -#ifndef FSE_FUNCTION_TYPE -# error "FSE_FUNCTION_TYPE must be defined" -#endif - -/* Function names */ -#define FSE_CAT(X,Y) X##Y -#define FSE_FUNCTION_NAME(X,Y) FSE_CAT(X,Y) -#define FSE_TYPE_NAME(X,Y) FSE_CAT(X,Y) - - -/* Function templates */ -FSE_DTable* FSE_createDTable (unsigned tableLog) -{ - if (tableLog > FSE_TABLELOG_ABSOLUTE_MAX) tableLog = FSE_TABLELOG_ABSOLUTE_MAX; - return (FSE_DTable*)ZSTD_malloc( FSE_DTABLE_SIZE_U32(tableLog) * sizeof (U32) ); -} - -void FSE_freeDTable (FSE_DTable* dt) -{ - ZSTD_free(dt); -} - -static size_t FSE_buildDTable_internal(FSE_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize) -{ - void* const tdPtr = dt+1; /* because *dt is unsigned, 32-bits aligned on 32-bits */ - FSE_DECODE_TYPE* const tableDecode = (FSE_DECODE_TYPE*) (tdPtr); - U16* symbolNext = (U16*)workSpace; - BYTE* spread = (BYTE*)(symbolNext + maxSymbolValue + 1); - - U32 const maxSV1 = maxSymbolValue + 1; - U32 const tableSize = 1 << tableLog; - U32 highThreshold = tableSize-1; - - /* Sanity Checks */ - if (FSE_BUILD_DTABLE_WKSP_SIZE(tableLog, maxSymbolValue) > wkspSize) return ERROR(maxSymbolValue_tooLarge); - if (maxSymbolValue > FSE_MAX_SYMBOL_VALUE) return ERROR(maxSymbolValue_tooLarge); - if (tableLog > FSE_MAX_TABLELOG) return ERROR(tableLog_tooLarge); - - /* Init, lay down lowprob symbols */ - { FSE_DTableHeader DTableH; - DTableH.tableLog = (U16)tableLog; - DTableH.fastMode = 1; - { S16 const largeLimit= (S16)(1 << (tableLog-1)); - U32 s; - for (s=0; s= largeLimit) DTableH.fastMode=0; - symbolNext[s] = normalizedCounter[s]; - } } } - ZSTD_memcpy(dt, &DTableH, sizeof(DTableH)); - } - - /* Spread symbols */ - if (highThreshold == tableSize - 1) { - size_t const tableMask = tableSize-1; - size_t const step = FSE_TABLESTEP(tableSize); - /* First lay down the symbols in order. - * We use a uint64_t to lay down 8 bytes at a time. This reduces branch - * misses since small blocks generally have small table logs, so nearly - * all symbols have counts <= 8. We ensure we have 8 bytes at the end of - * our buffer to handle the over-write. - */ - { - U64 const add = 0x0101010101010101ull; - size_t pos = 0; - U64 sv = 0; - U32 s; - for (s=0; s highThreshold) position = (position + step) & tableMask; /* lowprob area */ - } } - if (position!=0) return ERROR(GENERIC); /* position must reach all cells once, otherwise normalizedCounter is incorrect */ - } - - /* Build Decoding table */ - { U32 u; - for (u=0; utableLog = 0; - DTableH->fastMode = 0; - - cell->newState = 0; - cell->symbol = symbolValue; - cell->nbBits = 0; - - return 0; -} - - -size_t FSE_buildDTable_raw (FSE_DTable* dt, unsigned nbBits) -{ - void* ptr = dt; - FSE_DTableHeader* const DTableH = (FSE_DTableHeader*)ptr; - void* dPtr = dt + 1; - FSE_decode_t* const dinfo = (FSE_decode_t*)dPtr; - const unsigned tableSize = 1 << nbBits; - const unsigned tableMask = tableSize - 1; - const unsigned maxSV1 = tableMask+1; - unsigned s; - - /* Sanity checks */ - if (nbBits < 1) return ERROR(GENERIC); /* min size */ - - /* Build Decoding Table */ - DTableH->tableLog = (U16)nbBits; - DTableH->fastMode = 1; - for (s=0; s sizeof(bitD.bitContainer)*8) /* This test must be static */ - BIT_reloadDStream(&bitD); - - op[1] = FSE_GETSYMBOL(&state2); - - if (FSE_MAX_TABLELOG*4+7 > sizeof(bitD.bitContainer)*8) /* This test must be static */ - { if (BIT_reloadDStream(&bitD) > BIT_DStream_unfinished) { op+=2; break; } } - - op[2] = FSE_GETSYMBOL(&state1); - - if (FSE_MAX_TABLELOG*2+7 > sizeof(bitD.bitContainer)*8) /* This test must be static */ - BIT_reloadDStream(&bitD); - - op[3] = FSE_GETSYMBOL(&state2); - } - - /* tail */ - /* note : BIT_reloadDStream(&bitD) >= FSE_DStream_partiallyFilled; Ends at exactly BIT_DStream_completed */ - while (1) { - if (op>(omax-2)) return ERROR(dstSize_tooSmall); - *op++ = FSE_GETSYMBOL(&state1); - if (BIT_reloadDStream(&bitD)==BIT_DStream_overflow) { - *op++ = FSE_GETSYMBOL(&state2); - break; - } - - if (op>(omax-2)) return ERROR(dstSize_tooSmall); - *op++ = FSE_GETSYMBOL(&state2); - if (BIT_reloadDStream(&bitD)==BIT_DStream_overflow) { - *op++ = FSE_GETSYMBOL(&state1); - break; - } } - - return op-ostart; -} - - -size_t FSE_decompress_usingDTable(void* dst, size_t originalSize, - const void* cSrc, size_t cSrcSize, - const FSE_DTable* dt) -{ - const void* ptr = dt; - const FSE_DTableHeader* DTableH = (const FSE_DTableHeader*)ptr; - const U32 fastMode = DTableH->fastMode; - - /* select fast mode (static) */ - if (fastMode) return FSE_decompress_usingDTable_generic(dst, originalSize, cSrc, cSrcSize, dt, 1); - return FSE_decompress_usingDTable_generic(dst, originalSize, cSrc, cSrcSize, dt, 0); -} - - -size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize) -{ - return FSE_decompress_wksp_bmi2(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, /* bmi2 */ 0); -} - -typedef struct { - short ncount[FSE_MAX_SYMBOL_VALUE + 1]; - FSE_DTable dtable[1]; /* Dynamically sized */ -} FSE_DecompressWksp; - - -FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body( - void* dst, size_t dstCapacity, - const void* cSrc, size_t cSrcSize, - unsigned maxLog, void* workSpace, size_t wkspSize, - int bmi2) -{ - const BYTE* const istart = (const BYTE*)cSrc; - const BYTE* ip = istart; - unsigned tableLog; - unsigned maxSymbolValue = FSE_MAX_SYMBOL_VALUE; - FSE_DecompressWksp* const wksp = (FSE_DecompressWksp*)workSpace; - - DEBUG_STATIC_ASSERT((FSE_MAX_SYMBOL_VALUE + 1) % 2 == 0); - if (wkspSize < sizeof(*wksp)) return ERROR(GENERIC); - - /* normal FSE decoding mode */ - { - size_t const NCountLength = FSE_readNCount_bmi2(wksp->ncount, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2); - if (FSE_isError(NCountLength)) return NCountLength; - if (tableLog > maxLog) return ERROR(tableLog_tooLarge); - assert(NCountLength <= cSrcSize); - ip += NCountLength; - cSrcSize -= NCountLength; - } - - if (FSE_DECOMPRESS_WKSP_SIZE(tableLog, maxSymbolValue) > wkspSize) return ERROR(tableLog_tooLarge); - workSpace = wksp->dtable + FSE_DTABLE_SIZE_U32(tableLog); - wkspSize -= sizeof(*wksp) + FSE_DTABLE_SIZE(tableLog); - - CHECK_F( FSE_buildDTable_internal(wksp->dtable, wksp->ncount, maxSymbolValue, tableLog, workSpace, wkspSize) ); - - { - const void* ptr = wksp->dtable; - const FSE_DTableHeader* DTableH = (const FSE_DTableHeader*)ptr; - const U32 fastMode = DTableH->fastMode; - - /* select fast mode (static) */ - if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 1); - return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 0); - } -} - -/* Avoids the FORCE_INLINE of the _body() function. */ -static size_t FSE_decompress_wksp_body_default(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize) -{ - return FSE_decompress_wksp_body(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, 0); -} - -#if DYNAMIC_BMI2 -BMI2_TARGET_ATTRIBUTE static size_t FSE_decompress_wksp_body_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize) -{ - return FSE_decompress_wksp_body(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, 1); -} -#endif - -size_t FSE_decompress_wksp_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize, int bmi2) -{ -#if DYNAMIC_BMI2 - if (bmi2) { - return FSE_decompress_wksp_body_bmi2(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize); - } -#endif - (void)bmi2; - return FSE_decompress_wksp_body_default(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize); -} - - -typedef FSE_DTable DTable_max_t[FSE_DTABLE_SIZE_U32(FSE_MAX_TABLELOG)]; - -#ifndef ZSTD_NO_UNUSED_FUNCTIONS -size_t FSE_buildDTable(FSE_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog) { - U32 wksp[FSE_BUILD_DTABLE_WKSP_SIZE_U32(FSE_TABLELOG_ABSOLUTE_MAX, FSE_MAX_SYMBOL_VALUE)]; - return FSE_buildDTable_wksp(dt, normalizedCounter, maxSymbolValue, tableLog, wksp, sizeof(wksp)); -} - -size_t FSE_decompress(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize) -{ - /* Static analyzer seems unable to understand this table will be properly initialized later */ - U32 wksp[FSE_DECOMPRESS_WKSP_SIZE_U32(FSE_MAX_TABLELOG, FSE_MAX_SYMBOL_VALUE)]; - return FSE_decompress_wksp(dst, dstCapacity, cSrc, cSrcSize, FSE_MAX_TABLELOG, wksp, sizeof(wksp)); -} -#endif - - -#endif /* FSE_COMMONDEFS_ONLY */ diff --git a/stage1/zstd/lib/common/huf.h b/stage1/zstd/lib/common/huf.h deleted file mode 100644 index 85518481ec..0000000000 --- a/stage1/zstd/lib/common/huf.h +++ /dev/null @@ -1,364 +0,0 @@ -/* ****************************************************************** - * huff0 huffman codec, - * part of Finite State Entropy library - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ - -#if defined (__cplusplus) -extern "C" { -#endif - -#ifndef HUF_H_298734234 -#define HUF_H_298734234 - -/* *** Dependencies *** */ -#include "zstd_deps.h" /* size_t */ - - -/* *** library symbols visibility *** */ -/* Note : when linking with -fvisibility=hidden on gcc, or by default on Visual, - * HUF symbols remain "private" (internal symbols for library only). - * Set macro FSE_DLL_EXPORT to 1 if you want HUF symbols visible on DLL interface */ -#if defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) && defined(__GNUC__) && (__GNUC__ >= 4) -# define HUF_PUBLIC_API __attribute__ ((visibility ("default"))) -#elif defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) /* Visual expected */ -# define HUF_PUBLIC_API __declspec(dllexport) -#elif defined(FSE_DLL_IMPORT) && (FSE_DLL_IMPORT==1) -# define HUF_PUBLIC_API __declspec(dllimport) /* not required, just to generate faster code (saves a function pointer load from IAT and an indirect jump) */ -#else -# define HUF_PUBLIC_API -#endif - - -/* ========================== */ -/* *** simple functions *** */ -/* ========================== */ - -/** HUF_compress() : - * Compress content from buffer 'src', of size 'srcSize', into buffer 'dst'. - * 'dst' buffer must be already allocated. - * Compression runs faster if `dstCapacity` >= HUF_compressBound(srcSize). - * `srcSize` must be <= `HUF_BLOCKSIZE_MAX` == 128 KB. - * @return : size of compressed data (<= `dstCapacity`). - * Special values : if return == 0, srcData is not compressible => Nothing is stored within dst !!! - * if HUF_isError(return), compression failed (more details using HUF_getErrorName()) - */ -HUF_PUBLIC_API size_t HUF_compress(void* dst, size_t dstCapacity, - const void* src, size_t srcSize); - -/** HUF_decompress() : - * Decompress HUF data from buffer 'cSrc', of size 'cSrcSize', - * into already allocated buffer 'dst', of minimum size 'dstSize'. - * `originalSize` : **must** be the ***exact*** size of original (uncompressed) data. - * Note : in contrast with FSE, HUF_decompress can regenerate - * RLE (cSrcSize==1) and uncompressed (cSrcSize==dstSize) data, - * because it knows size to regenerate (originalSize). - * @return : size of regenerated data (== originalSize), - * or an error code, which can be tested using HUF_isError() - */ -HUF_PUBLIC_API size_t HUF_decompress(void* dst, size_t originalSize, - const void* cSrc, size_t cSrcSize); - - -/* *** Tool functions *** */ -#define HUF_BLOCKSIZE_MAX (128 * 1024) /**< maximum input size for a single block compressed with HUF_compress */ -HUF_PUBLIC_API size_t HUF_compressBound(size_t size); /**< maximum compressed size (worst case) */ - -/* Error Management */ -HUF_PUBLIC_API unsigned HUF_isError(size_t code); /**< tells if a return value is an error code */ -HUF_PUBLIC_API const char* HUF_getErrorName(size_t code); /**< provides error code string (useful for debugging) */ - - -/* *** Advanced function *** */ - -/** HUF_compress2() : - * Same as HUF_compress(), but offers control over `maxSymbolValue` and `tableLog`. - * `maxSymbolValue` must be <= HUF_SYMBOLVALUE_MAX . - * `tableLog` must be `<= HUF_TABLELOG_MAX` . */ -HUF_PUBLIC_API size_t HUF_compress2 (void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - unsigned maxSymbolValue, unsigned tableLog); - -/** HUF_compress4X_wksp() : - * Same as HUF_compress2(), but uses externally allocated `workSpace`. - * `workspace` must be at least as large as HUF_WORKSPACE_SIZE */ -#define HUF_WORKSPACE_SIZE ((8 << 10) + 512 /* sorting scratch space */) -#define HUF_WORKSPACE_SIZE_U64 (HUF_WORKSPACE_SIZE / sizeof(U64)) -HUF_PUBLIC_API size_t HUF_compress4X_wksp (void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - unsigned maxSymbolValue, unsigned tableLog, - void* workSpace, size_t wkspSize); - -#endif /* HUF_H_298734234 */ - -/* ****************************************************************** - * WARNING !! - * The following section contains advanced and experimental definitions - * which shall never be used in the context of a dynamic library, - * because they are not guaranteed to remain stable in the future. - * Only consider them in association with static linking. - * *****************************************************************/ -#if defined(HUF_STATIC_LINKING_ONLY) && !defined(HUF_H_HUF_STATIC_LINKING_ONLY) -#define HUF_H_HUF_STATIC_LINKING_ONLY - -/* *** Dependencies *** */ -#include "mem.h" /* U32 */ -#define FSE_STATIC_LINKING_ONLY -#include "fse.h" - - -/* *** Constants *** */ -#define HUF_TABLELOG_MAX 12 /* max runtime value of tableLog (due to static allocation); can be modified up to HUF_TABLELOG_ABSOLUTEMAX */ -#define HUF_TABLELOG_DEFAULT 11 /* default tableLog value when none specified */ -#define HUF_SYMBOLVALUE_MAX 255 - -#define HUF_TABLELOG_ABSOLUTEMAX 12 /* absolute limit of HUF_MAX_TABLELOG. Beyond that value, code does not work */ -#if (HUF_TABLELOG_MAX > HUF_TABLELOG_ABSOLUTEMAX) -# error "HUF_TABLELOG_MAX is too large !" -#endif - - -/* **************************************** -* Static allocation -******************************************/ -/* HUF buffer bounds */ -#define HUF_CTABLEBOUND 129 -#define HUF_BLOCKBOUND(size) (size + (size>>8) + 8) /* only true when incompressible is pre-filtered with fast heuristic */ -#define HUF_COMPRESSBOUND(size) (HUF_CTABLEBOUND + HUF_BLOCKBOUND(size)) /* Macro version, useful for static allocation */ - -/* static allocation of HUF's Compression Table */ -/* this is a private definition, just exposed for allocation and strict aliasing purpose. never EVER access its members directly */ -typedef size_t HUF_CElt; /* consider it an incomplete type */ -#define HUF_CTABLE_SIZE_ST(maxSymbolValue) ((maxSymbolValue)+2) /* Use tables of size_t, for proper alignment */ -#define HUF_CTABLE_SIZE(maxSymbolValue) (HUF_CTABLE_SIZE_ST(maxSymbolValue) * sizeof(size_t)) -#define HUF_CREATE_STATIC_CTABLE(name, maxSymbolValue) \ - HUF_CElt name[HUF_CTABLE_SIZE_ST(maxSymbolValue)] /* no final ; */ - -/* static allocation of HUF's DTable */ -typedef U32 HUF_DTable; -#define HUF_DTABLE_SIZE(maxTableLog) (1 + (1<<(maxTableLog))) -#define HUF_CREATE_STATIC_DTABLEX1(DTable, maxTableLog) \ - HUF_DTable DTable[HUF_DTABLE_SIZE((maxTableLog)-1)] = { ((U32)((maxTableLog)-1) * 0x01000001) } -#define HUF_CREATE_STATIC_DTABLEX2(DTable, maxTableLog) \ - HUF_DTable DTable[HUF_DTABLE_SIZE(maxTableLog)] = { ((U32)(maxTableLog) * 0x01000001) } - - -/* **************************************** -* Advanced decompression functions -******************************************/ -size_t HUF_decompress4X1 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< single-symbol decoder */ -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_decompress4X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< double-symbols decoder */ -#endif - -size_t HUF_decompress4X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< decodes RLE and uncompressed */ -size_t HUF_decompress4X_hufOnly(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< considers RLE and uncompressed as errors */ -size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize); /**< considers RLE and uncompressed as errors */ -size_t HUF_decompress4X1_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< single-symbol decoder */ -size_t HUF_decompress4X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize); /**< single-symbol decoder */ -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_decompress4X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< double-symbols decoder */ -size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize); /**< double-symbols decoder */ -#endif - - -/* **************************************** - * HUF detailed API - * ****************************************/ - -/*! HUF_compress() does the following: - * 1. count symbol occurrence from source[] into table count[] using FSE_count() (exposed within "fse.h") - * 2. (optional) refine tableLog using HUF_optimalTableLog() - * 3. build Huffman table from count using HUF_buildCTable() - * 4. save Huffman table to memory buffer using HUF_writeCTable() - * 5. encode the data stream using HUF_compress4X_usingCTable() - * - * The following API allows targeting specific sub-functions for advanced tasks. - * For example, it's possible to compress several blocks using the same 'CTable', - * or to save and regenerate 'CTable' using external methods. - */ -unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue); -size_t HUF_buildCTable (HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue, unsigned maxNbBits); /* @return : maxNbBits; CTable and count can overlap. In which case, CTable will overwrite count content */ -size_t HUF_writeCTable (void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog); -size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog, void* workspace, size_t workspaceSize); -size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable); -size_t HUF_compress4X_usingCTable_bmi2(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int bmi2); -size_t HUF_estimateCompressedSize(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue); -int HUF_validateCTable(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue); - -typedef enum { - HUF_repeat_none, /**< Cannot use the previous table */ - HUF_repeat_check, /**< Can use the previous table but it must be checked. Note : The previous table must have been constructed by HUF_compress{1, 4}X_repeat */ - HUF_repeat_valid /**< Can use the previous table and it is assumed to be valid */ - } HUF_repeat; -/** HUF_compress4X_repeat() : - * Same as HUF_compress4X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none. - * If it uses hufTable it does not modify hufTable or repeat. - * If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used. - * If preferRepeat then the old table will always be used if valid. - * If suspectUncompressible then some sampling checks will be run to potentially skip huffman coding */ -size_t HUF_compress4X_repeat(void* dst, size_t dstSize, - const void* src, size_t srcSize, - unsigned maxSymbolValue, unsigned tableLog, - void* workSpace, size_t wkspSize, /**< `workSpace` must be aligned on 4-bytes boundaries, `wkspSize` must be >= HUF_WORKSPACE_SIZE */ - HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2, unsigned suspectUncompressible); - -/** HUF_buildCTable_wksp() : - * Same as HUF_buildCTable(), but using externally allocated scratch buffer. - * `workSpace` must be aligned on 4-bytes boundaries, and its size must be >= HUF_CTABLE_WORKSPACE_SIZE. - */ -#define HUF_CTABLE_WORKSPACE_SIZE_U32 (2*HUF_SYMBOLVALUE_MAX +1 +1) -#define HUF_CTABLE_WORKSPACE_SIZE (HUF_CTABLE_WORKSPACE_SIZE_U32 * sizeof(unsigned)) -size_t HUF_buildCTable_wksp (HUF_CElt* tree, - const unsigned* count, U32 maxSymbolValue, U32 maxNbBits, - void* workSpace, size_t wkspSize); - -/*! HUF_readStats() : - * Read compact Huffman tree, saved by HUF_writeCTable(). - * `huffWeight` is destination buffer. - * @return : size read from `src` , or an error Code . - * Note : Needed by HUF_readCTable() and HUF_readDTableXn() . */ -size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, - U32* rankStats, U32* nbSymbolsPtr, U32* tableLogPtr, - const void* src, size_t srcSize); - -/*! HUF_readStats_wksp() : - * Same as HUF_readStats() but takes an external workspace which must be - * 4-byte aligned and its size must be >= HUF_READ_STATS_WORKSPACE_SIZE. - * If the CPU has BMI2 support, pass bmi2=1, otherwise pass bmi2=0. - */ -#define HUF_READ_STATS_WORKSPACE_SIZE_U32 FSE_DECOMPRESS_WKSP_SIZE_U32(6, HUF_TABLELOG_MAX-1) -#define HUF_READ_STATS_WORKSPACE_SIZE (HUF_READ_STATS_WORKSPACE_SIZE_U32 * sizeof(unsigned)) -size_t HUF_readStats_wksp(BYTE* huffWeight, size_t hwSize, - U32* rankStats, U32* nbSymbolsPtr, U32* tableLogPtr, - const void* src, size_t srcSize, - void* workspace, size_t wkspSize, - int bmi2); - -/** HUF_readCTable() : - * Loading a CTable saved with HUF_writeCTable() */ -size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void* src, size_t srcSize, unsigned *hasZeroWeights); - -/** HUF_getNbBitsFromCTable() : - * Read nbBits from CTable symbolTable, for symbol `symbolValue` presumed <= HUF_SYMBOLVALUE_MAX - * Note 1 : is not inlined, as HUF_CElt definition is private */ -U32 HUF_getNbBitsFromCTable(const HUF_CElt* symbolTable, U32 symbolValue); - -/* - * HUF_decompress() does the following: - * 1. select the decompression algorithm (X1, X2) based on pre-computed heuristics - * 2. build Huffman table from save, using HUF_readDTableX?() - * 3. decode 1 or 4 segments in parallel using HUF_decompress?X?_usingDTable() - */ - -/** HUF_selectDecoder() : - * Tells which decoder is likely to decode faster, - * based on a set of pre-computed metrics. - * @return : 0==HUF_decompress4X1, 1==HUF_decompress4X2 . - * Assumption : 0 < dstSize <= 128 KB */ -U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize); - -/** - * The minimum workspace size for the `workSpace` used in - * HUF_readDTableX1_wksp() and HUF_readDTableX2_wksp(). - * - * The space used depends on HUF_TABLELOG_MAX, ranging from ~1500 bytes when - * HUF_TABLE_LOG_MAX=12 to ~1850 bytes when HUF_TABLE_LOG_MAX=15. - * Buffer overflow errors may potentially occur if code modifications result in - * a required workspace size greater than that specified in the following - * macro. - */ -#define HUF_DECOMPRESS_WORKSPACE_SIZE ((2 << 10) + (1 << 9)) -#define HUF_DECOMPRESS_WORKSPACE_SIZE_U32 (HUF_DECOMPRESS_WORKSPACE_SIZE / sizeof(U32)) - -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_readDTableX1 (HUF_DTable* DTable, const void* src, size_t srcSize); -size_t HUF_readDTableX1_wksp (HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize); -#endif -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_readDTableX2 (HUF_DTable* DTable, const void* src, size_t srcSize); -size_t HUF_readDTableX2_wksp (HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize); -#endif - -size_t HUF_decompress4X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable); -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_decompress4X1_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable); -#endif -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_decompress4X2_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable); -#endif - - -/* ====================== */ -/* single stream variants */ -/* ====================== */ - -size_t HUF_compress1X (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog); -size_t HUF_compress1X_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); /**< `workSpace` must be a table of at least HUF_WORKSPACE_SIZE_U64 U64 */ -size_t HUF_compress1X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable); -size_t HUF_compress1X_usingCTable_bmi2(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int bmi2); -/** HUF_compress1X_repeat() : - * Same as HUF_compress1X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none. - * If it uses hufTable it does not modify hufTable or repeat. - * If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used. - * If preferRepeat then the old table will always be used if valid. - * If suspectUncompressible then some sampling checks will be run to potentially skip huffman coding */ -size_t HUF_compress1X_repeat(void* dst, size_t dstSize, - const void* src, size_t srcSize, - unsigned maxSymbolValue, unsigned tableLog, - void* workSpace, size_t wkspSize, /**< `workSpace` must be aligned on 4-bytes boundaries, `wkspSize` must be >= HUF_WORKSPACE_SIZE */ - HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2, unsigned suspectUncompressible); - -size_t HUF_decompress1X1 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /* single-symbol decoder */ -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_decompress1X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /* double-symbol decoder */ -#endif - -size_t HUF_decompress1X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); -size_t HUF_decompress1X_DCtx_wksp (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize); -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_decompress1X1_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< single-symbol decoder */ -size_t HUF_decompress1X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize); /**< single-symbol decoder */ -#endif -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_decompress1X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /**< double-symbols decoder */ -size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize); /**< double-symbols decoder */ -#endif - -size_t HUF_decompress1X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable); /**< automatic selection of sing or double symbol decoder, based on DTable */ -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_decompress1X1_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable); -#endif -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_decompress1X2_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable); -#endif - -/* BMI2 variants. - * If the CPU has BMI2 support, pass bmi2=1, otherwise pass bmi2=0. - */ -size_t HUF_decompress1X_usingDTable_bmi2(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int bmi2); -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_decompress1X1_DCtx_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int bmi2); -#endif -size_t HUF_decompress4X_usingDTable_bmi2(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int bmi2); -size_t HUF_decompress4X_hufOnly_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int bmi2); -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_readDTableX1_wksp_bmi2(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int bmi2); -#endif -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_readDTableX2_wksp_bmi2(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int bmi2); -#endif - -#endif /* HUF_STATIC_LINKING_ONLY */ - -#if defined (__cplusplus) -} -#endif diff --git a/stage1/zstd/lib/common/mem.h b/stage1/zstd/lib/common/mem.h deleted file mode 100644 index 85581c3847..0000000000 --- a/stage1/zstd/lib/common/mem.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef MEM_H_MODULE -#define MEM_H_MODULE - -#if defined (__cplusplus) -extern "C" { -#endif - -/*-**************************************** -* Dependencies -******************************************/ -#include /* size_t, ptrdiff_t */ -#include "compiler.h" /* __has_builtin */ -#include "debug.h" /* DEBUG_STATIC_ASSERT */ -#include "zstd_deps.h" /* ZSTD_memcpy */ - - -/*-**************************************** -* Compiler specifics -******************************************/ -#if defined(_MSC_VER) /* Visual Studio */ -# include /* _byteswap_ulong */ -# include /* _byteswap_* */ -#endif -#if defined(__GNUC__) -# define MEM_STATIC static __inline __attribute__((unused)) -#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) -# define MEM_STATIC static inline -#elif defined(_MSC_VER) -# define MEM_STATIC static __inline -#else -# define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */ -#endif - -/*-************************************************************** -* Basic Types -*****************************************************************/ -#if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) -# if defined(_AIX) -# include -# else -# include /* intptr_t */ -# endif - typedef uint8_t BYTE; - typedef uint8_t U8; - typedef int8_t S8; - typedef uint16_t U16; - typedef int16_t S16; - typedef uint32_t U32; - typedef int32_t S32; - typedef uint64_t U64; - typedef int64_t S64; -#else -# include -#if CHAR_BIT != 8 -# error "this implementation requires char to be exactly 8-bit type" -#endif - typedef unsigned char BYTE; - typedef unsigned char U8; - typedef signed char S8; -#if USHRT_MAX != 65535 -# error "this implementation requires short to be exactly 16-bit type" -#endif - typedef unsigned short U16; - typedef signed short S16; -#if UINT_MAX != 4294967295 -# error "this implementation requires int to be exactly 32-bit type" -#endif - typedef unsigned int U32; - typedef signed int S32; -/* note : there are no limits defined for long long type in C90. - * limits exist in C99, however, in such case, is preferred */ - typedef unsigned long long U64; - typedef signed long long S64; -#endif - - -/*-************************************************************** -* Memory I/O API -*****************************************************************/ -/*=== Static platform detection ===*/ -MEM_STATIC unsigned MEM_32bits(void); -MEM_STATIC unsigned MEM_64bits(void); -MEM_STATIC unsigned MEM_isLittleEndian(void); - -/*=== Native unaligned read/write ===*/ -MEM_STATIC U16 MEM_read16(const void* memPtr); -MEM_STATIC U32 MEM_read32(const void* memPtr); -MEM_STATIC U64 MEM_read64(const void* memPtr); -MEM_STATIC size_t MEM_readST(const void* memPtr); - -MEM_STATIC void MEM_write16(void* memPtr, U16 value); -MEM_STATIC void MEM_write32(void* memPtr, U32 value); -MEM_STATIC void MEM_write64(void* memPtr, U64 value); - -/*=== Little endian unaligned read/write ===*/ -MEM_STATIC U16 MEM_readLE16(const void* memPtr); -MEM_STATIC U32 MEM_readLE24(const void* memPtr); -MEM_STATIC U32 MEM_readLE32(const void* memPtr); -MEM_STATIC U64 MEM_readLE64(const void* memPtr); -MEM_STATIC size_t MEM_readLEST(const void* memPtr); - -MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val); -MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val); -MEM_STATIC void MEM_writeLE32(void* memPtr, U32 val32); -MEM_STATIC void MEM_writeLE64(void* memPtr, U64 val64); -MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val); - -/*=== Big endian unaligned read/write ===*/ -MEM_STATIC U32 MEM_readBE32(const void* memPtr); -MEM_STATIC U64 MEM_readBE64(const void* memPtr); -MEM_STATIC size_t MEM_readBEST(const void* memPtr); - -MEM_STATIC void MEM_writeBE32(void* memPtr, U32 val32); -MEM_STATIC void MEM_writeBE64(void* memPtr, U64 val64); -MEM_STATIC void MEM_writeBEST(void* memPtr, size_t val); - -/*=== Byteswap ===*/ -MEM_STATIC U32 MEM_swap32(U32 in); -MEM_STATIC U64 MEM_swap64(U64 in); -MEM_STATIC size_t MEM_swapST(size_t in); - - -/*-************************************************************** -* Memory I/O Implementation -*****************************************************************/ -/* MEM_FORCE_MEMORY_ACCESS : - * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable. - * Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal. - * The below switch allow to select different access method for improved performance. - * Method 0 (default) : use `memcpy()`. Safe and portable. - * Method 1 : `__packed` statement. It depends on compiler extension (i.e., not portable). - * This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`. - * Method 2 : direct access. This method is portable but violate C standard. - * It can generate buggy code on targets depending on alignment. - * In some circumstances, it's the only known way to get the most performance (i.e. GCC + ARMv6) - * See http://fastcompression.blogspot.fr/2015/08/accessing-unaligned-memory.html for details. - * Prefer these methods in priority order (0 > 1 > 2) - */ -#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ -# if defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__) -# define MEM_FORCE_MEMORY_ACCESS 1 -# endif -#endif - -MEM_STATIC unsigned MEM_32bits(void) { return sizeof(size_t)==4; } -MEM_STATIC unsigned MEM_64bits(void) { return sizeof(size_t)==8; } - -MEM_STATIC unsigned MEM_isLittleEndian(void) -{ -#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) - return 1; -#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) - return 0; -#elif defined(__clang__) && __LITTLE_ENDIAN__ - return 1; -#elif defined(__clang__) && __BIG_ENDIAN__ - return 0; -#elif defined(_MSC_VER) && (_M_AMD64 || _M_IX86) - return 1; -#elif defined(__DMC__) && defined(_M_IX86) - return 1; -#else - const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */ - return one.c[0]; -#endif -} - -#if defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==2) - -/* violates C standard, by lying on structure alignment. -Only use if no other choice to achieve best performance on target platform */ -MEM_STATIC U16 MEM_read16(const void* memPtr) { return *(const U16*) memPtr; } -MEM_STATIC U32 MEM_read32(const void* memPtr) { return *(const U32*) memPtr; } -MEM_STATIC U64 MEM_read64(const void* memPtr) { return *(const U64*) memPtr; } -MEM_STATIC size_t MEM_readST(const void* memPtr) { return *(const size_t*) memPtr; } - -MEM_STATIC void MEM_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; } -MEM_STATIC void MEM_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; } -MEM_STATIC void MEM_write64(void* memPtr, U64 value) { *(U64*)memPtr = value; } - -#elif defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==1) - -/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ -/* currently only defined for gcc and icc */ -#if defined(_MSC_VER) || (defined(__INTEL_COMPILER) && defined(WIN32)) - __pragma( pack(push, 1) ) - typedef struct { U16 v; } unalign16; - typedef struct { U32 v; } unalign32; - typedef struct { U64 v; } unalign64; - typedef struct { size_t v; } unalignArch; - __pragma( pack(pop) ) -#else - typedef struct { U16 v; } __attribute__((packed)) unalign16; - typedef struct { U32 v; } __attribute__((packed)) unalign32; - typedef struct { U64 v; } __attribute__((packed)) unalign64; - typedef struct { size_t v; } __attribute__((packed)) unalignArch; -#endif - -MEM_STATIC U16 MEM_read16(const void* ptr) { return ((const unalign16*)ptr)->v; } -MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign32*)ptr)->v; } -MEM_STATIC U64 MEM_read64(const void* ptr) { return ((const unalign64*)ptr)->v; } -MEM_STATIC size_t MEM_readST(const void* ptr) { return ((const unalignArch*)ptr)->v; } - -MEM_STATIC void MEM_write16(void* memPtr, U16 value) { ((unalign16*)memPtr)->v = value; } -MEM_STATIC void MEM_write32(void* memPtr, U32 value) { ((unalign32*)memPtr)->v = value; } -MEM_STATIC void MEM_write64(void* memPtr, U64 value) { ((unalign64*)memPtr)->v = value; } - -#else - -/* default method, safe and standard. - can sometimes prove slower */ - -MEM_STATIC U16 MEM_read16(const void* memPtr) -{ - U16 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val; -} - -MEM_STATIC U32 MEM_read32(const void* memPtr) -{ - U32 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val; -} - -MEM_STATIC U64 MEM_read64(const void* memPtr) -{ - U64 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val; -} - -MEM_STATIC size_t MEM_readST(const void* memPtr) -{ - size_t val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val; -} - -MEM_STATIC void MEM_write16(void* memPtr, U16 value) -{ - ZSTD_memcpy(memPtr, &value, sizeof(value)); -} - -MEM_STATIC void MEM_write32(void* memPtr, U32 value) -{ - ZSTD_memcpy(memPtr, &value, sizeof(value)); -} - -MEM_STATIC void MEM_write64(void* memPtr, U64 value) -{ - ZSTD_memcpy(memPtr, &value, sizeof(value)); -} - -#endif /* MEM_FORCE_MEMORY_ACCESS */ - -MEM_STATIC U32 MEM_swap32(U32 in) -{ -#if defined(_MSC_VER) /* Visual Studio */ - return _byteswap_ulong(in); -#elif (defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)) \ - || (defined(__clang__) && __has_builtin(__builtin_bswap32)) - return __builtin_bswap32(in); -#else - return ((in << 24) & 0xff000000 ) | - ((in << 8) & 0x00ff0000 ) | - ((in >> 8) & 0x0000ff00 ) | - ((in >> 24) & 0x000000ff ); -#endif -} - -MEM_STATIC U64 MEM_swap64(U64 in) -{ -#if defined(_MSC_VER) /* Visual Studio */ - return _byteswap_uint64(in); -#elif (defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)) \ - || (defined(__clang__) && __has_builtin(__builtin_bswap64)) - return __builtin_bswap64(in); -#else - return ((in << 56) & 0xff00000000000000ULL) | - ((in << 40) & 0x00ff000000000000ULL) | - ((in << 24) & 0x0000ff0000000000ULL) | - ((in << 8) & 0x000000ff00000000ULL) | - ((in >> 8) & 0x00000000ff000000ULL) | - ((in >> 24) & 0x0000000000ff0000ULL) | - ((in >> 40) & 0x000000000000ff00ULL) | - ((in >> 56) & 0x00000000000000ffULL); -#endif -} - -MEM_STATIC size_t MEM_swapST(size_t in) -{ - if (MEM_32bits()) - return (size_t)MEM_swap32((U32)in); - else - return (size_t)MEM_swap64((U64)in); -} - -/*=== Little endian r/w ===*/ - -MEM_STATIC U16 MEM_readLE16(const void* memPtr) -{ - if (MEM_isLittleEndian()) - return MEM_read16(memPtr); - else { - const BYTE* p = (const BYTE*)memPtr; - return (U16)(p[0] + (p[1]<<8)); - } -} - -MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val) -{ - if (MEM_isLittleEndian()) { - MEM_write16(memPtr, val); - } else { - BYTE* p = (BYTE*)memPtr; - p[0] = (BYTE)val; - p[1] = (BYTE)(val>>8); - } -} - -MEM_STATIC U32 MEM_readLE24(const void* memPtr) -{ - return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16); -} - -MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val) -{ - MEM_writeLE16(memPtr, (U16)val); - ((BYTE*)memPtr)[2] = (BYTE)(val>>16); -} - -MEM_STATIC U32 MEM_readLE32(const void* memPtr) -{ - if (MEM_isLittleEndian()) - return MEM_read32(memPtr); - else - return MEM_swap32(MEM_read32(memPtr)); -} - -MEM_STATIC void MEM_writeLE32(void* memPtr, U32 val32) -{ - if (MEM_isLittleEndian()) - MEM_write32(memPtr, val32); - else - MEM_write32(memPtr, MEM_swap32(val32)); -} - -MEM_STATIC U64 MEM_readLE64(const void* memPtr) -{ - if (MEM_isLittleEndian()) - return MEM_read64(memPtr); - else - return MEM_swap64(MEM_read64(memPtr)); -} - -MEM_STATIC void MEM_writeLE64(void* memPtr, U64 val64) -{ - if (MEM_isLittleEndian()) - MEM_write64(memPtr, val64); - else - MEM_write64(memPtr, MEM_swap64(val64)); -} - -MEM_STATIC size_t MEM_readLEST(const void* memPtr) -{ - if (MEM_32bits()) - return (size_t)MEM_readLE32(memPtr); - else - return (size_t)MEM_readLE64(memPtr); -} - -MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val) -{ - if (MEM_32bits()) - MEM_writeLE32(memPtr, (U32)val); - else - MEM_writeLE64(memPtr, (U64)val); -} - -/*=== Big endian r/w ===*/ - -MEM_STATIC U32 MEM_readBE32(const void* memPtr) -{ - if (MEM_isLittleEndian()) - return MEM_swap32(MEM_read32(memPtr)); - else - return MEM_read32(memPtr); -} - -MEM_STATIC void MEM_writeBE32(void* memPtr, U32 val32) -{ - if (MEM_isLittleEndian()) - MEM_write32(memPtr, MEM_swap32(val32)); - else - MEM_write32(memPtr, val32); -} - -MEM_STATIC U64 MEM_readBE64(const void* memPtr) -{ - if (MEM_isLittleEndian()) - return MEM_swap64(MEM_read64(memPtr)); - else - return MEM_read64(memPtr); -} - -MEM_STATIC void MEM_writeBE64(void* memPtr, U64 val64) -{ - if (MEM_isLittleEndian()) - MEM_write64(memPtr, MEM_swap64(val64)); - else - MEM_write64(memPtr, val64); -} - -MEM_STATIC size_t MEM_readBEST(const void* memPtr) -{ - if (MEM_32bits()) - return (size_t)MEM_readBE32(memPtr); - else - return (size_t)MEM_readBE64(memPtr); -} - -MEM_STATIC void MEM_writeBEST(void* memPtr, size_t val) -{ - if (MEM_32bits()) - MEM_writeBE32(memPtr, (U32)val); - else - MEM_writeBE64(memPtr, (U64)val); -} - -/* code only tested on 32 and 64 bits systems */ -MEM_STATIC void MEM_check(void) { DEBUG_STATIC_ASSERT((sizeof(size_t)==4) || (sizeof(size_t)==8)); } - - -#if defined (__cplusplus) -} -#endif - -#endif /* MEM_H_MODULE */ diff --git a/stage1/zstd/lib/common/pool.c b/stage1/zstd/lib/common/pool.c deleted file mode 100644 index 2e37cdd73c..0000000000 --- a/stage1/zstd/lib/common/pool.c +++ /dev/null @@ -1,355 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - - -/* ====== Dependencies ======= */ -#include "zstd_deps.h" /* size_t */ -#include "debug.h" /* assert */ -#include "zstd_internal.h" /* ZSTD_customMalloc, ZSTD_customFree */ -#include "pool.h" - -/* ====== Compiler specifics ====== */ -#if defined(_MSC_VER) -# pragma warning(disable : 4204) /* disable: C4204: non-constant aggregate initializer */ -#endif - - -#ifdef ZSTD_MULTITHREAD - -#include "threading.h" /* pthread adaptation */ - -/* A job is a function and an opaque argument */ -typedef struct POOL_job_s { - POOL_function function; - void *opaque; -} POOL_job; - -struct POOL_ctx_s { - ZSTD_customMem customMem; - /* Keep track of the threads */ - ZSTD_pthread_t* threads; - size_t threadCapacity; - size_t threadLimit; - - /* The queue is a circular buffer */ - POOL_job *queue; - size_t queueHead; - size_t queueTail; - size_t queueSize; - - /* The number of threads working on jobs */ - size_t numThreadsBusy; - /* Indicates if the queue is empty */ - int queueEmpty; - - /* The mutex protects the queue */ - ZSTD_pthread_mutex_t queueMutex; - /* Condition variable for pushers to wait on when the queue is full */ - ZSTD_pthread_cond_t queuePushCond; - /* Condition variables for poppers to wait on when the queue is empty */ - ZSTD_pthread_cond_t queuePopCond; - /* Indicates if the queue is shutting down */ - int shutdown; -}; - -/* POOL_thread() : - * Work thread for the thread pool. - * Waits for jobs and executes them. - * @returns : NULL on failure else non-null. - */ -static void* POOL_thread(void* opaque) { - POOL_ctx* const ctx = (POOL_ctx*)opaque; - if (!ctx) { return NULL; } - for (;;) { - /* Lock the mutex and wait for a non-empty queue or until shutdown */ - ZSTD_pthread_mutex_lock(&ctx->queueMutex); - - while ( ctx->queueEmpty - || (ctx->numThreadsBusy >= ctx->threadLimit) ) { - if (ctx->shutdown) { - /* even if !queueEmpty, (possible if numThreadsBusy >= threadLimit), - * a few threads will be shutdown while !queueEmpty, - * but enough threads will remain active to finish the queue */ - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); - return opaque; - } - ZSTD_pthread_cond_wait(&ctx->queuePopCond, &ctx->queueMutex); - } - /* Pop a job off the queue */ - { POOL_job const job = ctx->queue[ctx->queueHead]; - ctx->queueHead = (ctx->queueHead + 1) % ctx->queueSize; - ctx->numThreadsBusy++; - ctx->queueEmpty = (ctx->queueHead == ctx->queueTail); - /* Unlock the mutex, signal a pusher, and run the job */ - ZSTD_pthread_cond_signal(&ctx->queuePushCond); - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); - - job.function(job.opaque); - - /* If the intended queue size was 0, signal after finishing job */ - ZSTD_pthread_mutex_lock(&ctx->queueMutex); - ctx->numThreadsBusy--; - if (ctx->queueSize == 1) { - ZSTD_pthread_cond_signal(&ctx->queuePushCond); - } - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); - } - } /* for (;;) */ - assert(0); /* Unreachable */ -} - -/* ZSTD_createThreadPool() : public access point */ -POOL_ctx* ZSTD_createThreadPool(size_t numThreads) { - return POOL_create (numThreads, 0); -} - -POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) { - return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem); -} - -POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize, - ZSTD_customMem customMem) -{ - POOL_ctx* ctx; - /* Check parameters */ - if (!numThreads) { return NULL; } - /* Allocate the context and zero initialize */ - ctx = (POOL_ctx*)ZSTD_customCalloc(sizeof(POOL_ctx), customMem); - if (!ctx) { return NULL; } - /* Initialize the job queue. - * It needs one extra space since one space is wasted to differentiate - * empty and full queues. - */ - ctx->queueSize = queueSize + 1; - ctx->queue = (POOL_job*)ZSTD_customMalloc(ctx->queueSize * sizeof(POOL_job), customMem); - ctx->queueHead = 0; - ctx->queueTail = 0; - ctx->numThreadsBusy = 0; - ctx->queueEmpty = 1; - { - int error = 0; - error |= ZSTD_pthread_mutex_init(&ctx->queueMutex, NULL); - error |= ZSTD_pthread_cond_init(&ctx->queuePushCond, NULL); - error |= ZSTD_pthread_cond_init(&ctx->queuePopCond, NULL); - if (error) { POOL_free(ctx); return NULL; } - } - ctx->shutdown = 0; - /* Allocate space for the thread handles */ - ctx->threads = (ZSTD_pthread_t*)ZSTD_customMalloc(numThreads * sizeof(ZSTD_pthread_t), customMem); - ctx->threadCapacity = 0; - ctx->customMem = customMem; - /* Check for errors */ - if (!ctx->threads || !ctx->queue) { POOL_free(ctx); return NULL; } - /* Initialize the threads */ - { size_t i; - for (i = 0; i < numThreads; ++i) { - if (ZSTD_pthread_create(&ctx->threads[i], NULL, &POOL_thread, ctx)) { - ctx->threadCapacity = i; - POOL_free(ctx); - return NULL; - } } - ctx->threadCapacity = numThreads; - ctx->threadLimit = numThreads; - } - return ctx; -} - -/*! POOL_join() : - Shutdown the queue, wake any sleeping threads, and join all of the threads. -*/ -static void POOL_join(POOL_ctx* ctx) { - /* Shut down the queue */ - ZSTD_pthread_mutex_lock(&ctx->queueMutex); - ctx->shutdown = 1; - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); - /* Wake up sleeping threads */ - ZSTD_pthread_cond_broadcast(&ctx->queuePushCond); - ZSTD_pthread_cond_broadcast(&ctx->queuePopCond); - /* Join all of the threads */ - { size_t i; - for (i = 0; i < ctx->threadCapacity; ++i) { - ZSTD_pthread_join(ctx->threads[i], NULL); /* note : could fail */ - } } -} - -void POOL_free(POOL_ctx *ctx) { - if (!ctx) { return; } - POOL_join(ctx); - ZSTD_pthread_mutex_destroy(&ctx->queueMutex); - ZSTD_pthread_cond_destroy(&ctx->queuePushCond); - ZSTD_pthread_cond_destroy(&ctx->queuePopCond); - ZSTD_customFree(ctx->queue, ctx->customMem); - ZSTD_customFree(ctx->threads, ctx->customMem); - ZSTD_customFree(ctx, ctx->customMem); -} - -void ZSTD_freeThreadPool (ZSTD_threadPool* pool) { - POOL_free (pool); -} - -size_t POOL_sizeof(const POOL_ctx* ctx) { - if (ctx==NULL) return 0; /* supports sizeof NULL */ - return sizeof(*ctx) - + ctx->queueSize * sizeof(POOL_job) - + ctx->threadCapacity * sizeof(ZSTD_pthread_t); -} - - -/* @return : 0 on success, 1 on error */ -static int POOL_resize_internal(POOL_ctx* ctx, size_t numThreads) -{ - if (numThreads <= ctx->threadCapacity) { - if (!numThreads) return 1; - ctx->threadLimit = numThreads; - return 0; - } - /* numThreads > threadCapacity */ - { ZSTD_pthread_t* const threadPool = (ZSTD_pthread_t*)ZSTD_customMalloc(numThreads * sizeof(ZSTD_pthread_t), ctx->customMem); - if (!threadPool) return 1; - /* replace existing thread pool */ - ZSTD_memcpy(threadPool, ctx->threads, ctx->threadCapacity * sizeof(*threadPool)); - ZSTD_customFree(ctx->threads, ctx->customMem); - ctx->threads = threadPool; - /* Initialize additional threads */ - { size_t threadId; - for (threadId = ctx->threadCapacity; threadId < numThreads; ++threadId) { - if (ZSTD_pthread_create(&threadPool[threadId], NULL, &POOL_thread, ctx)) { - ctx->threadCapacity = threadId; - return 1; - } } - } } - /* successfully expanded */ - ctx->threadCapacity = numThreads; - ctx->threadLimit = numThreads; - return 0; -} - -/* @return : 0 on success, 1 on error */ -int POOL_resize(POOL_ctx* ctx, size_t numThreads) -{ - int result; - if (ctx==NULL) return 1; - ZSTD_pthread_mutex_lock(&ctx->queueMutex); - result = POOL_resize_internal(ctx, numThreads); - ZSTD_pthread_cond_broadcast(&ctx->queuePopCond); - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); - return result; -} - -/** - * Returns 1 if the queue is full and 0 otherwise. - * - * When queueSize is 1 (pool was created with an intended queueSize of 0), - * then a queue is empty if there is a thread free _and_ no job is waiting. - */ -static int isQueueFull(POOL_ctx const* ctx) { - if (ctx->queueSize > 1) { - return ctx->queueHead == ((ctx->queueTail + 1) % ctx->queueSize); - } else { - return (ctx->numThreadsBusy == ctx->threadLimit) || - !ctx->queueEmpty; - } -} - - -static void -POOL_add_internal(POOL_ctx* ctx, POOL_function function, void *opaque) -{ - POOL_job const job = {function, opaque}; - assert(ctx != NULL); - if (ctx->shutdown) return; - - ctx->queueEmpty = 0; - ctx->queue[ctx->queueTail] = job; - ctx->queueTail = (ctx->queueTail + 1) % ctx->queueSize; - ZSTD_pthread_cond_signal(&ctx->queuePopCond); -} - -void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque) -{ - assert(ctx != NULL); - ZSTD_pthread_mutex_lock(&ctx->queueMutex); - /* Wait until there is space in the queue for the new job */ - while (isQueueFull(ctx) && (!ctx->shutdown)) { - ZSTD_pthread_cond_wait(&ctx->queuePushCond, &ctx->queueMutex); - } - POOL_add_internal(ctx, function, opaque); - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); -} - - -int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) -{ - assert(ctx != NULL); - ZSTD_pthread_mutex_lock(&ctx->queueMutex); - if (isQueueFull(ctx)) { - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); - return 0; - } - POOL_add_internal(ctx, function, opaque); - ZSTD_pthread_mutex_unlock(&ctx->queueMutex); - return 1; -} - - -#else /* ZSTD_MULTITHREAD not defined */ - -/* ========================== */ -/* No multi-threading support */ -/* ========================== */ - - -/* We don't need any data, but if it is empty, malloc() might return NULL. */ -struct POOL_ctx_s { - int dummy; -}; -static POOL_ctx g_poolCtx; - -POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) { - return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem); -} - -POOL_ctx* -POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customMem customMem) -{ - (void)numThreads; - (void)queueSize; - (void)customMem; - return &g_poolCtx; -} - -void POOL_free(POOL_ctx* ctx) { - assert(!ctx || ctx == &g_poolCtx); - (void)ctx; -} - -int POOL_resize(POOL_ctx* ctx, size_t numThreads) { - (void)ctx; (void)numThreads; - return 0; -} - -void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque) { - (void)ctx; - function(opaque); -} - -int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) { - (void)ctx; - function(opaque); - return 1; -} - -size_t POOL_sizeof(const POOL_ctx* ctx) { - if (ctx==NULL) return 0; /* supports sizeof NULL */ - assert(ctx == &g_poolCtx); - return sizeof(*ctx); -} - -#endif /* ZSTD_MULTITHREAD */ diff --git a/stage1/zstd/lib/common/pool.h b/stage1/zstd/lib/common/pool.h deleted file mode 100644 index 0ebde1805d..0000000000 --- a/stage1/zstd/lib/common/pool.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef POOL_H -#define POOL_H - -#if defined (__cplusplus) -extern "C" { -#endif - - -#include "zstd_deps.h" -#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_customMem */ -#include "../zstd.h" - -typedef struct POOL_ctx_s POOL_ctx; - -/*! POOL_create() : - * Create a thread pool with at most `numThreads` threads. - * `numThreads` must be at least 1. - * The maximum number of queued jobs before blocking is `queueSize`. - * @return : POOL_ctx pointer on success, else NULL. -*/ -POOL_ctx* POOL_create(size_t numThreads, size_t queueSize); - -POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize, - ZSTD_customMem customMem); - -/*! POOL_free() : - * Free a thread pool returned by POOL_create(). - */ -void POOL_free(POOL_ctx* ctx); - -/*! POOL_resize() : - * Expands or shrinks pool's number of threads. - * This is more efficient than releasing + creating a new context, - * since it tries to preserve and re-use existing threads. - * `numThreads` must be at least 1. - * @return : 0 when resize was successful, - * !0 (typically 1) if there is an error. - * note : only numThreads can be resized, queueSize remains unchanged. - */ -int POOL_resize(POOL_ctx* ctx, size_t numThreads); - -/*! POOL_sizeof() : - * @return threadpool memory usage - * note : compatible with NULL (returns 0 in this case) - */ -size_t POOL_sizeof(const POOL_ctx* ctx); - -/*! POOL_function : - * The function type that can be added to a thread pool. - */ -typedef void (*POOL_function)(void*); - -/*! POOL_add() : - * Add the job `function(opaque)` to the thread pool. `ctx` must be valid. - * Possibly blocks until there is room in the queue. - * Note : The function may be executed asynchronously, - * therefore, `opaque` must live until function has been completed. - */ -void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque); - - -/*! POOL_tryAdd() : - * Add the job `function(opaque)` to thread pool _if_ a queue slot is available. - * Returns immediately even if not (does not block). - * @return : 1 if successful, 0 if not. - */ -int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque); - - -#if defined (__cplusplus) -} -#endif - -#endif diff --git a/stage1/zstd/lib/common/portability_macros.h b/stage1/zstd/lib/common/portability_macros.h deleted file mode 100644 index 2143817f57..0000000000 --- a/stage1/zstd/lib/common/portability_macros.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef ZSTD_PORTABILITY_MACROS_H -#define ZSTD_PORTABILITY_MACROS_H - -/** - * This header file contains macro defintions to support portability. - * This header is shared between C and ASM code, so it MUST only - * contain macro definitions. It MUST not contain any C code. - * - * This header ONLY defines macros to detect platforms/feature support. - * - */ - - -/* compat. with non-clang compilers */ -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif - -/* compat. with non-clang compilers */ -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* compat. with non-clang compilers */ -#ifndef __has_feature -# define __has_feature(x) 0 -#endif - -/* detects whether we are being compiled under msan */ -#ifndef ZSTD_MEMORY_SANITIZER -# if __has_feature(memory_sanitizer) -# define ZSTD_MEMORY_SANITIZER 1 -# else -# define ZSTD_MEMORY_SANITIZER 0 -# endif -#endif - -/* detects whether we are being compiled under asan */ -#ifndef ZSTD_ADDRESS_SANITIZER -# if __has_feature(address_sanitizer) -# define ZSTD_ADDRESS_SANITIZER 1 -# elif defined(__SANITIZE_ADDRESS__) -# define ZSTD_ADDRESS_SANITIZER 1 -# else -# define ZSTD_ADDRESS_SANITIZER 0 -# endif -#endif - -/* detects whether we are being compiled under dfsan */ -#ifndef ZSTD_DATAFLOW_SANITIZER -# if __has_feature(dataflow_sanitizer) -# define ZSTD_DATAFLOW_SANITIZER 1 -# else -# define ZSTD_DATAFLOW_SANITIZER 0 -# endif -#endif - -/* Mark the internal assembly functions as hidden */ -#ifdef __ELF__ -# define ZSTD_HIDE_ASM_FUNCTION(func) .hidden func -#else -# define ZSTD_HIDE_ASM_FUNCTION(func) -#endif - -/* Enable runtime BMI2 dispatch based on the CPU. - * Enabled for clang & gcc >=4.8 on x86 when BMI2 isn't enabled by default. - */ -#ifndef DYNAMIC_BMI2 - #if ((defined(__clang__) && __has_attribute(__target__)) \ - || (defined(__GNUC__) \ - && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))) \ - && (defined(__x86_64__) || defined(_M_X64)) \ - && !defined(__BMI2__) - # define DYNAMIC_BMI2 1 - #else - # define DYNAMIC_BMI2 0 - #endif -#endif - -/** - * Only enable assembly for GNUC comptabile compilers, - * because other platforms may not support GAS assembly syntax. - * - * Only enable assembly for Linux / MacOS, other platforms may - * work, but they haven't been tested. This could likely be - * extended to BSD systems. - * - * Disable assembly when MSAN is enabled, because MSAN requires - * 100% of code to be instrumented to work. - */ -#if defined(__GNUC__) -# if defined(__linux__) || defined(__linux) || defined(__APPLE__) -# if ZSTD_MEMORY_SANITIZER -# define ZSTD_ASM_SUPPORTED 0 -# elif ZSTD_DATAFLOW_SANITIZER -# define ZSTD_ASM_SUPPORTED 0 -# else -# define ZSTD_ASM_SUPPORTED 1 -# endif -# else -# define ZSTD_ASM_SUPPORTED 0 -# endif -#else -# define ZSTD_ASM_SUPPORTED 0 -#endif - -/** - * Determines whether we should enable assembly for x86-64 - * with BMI2. - * - * Enable if all of the following conditions hold: - * - ASM hasn't been explicitly disabled by defining ZSTD_DISABLE_ASM - * - Assembly is supported - * - We are compiling for x86-64 and either: - * - DYNAMIC_BMI2 is enabled - * - BMI2 is supported at compile time - */ -#if !defined(ZSTD_DISABLE_ASM) && \ - ZSTD_ASM_SUPPORTED && \ - defined(__x86_64__) && \ - (DYNAMIC_BMI2 || defined(__BMI2__)) -# define ZSTD_ENABLE_ASM_X86_64_BMI2 1 -#else -# define ZSTD_ENABLE_ASM_X86_64_BMI2 0 -#endif - -#endif /* ZSTD_PORTABILITY_MACROS_H */ diff --git a/stage1/zstd/lib/common/threading.c b/stage1/zstd/lib/common/threading.c deleted file mode 100644 index 92cf57c195..0000000000 --- a/stage1/zstd/lib/common/threading.c +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Copyright (c) 2016 Tino Reichardt - * All rights reserved. - * - * You can contact the author at: - * - zstdmt source repository: https://github.com/mcmilk/zstdmt - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -/** - * This file will hold wrapper for systems, which do not support pthreads - */ - -#include "threading.h" - -/* create fake symbol to avoid empty translation unit warning */ -int g_ZSTD_threading_useless_symbol; - -#if defined(ZSTD_MULTITHREAD) && defined(_WIN32) - -/** - * Windows minimalist Pthread Wrapper, based on : - * http://www.cse.wustl.edu/~schmidt/win32-cv-1.html - */ - - -/* === Dependencies === */ -#include -#include - - -/* === Implementation === */ - -static unsigned __stdcall worker(void *arg) -{ - ZSTD_pthread_t* const thread = (ZSTD_pthread_t*) arg; - thread->arg = thread->start_routine(thread->arg); - return 0; -} - -int ZSTD_pthread_create(ZSTD_pthread_t* thread, const void* unused, - void* (*start_routine) (void*), void* arg) -{ - (void)unused; - thread->arg = arg; - thread->start_routine = start_routine; - thread->handle = (HANDLE) _beginthreadex(NULL, 0, worker, thread, 0, NULL); - - if (!thread->handle) - return errno; - else - return 0; -} - -int ZSTD_pthread_join(ZSTD_pthread_t thread, void **value_ptr) -{ - DWORD result; - - if (!thread.handle) return 0; - - result = WaitForSingleObject(thread.handle, INFINITE); - switch (result) { - case WAIT_OBJECT_0: - if (value_ptr) *value_ptr = thread.arg; - return 0; - case WAIT_ABANDONED: - return EINVAL; - default: - return GetLastError(); - } -} - -#endif /* ZSTD_MULTITHREAD */ - -#if defined(ZSTD_MULTITHREAD) && DEBUGLEVEL >= 1 && !defined(_WIN32) - -#define ZSTD_DEPS_NEED_MALLOC -#include "zstd_deps.h" - -int ZSTD_pthread_mutex_init(ZSTD_pthread_mutex_t* mutex, pthread_mutexattr_t const* attr) -{ - *mutex = (pthread_mutex_t*)ZSTD_malloc(sizeof(pthread_mutex_t)); - if (!*mutex) - return 1; - return pthread_mutex_init(*mutex, attr); -} - -int ZSTD_pthread_mutex_destroy(ZSTD_pthread_mutex_t* mutex) -{ - if (!*mutex) - return 0; - { - int const ret = pthread_mutex_destroy(*mutex); - ZSTD_free(*mutex); - return ret; - } -} - -int ZSTD_pthread_cond_init(ZSTD_pthread_cond_t* cond, pthread_condattr_t const* attr) -{ - *cond = (pthread_cond_t*)ZSTD_malloc(sizeof(pthread_cond_t)); - if (!*cond) - return 1; - return pthread_cond_init(*cond, attr); -} - -int ZSTD_pthread_cond_destroy(ZSTD_pthread_cond_t* cond) -{ - if (!*cond) - return 0; - { - int const ret = pthread_cond_destroy(*cond); - ZSTD_free(*cond); - return ret; - } -} - -#endif diff --git a/stage1/zstd/lib/common/threading.h b/stage1/zstd/lib/common/threading.h deleted file mode 100644 index fd0060d5aa..0000000000 --- a/stage1/zstd/lib/common/threading.h +++ /dev/null @@ -1,155 +0,0 @@ -/** - * Copyright (c) 2016 Tino Reichardt - * All rights reserved. - * - * You can contact the author at: - * - zstdmt source repository: https://github.com/mcmilk/zstdmt - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef THREADING_H_938743 -#define THREADING_H_938743 - -#include "debug.h" - -#if defined (__cplusplus) -extern "C" { -#endif - -#if defined(ZSTD_MULTITHREAD) && defined(_WIN32) - -/** - * Windows minimalist Pthread Wrapper, based on : - * http://www.cse.wustl.edu/~schmidt/win32-cv-1.html - */ -#ifdef WINVER -# undef WINVER -#endif -#define WINVER 0x0600 - -#ifdef _WIN32_WINNT -# undef _WIN32_WINNT -#endif -#define _WIN32_WINNT 0x0600 - -#ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -#endif - -#undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */ -#include -#undef ERROR -#define ERROR(name) ZSTD_ERROR(name) - - -/* mutex */ -#define ZSTD_pthread_mutex_t CRITICAL_SECTION -#define ZSTD_pthread_mutex_init(a, b) ((void)(b), InitializeCriticalSection((a)), 0) -#define ZSTD_pthread_mutex_destroy(a) DeleteCriticalSection((a)) -#define ZSTD_pthread_mutex_lock(a) EnterCriticalSection((a)) -#define ZSTD_pthread_mutex_unlock(a) LeaveCriticalSection((a)) - -/* condition variable */ -#define ZSTD_pthread_cond_t CONDITION_VARIABLE -#define ZSTD_pthread_cond_init(a, b) ((void)(b), InitializeConditionVariable((a)), 0) -#define ZSTD_pthread_cond_destroy(a) ((void)(a)) -#define ZSTD_pthread_cond_wait(a, b) SleepConditionVariableCS((a), (b), INFINITE) -#define ZSTD_pthread_cond_signal(a) WakeConditionVariable((a)) -#define ZSTD_pthread_cond_broadcast(a) WakeAllConditionVariable((a)) - -/* ZSTD_pthread_create() and ZSTD_pthread_join() */ -typedef struct { - HANDLE handle; - void* (*start_routine)(void*); - void* arg; -} ZSTD_pthread_t; - -int ZSTD_pthread_create(ZSTD_pthread_t* thread, const void* unused, - void* (*start_routine) (void*), void* arg); - -int ZSTD_pthread_join(ZSTD_pthread_t thread, void** value_ptr); - -/** - * add here more wrappers as required - */ - - -#elif defined(ZSTD_MULTITHREAD) /* posix assumed ; need a better detection method */ -/* === POSIX Systems === */ -# include - -#if DEBUGLEVEL < 1 - -#define ZSTD_pthread_mutex_t pthread_mutex_t -#define ZSTD_pthread_mutex_init(a, b) pthread_mutex_init((a), (b)) -#define ZSTD_pthread_mutex_destroy(a) pthread_mutex_destroy((a)) -#define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock((a)) -#define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock((a)) - -#define ZSTD_pthread_cond_t pthread_cond_t -#define ZSTD_pthread_cond_init(a, b) pthread_cond_init((a), (b)) -#define ZSTD_pthread_cond_destroy(a) pthread_cond_destroy((a)) -#define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait((a), (b)) -#define ZSTD_pthread_cond_signal(a) pthread_cond_signal((a)) -#define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast((a)) - -#define ZSTD_pthread_t pthread_t -#define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d)) -#define ZSTD_pthread_join(a, b) pthread_join((a),(b)) - -#else /* DEBUGLEVEL >= 1 */ - -/* Debug implementation of threading. - * In this implementation we use pointers for mutexes and condition variables. - * This way, if we forget to init/destroy them the program will crash or ASAN - * will report leaks. - */ - -#define ZSTD_pthread_mutex_t pthread_mutex_t* -int ZSTD_pthread_mutex_init(ZSTD_pthread_mutex_t* mutex, pthread_mutexattr_t const* attr); -int ZSTD_pthread_mutex_destroy(ZSTD_pthread_mutex_t* mutex); -#define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock(*(a)) -#define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock(*(a)) - -#define ZSTD_pthread_cond_t pthread_cond_t* -int ZSTD_pthread_cond_init(ZSTD_pthread_cond_t* cond, pthread_condattr_t const* attr); -int ZSTD_pthread_cond_destroy(ZSTD_pthread_cond_t* cond); -#define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait(*(a), *(b)) -#define ZSTD_pthread_cond_signal(a) pthread_cond_signal(*(a)) -#define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast(*(a)) - -#define ZSTD_pthread_t pthread_t -#define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d)) -#define ZSTD_pthread_join(a, b) pthread_join((a),(b)) - -#endif - -#else /* ZSTD_MULTITHREAD not defined */ -/* No multithreading support */ - -typedef int ZSTD_pthread_mutex_t; -#define ZSTD_pthread_mutex_init(a, b) ((void)(a), (void)(b), 0) -#define ZSTD_pthread_mutex_destroy(a) ((void)(a)) -#define ZSTD_pthread_mutex_lock(a) ((void)(a)) -#define ZSTD_pthread_mutex_unlock(a) ((void)(a)) - -typedef int ZSTD_pthread_cond_t; -#define ZSTD_pthread_cond_init(a, b) ((void)(a), (void)(b), 0) -#define ZSTD_pthread_cond_destroy(a) ((void)(a)) -#define ZSTD_pthread_cond_wait(a, b) ((void)(a), (void)(b)) -#define ZSTD_pthread_cond_signal(a) ((void)(a)) -#define ZSTD_pthread_cond_broadcast(a) ((void)(a)) - -/* do not use ZSTD_pthread_t */ - -#endif /* ZSTD_MULTITHREAD */ - -#if defined (__cplusplus) -} -#endif - -#endif /* THREADING_H_938743 */ diff --git a/stage1/zstd/lib/common/xxhash.c b/stage1/zstd/lib/common/xxhash.c deleted file mode 100644 index d49497cf1c..0000000000 --- a/stage1/zstd/lib/common/xxhash.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * xxHash - Fast Hash algorithm - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - xxHash homepage: http://www.xxhash.com - * - xxHash source repository : https://github.com/Cyan4973/xxHash - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -*/ - - - -/* - * xxhash.c instantiates functions defined in xxhash.h - */ - -#define XXH_STATIC_LINKING_ONLY /* access advanced declarations */ -#define XXH_IMPLEMENTATION /* access definitions */ - -#include "xxhash.h" diff --git a/stage1/zstd/lib/common/xxhash.h b/stage1/zstd/lib/common/xxhash.h deleted file mode 100644 index 8ebbfdd626..0000000000 --- a/stage1/zstd/lib/common/xxhash.h +++ /dev/null @@ -1,5686 +0,0 @@ -/* - * xxHash - Fast Hash algorithm - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - xxHash homepage: http://www.xxhash.com - * - xxHash source repository : https://github.com/Cyan4973/xxHash - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -*/ - - -#ifndef XXH_NO_XXH3 -# define XXH_NO_XXH3 -#endif - -#ifndef XXH_NAMESPACE -# define XXH_NAMESPACE ZSTD_ -#endif - -/*! - * @mainpage xxHash - * - * @file xxhash.h - * xxHash prototypes and implementation - */ -/* TODO: update */ -/* Notice extracted from xxHash homepage: - -xxHash is an extremely fast hash algorithm, running at RAM speed limits. -It also successfully passes all tests from the SMHasher suite. - -Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz) - -Name Speed Q.Score Author -xxHash 5.4 GB/s 10 -CrapWow 3.2 GB/s 2 Andrew -MurmurHash 3a 2.7 GB/s 10 Austin Appleby -SpookyHash 2.0 GB/s 10 Bob Jenkins -SBox 1.4 GB/s 9 Bret Mulvey -Lookup3 1.2 GB/s 9 Bob Jenkins -SuperFastHash 1.2 GB/s 1 Paul Hsieh -CityHash64 1.05 GB/s 10 Pike & Alakuijala -FNV 0.55 GB/s 5 Fowler, Noll, Vo -CRC32 0.43 GB/s 9 -MD5-32 0.33 GB/s 10 Ronald L. Rivest -SHA1-32 0.28 GB/s 10 - -Q.Score is a measure of quality of the hash function. -It depends on successfully passing SMHasher test set. -10 is a perfect score. - -Note: SMHasher's CRC32 implementation is not the fastest one. -Other speed-oriented implementations can be faster, -especially in combination with PCLMUL instruction: -https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html?showComment=1552696407071#c3490092340461170735 - -A 64-bit version, named XXH64, is available since r35. -It offers much better speed, but for 64-bit applications only. -Name Speed on 64 bits Speed on 32 bits -XXH64 13.8 GB/s 1.9 GB/s -XXH32 6.8 GB/s 6.0 GB/s -*/ - -#if defined (__cplusplus) -extern "C" { -#endif - -/* **************************** - * INLINE mode - ******************************/ -/*! - * XXH_INLINE_ALL (and XXH_PRIVATE_API) - * Use these build macros to inline xxhash into the target unit. - * Inlining improves performance on small inputs, especially when the length is - * expressed as a compile-time constant: - * - * https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html - * - * It also keeps xxHash symbols private to the unit, so they are not exported. - * - * Usage: - * #define XXH_INLINE_ALL - * #include "xxhash.h" - * - * Do not compile and link xxhash.o as a separate object, as it is not useful. - */ -#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) \ - && !defined(XXH_INLINE_ALL_31684351384) - /* this section should be traversed only once */ -# define XXH_INLINE_ALL_31684351384 - /* give access to the advanced API, required to compile implementations */ -# undef XXH_STATIC_LINKING_ONLY /* avoid macro redef */ -# define XXH_STATIC_LINKING_ONLY - /* make all functions private */ -# undef XXH_PUBLIC_API -# if defined(__GNUC__) -# define XXH_PUBLIC_API static __inline __attribute__((unused)) -# elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) -# define XXH_PUBLIC_API static inline -# elif defined(_MSC_VER) -# define XXH_PUBLIC_API static __inline -# else - /* note: this version may generate warnings for unused static functions */ -# define XXH_PUBLIC_API static -# endif - - /* - * This part deals with the special case where a unit wants to inline xxHash, - * but "xxhash.h" has previously been included without XXH_INLINE_ALL, - * such as part of some previously included *.h header file. - * Without further action, the new include would just be ignored, - * and functions would effectively _not_ be inlined (silent failure). - * The following macros solve this situation by prefixing all inlined names, - * avoiding naming collision with previous inclusions. - */ - /* Before that, we unconditionally #undef all symbols, - * in case they were already defined with XXH_NAMESPACE. - * They will then be redefined for XXH_INLINE_ALL - */ -# undef XXH_versionNumber - /* XXH32 */ -# undef XXH32 -# undef XXH32_createState -# undef XXH32_freeState -# undef XXH32_reset -# undef XXH32_update -# undef XXH32_digest -# undef XXH32_copyState -# undef XXH32_canonicalFromHash -# undef XXH32_hashFromCanonical - /* XXH64 */ -# undef XXH64 -# undef XXH64_createState -# undef XXH64_freeState -# undef XXH64_reset -# undef XXH64_update -# undef XXH64_digest -# undef XXH64_copyState -# undef XXH64_canonicalFromHash -# undef XXH64_hashFromCanonical - /* XXH3_64bits */ -# undef XXH3_64bits -# undef XXH3_64bits_withSecret -# undef XXH3_64bits_withSeed -# undef XXH3_64bits_withSecretandSeed -# undef XXH3_createState -# undef XXH3_freeState -# undef XXH3_copyState -# undef XXH3_64bits_reset -# undef XXH3_64bits_reset_withSeed -# undef XXH3_64bits_reset_withSecret -# undef XXH3_64bits_update -# undef XXH3_64bits_digest -# undef XXH3_generateSecret - /* XXH3_128bits */ -# undef XXH128 -# undef XXH3_128bits -# undef XXH3_128bits_withSeed -# undef XXH3_128bits_withSecret -# undef XXH3_128bits_reset -# undef XXH3_128bits_reset_withSeed -# undef XXH3_128bits_reset_withSecret -# undef XXH3_128bits_reset_withSecretandSeed -# undef XXH3_128bits_update -# undef XXH3_128bits_digest -# undef XXH128_isEqual -# undef XXH128_cmp -# undef XXH128_canonicalFromHash -# undef XXH128_hashFromCanonical - /* Finally, free the namespace itself */ -# undef XXH_NAMESPACE - - /* employ the namespace for XXH_INLINE_ALL */ -# define XXH_NAMESPACE XXH_INLINE_ - /* - * Some identifiers (enums, type names) are not symbols, - * but they must nonetheless be renamed to avoid redeclaration. - * Alternative solution: do not redeclare them. - * However, this requires some #ifdefs, and has a more dispersed impact. - * Meanwhile, renaming can be achieved in a single place. - */ -# define XXH_IPREF(Id) XXH_NAMESPACE ## Id -# define XXH_OK XXH_IPREF(XXH_OK) -# define XXH_ERROR XXH_IPREF(XXH_ERROR) -# define XXH_errorcode XXH_IPREF(XXH_errorcode) -# define XXH32_canonical_t XXH_IPREF(XXH32_canonical_t) -# define XXH64_canonical_t XXH_IPREF(XXH64_canonical_t) -# define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t) -# define XXH32_state_s XXH_IPREF(XXH32_state_s) -# define XXH32_state_t XXH_IPREF(XXH32_state_t) -# define XXH64_state_s XXH_IPREF(XXH64_state_s) -# define XXH64_state_t XXH_IPREF(XXH64_state_t) -# define XXH3_state_s XXH_IPREF(XXH3_state_s) -# define XXH3_state_t XXH_IPREF(XXH3_state_t) -# define XXH128_hash_t XXH_IPREF(XXH128_hash_t) - /* Ensure the header is parsed again, even if it was previously included */ -# undef XXHASH_H_5627135585666179 -# undef XXHASH_H_STATIC_13879238742 -#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */ - - - -/* **************************************************************** - * Stable API - *****************************************************************/ -#ifndef XXHASH_H_5627135585666179 -#define XXHASH_H_5627135585666179 1 - - -/*! - * @defgroup public Public API - * Contains details on the public xxHash functions. - * @{ - */ -/* specific declaration modes for Windows */ -#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API) -# if defined(WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT)) -# ifdef XXH_EXPORT -# define XXH_PUBLIC_API __declspec(dllexport) -# elif XXH_IMPORT -# define XXH_PUBLIC_API __declspec(dllimport) -# endif -# else -# define XXH_PUBLIC_API /* do nothing */ -# endif -#endif - -#ifdef XXH_DOXYGEN -/*! - * @brief Emulate a namespace by transparently prefixing all symbols. - * - * If you want to include _and expose_ xxHash functions from within your own - * library, but also want to avoid symbol collisions with other libraries which - * may also include xxHash, you can use XXH_NAMESPACE to automatically prefix - * any public symbol from xxhash library with the value of XXH_NAMESPACE - * (therefore, avoid empty or numeric values). - * - * Note that no change is required within the calling program as long as it - * includes `xxhash.h`: Regular symbol names will be automatically translated - * by this header. - */ -# define XXH_NAMESPACE /* YOUR NAME HERE */ -# undef XXH_NAMESPACE -#endif - -#ifdef XXH_NAMESPACE -# define XXH_CAT(A,B) A##B -# define XXH_NAME2(A,B) XXH_CAT(A,B) -# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber) -/* XXH32 */ -# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32) -# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) -# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState) -# define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset) -# define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update) -# define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest) -# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState) -# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash) -# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical) -/* XXH64 */ -# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64) -# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState) -# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState) -# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset) -# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update) -# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest) -# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState) -# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash) -# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical) -/* XXH3_64bits */ -# define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits) -# define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret) -# define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed) -# define XXH3_64bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecretandSeed) -# define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState) -# define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState) -# define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState) -# define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset) -# define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed) -# define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret) -# define XXH3_64bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecretandSeed) -# define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update) -# define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest) -# define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret) -# define XXH3_generateSecret_fromSeed XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret_fromSeed) -/* XXH3_128bits */ -# define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128) -# define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits) -# define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed) -# define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret) -# define XXH3_128bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecretandSeed) -# define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset) -# define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed) -# define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret) -# define XXH3_128bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecretandSeed) -# define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update) -# define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest) -# define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual) -# define XXH128_cmp XXH_NAME2(XXH_NAMESPACE, XXH128_cmp) -# define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash) -# define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical) -#endif - - -/* ************************************* -* Version -***************************************/ -#define XXH_VERSION_MAJOR 0 -#define XXH_VERSION_MINOR 8 -#define XXH_VERSION_RELEASE 1 -#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE) - -/*! - * @brief Obtains the xxHash version. - * - * This is mostly useful when xxHash is compiled as a shared library, - * since the returned value comes from the library, as opposed to header file. - * - * @return `XXH_VERSION_NUMBER` of the invoked library. - */ -XXH_PUBLIC_API unsigned XXH_versionNumber (void); - - -/* **************************** -* Common basic types -******************************/ -#include /* size_t */ -typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; - - -/*-********************************************************************** -* 32-bit hash -************************************************************************/ -#if defined(XXH_DOXYGEN) /* Don't show include */ -/*! - * @brief An unsigned 32-bit integer. - * - * Not necessarily defined to `uint32_t` but functionally equivalent. - */ -typedef uint32_t XXH32_hash_t; - -#elif !defined (__VMS) \ - && (defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) -# include - typedef uint32_t XXH32_hash_t; - -#else -# include -# if UINT_MAX == 0xFFFFFFFFUL - typedef unsigned int XXH32_hash_t; -# else -# if ULONG_MAX == 0xFFFFFFFFUL - typedef unsigned long XXH32_hash_t; -# else -# error "unsupported platform: need a 32-bit type" -# endif -# endif -#endif - -/*! - * @} - * - * @defgroup xxh32_family XXH32 family - * @ingroup public - * Contains functions used in the classic 32-bit xxHash algorithm. - * - * @note - * XXH32 is useful for older platforms, with no or poor 64-bit performance. - * Note that @ref xxh3_family provides competitive speed - * for both 32-bit and 64-bit systems, and offers true 64/128 bit hash results. - * - * @see @ref xxh64_family, @ref xxh3_family : Other xxHash families - * @see @ref xxh32_impl for implementation details - * @{ - */ - -/*! - * @brief Calculates the 32-bit hash of @p input using xxHash32. - * - * Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark): 5.4 GB/s - * - * @param input The block of data to be hashed, at least @p length bytes in size. - * @param length The length of @p input, in bytes. - * @param seed The 32-bit seed to alter the hash's output predictably. - * - * @pre - * The memory between @p input and @p input + @p length must be valid, - * readable, contiguous memory. However, if @p length is `0`, @p input may be - * `NULL`. In C++, this also must be *TriviallyCopyable*. - * - * @return The calculated 32-bit hash value. - * - * @see - * XXH64(), XXH3_64bits_withSeed(), XXH3_128bits_withSeed(), XXH128(): - * Direct equivalents for the other variants of xxHash. - * @see - * XXH32_createState(), XXH32_update(), XXH32_digest(): Streaming version. - */ -XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed); - -/*! - * Streaming functions generate the xxHash value from an incremental input. - * This method is slower than single-call functions, due to state management. - * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized. - * - * An XXH state must first be allocated using `XXH*_createState()`. - * - * Start a new hash by initializing the state with a seed using `XXH*_reset()`. - * - * Then, feed the hash state by calling `XXH*_update()` as many times as necessary. - * - * The function returns an error code, with 0 meaning OK, and any other value - * meaning there is an error. - * - * Finally, a hash value can be produced anytime, by using `XXH*_digest()`. - * This function returns the nn-bits hash as an int or long long. - * - * It's still possible to continue inserting input into the hash state after a - * digest, and generate new hash values later on by invoking `XXH*_digest()`. - * - * When done, release the state using `XXH*_freeState()`. - * - * Example code for incrementally hashing a file: - * @code{.c} - * #include - * #include - * #define BUFFER_SIZE 256 - * - * // Note: XXH64 and XXH3 use the same interface. - * XXH32_hash_t - * hashFile(FILE* stream) - * { - * XXH32_state_t* state; - * unsigned char buf[BUFFER_SIZE]; - * size_t amt; - * XXH32_hash_t hash; - * - * state = XXH32_createState(); // Create a state - * assert(state != NULL); // Error check here - * XXH32_reset(state, 0xbaad5eed); // Reset state with our seed - * while ((amt = fread(buf, 1, sizeof(buf), stream)) != 0) { - * XXH32_update(state, buf, amt); // Hash the file in chunks - * } - * hash = XXH32_digest(state); // Finalize the hash - * XXH32_freeState(state); // Clean up - * return hash; - * } - * @endcode - */ - -/*! - * @typedef struct XXH32_state_s XXH32_state_t - * @brief The opaque state struct for the XXH32 streaming API. - * - * @see XXH32_state_s for details. - */ -typedef struct XXH32_state_s XXH32_state_t; - -/*! - * @brief Allocates an @ref XXH32_state_t. - * - * Must be freed with XXH32_freeState(). - * @return An allocated XXH32_state_t on success, `NULL` on failure. - */ -XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void); -/*! - * @brief Frees an @ref XXH32_state_t. - * - * Must be allocated with XXH32_createState(). - * @param statePtr A pointer to an @ref XXH32_state_t allocated with @ref XXH32_createState(). - * @return XXH_OK. - */ -XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr); -/*! - * @brief Copies one @ref XXH32_state_t to another. - * - * @param dst_state The state to copy to. - * @param src_state The state to copy from. - * @pre - * @p dst_state and @p src_state must not be `NULL` and must not overlap. - */ -XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state); - -/*! - * @brief Resets an @ref XXH32_state_t to begin a new hash. - * - * This function resets and seeds a state. Call it before @ref XXH32_update(). - * - * @param statePtr The state struct to reset. - * @param seed The 32-bit seed to alter the hash result predictably. - * - * @pre - * @p statePtr must not be `NULL`. - * - * @return @ref XXH_OK on success, @ref XXH_ERROR on failure. - */ -XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, XXH32_hash_t seed); - -/*! - * @brief Consumes a block of @p input to an @ref XXH32_state_t. - * - * Call this to incrementally consume blocks of data. - * - * @param statePtr The state struct to update. - * @param input The block of data to be hashed, at least @p length bytes in size. - * @param length The length of @p input, in bytes. - * - * @pre - * @p statePtr must not be `NULL`. - * @pre - * The memory between @p input and @p input + @p length must be valid, - * readable, contiguous memory. However, if @p length is `0`, @p input may be - * `NULL`. In C++, this also must be *TriviallyCopyable*. - * - * @return @ref XXH_OK on success, @ref XXH_ERROR on failure. - */ -XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length); - -/*! - * @brief Returns the calculated hash value from an @ref XXH32_state_t. - * - * @note - * Calling XXH32_digest() will not affect @p statePtr, so you can update, - * digest, and update again. - * - * @param statePtr The state struct to calculate the hash from. - * - * @pre - * @p statePtr must not be `NULL`. - * - * @return The calculated xxHash32 value from that state. - */ -XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr); - -/******* Canonical representation *******/ - -/* - * The default return values from XXH functions are unsigned 32 and 64 bit - * integers. - * This the simplest and fastest format for further post-processing. - * - * However, this leaves open the question of what is the order on the byte level, - * since little and big endian conventions will store the same number differently. - * - * The canonical representation settles this issue by mandating big-endian - * convention, the same convention as human-readable numbers (large digits first). - * - * When writing hash values to storage, sending them over a network, or printing - * them, it's highly recommended to use the canonical representation to ensure - * portability across a wider range of systems, present and future. - * - * The following functions allow transformation of hash values to and from - * canonical format. - */ - -/*! - * @brief Canonical (big endian) representation of @ref XXH32_hash_t. - */ -typedef struct { - unsigned char digest[4]; /*!< Hash bytes, big endian */ -} XXH32_canonical_t; - -/*! - * @brief Converts an @ref XXH32_hash_t to a big endian @ref XXH32_canonical_t. - * - * @param dst The @ref XXH32_canonical_t pointer to be stored to. - * @param hash The @ref XXH32_hash_t to be converted. - * - * @pre - * @p dst must not be `NULL`. - */ -XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash); - -/*! - * @brief Converts an @ref XXH32_canonical_t to a native @ref XXH32_hash_t. - * - * @param src The @ref XXH32_canonical_t to convert. - * - * @pre - * @p src must not be `NULL`. - * - * @return The converted hash. - */ -XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src); - - -#ifdef __has_attribute -# define XXH_HAS_ATTRIBUTE(x) __has_attribute(x) -#else -# define XXH_HAS_ATTRIBUTE(x) 0 -#endif - -/* C-language Attributes are added in C23. */ -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L) && defined(__has_c_attribute) -# define XXH_HAS_C_ATTRIBUTE(x) __has_c_attribute(x) -#else -# define XXH_HAS_C_ATTRIBUTE(x) 0 -#endif - -#if defined(__cplusplus) && defined(__has_cpp_attribute) -# define XXH_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) -#else -# define XXH_HAS_CPP_ATTRIBUTE(x) 0 -#endif - -/* -Define XXH_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute -introduced in CPP17 and C23. -CPP17 : https://en.cppreference.com/w/cpp/language/attributes/fallthrough -C23 : https://en.cppreference.com/w/c/language/attributes/fallthrough -*/ -#if XXH_HAS_C_ATTRIBUTE(x) -# define XXH_FALLTHROUGH [[fallthrough]] -#elif XXH_HAS_CPP_ATTRIBUTE(x) -# define XXH_FALLTHROUGH [[fallthrough]] -#elif XXH_HAS_ATTRIBUTE(__fallthrough__) -# define XXH_FALLTHROUGH __attribute__ ((fallthrough)) -#else -# define XXH_FALLTHROUGH -#endif - -/*! - * @} - * @ingroup public - * @{ - */ - -#ifndef XXH_NO_LONG_LONG -/*-********************************************************************** -* 64-bit hash -************************************************************************/ -#if defined(XXH_DOXYGEN) /* don't include */ -/*! - * @brief An unsigned 64-bit integer. - * - * Not necessarily defined to `uint64_t` but functionally equivalent. - */ -typedef uint64_t XXH64_hash_t; -#elif !defined (__VMS) \ - && (defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) -# include - typedef uint64_t XXH64_hash_t; -#else -# include -# if defined(__LP64__) && ULONG_MAX == 0xFFFFFFFFFFFFFFFFULL - /* LP64 ABI says uint64_t is unsigned long */ - typedef unsigned long XXH64_hash_t; -# else - /* the following type must have a width of 64-bit */ - typedef unsigned long long XXH64_hash_t; -# endif -#endif - -/*! - * @} - * - * @defgroup xxh64_family XXH64 family - * @ingroup public - * @{ - * Contains functions used in the classic 64-bit xxHash algorithm. - * - * @note - * XXH3 provides competitive speed for both 32-bit and 64-bit systems, - * and offers true 64/128 bit hash results. - * It provides better speed for systems with vector processing capabilities. - */ - - -/*! - * @brief Calculates the 64-bit hash of @p input using xxHash64. - * - * This function usually runs faster on 64-bit systems, but slower on 32-bit - * systems (see benchmark). - * - * @param input The block of data to be hashed, at least @p length bytes in size. - * @param length The length of @p input, in bytes. - * @param seed The 64-bit seed to alter the hash's output predictably. - * - * @pre - * The memory between @p input and @p input + @p length must be valid, - * readable, contiguous memory. However, if @p length is `0`, @p input may be - * `NULL`. In C++, this also must be *TriviallyCopyable*. - * - * @return The calculated 64-bit hash. - * - * @see - * XXH32(), XXH3_64bits_withSeed(), XXH3_128bits_withSeed(), XXH128(): - * Direct equivalents for the other variants of xxHash. - * @see - * XXH64_createState(), XXH64_update(), XXH64_digest(): Streaming version. - */ -XXH_PUBLIC_API XXH64_hash_t XXH64(const void* input, size_t length, XXH64_hash_t seed); - -/******* Streaming *******/ -/*! - * @brief The opaque state struct for the XXH64 streaming API. - * - * @see XXH64_state_s for details. - */ -typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */ -XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void); -XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr); -XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state); - -XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, XXH64_hash_t seed); -XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length); -XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr); - -/******* Canonical representation *******/ -typedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t; -XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash); -XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src); - -#ifndef XXH_NO_XXH3 -/*! - * @} - * ************************************************************************ - * @defgroup xxh3_family XXH3 family - * @ingroup public - * @{ - * - * XXH3 is a more recent hash algorithm featuring: - * - Improved speed for both small and large inputs - * - True 64-bit and 128-bit outputs - * - SIMD acceleration - * - Improved 32-bit viability - * - * Speed analysis methodology is explained here: - * - * https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html - * - * Compared to XXH64, expect XXH3 to run approximately - * ~2x faster on large inputs and >3x faster on small ones, - * exact differences vary depending on platform. - * - * XXH3's speed benefits greatly from SIMD and 64-bit arithmetic, - * but does not require it. - * Any 32-bit and 64-bit targets that can run XXH32 smoothly - * can run XXH3 at competitive speeds, even without vector support. - * Further details are explained in the implementation. - * - * Optimized implementations are provided for AVX512, AVX2, SSE2, NEON, POWER8, - * ZVector and scalar targets. This can be controlled via the XXH_VECTOR macro. - * - * XXH3 implementation is portable: - * it has a generic C90 formulation that can be compiled on any platform, - * all implementations generage exactly the same hash value on all platforms. - * Starting from v0.8.0, it's also labelled "stable", meaning that - * any future version will also generate the same hash value. - * - * XXH3 offers 2 variants, _64bits and _128bits. - * - * When only 64 bits are needed, prefer invoking the _64bits variant, as it - * reduces the amount of mixing, resulting in faster speed on small inputs. - * It's also generally simpler to manipulate a scalar return type than a struct. - * - * The API supports one-shot hashing, streaming mode, and custom secrets. - */ - -/*-********************************************************************** -* XXH3 64-bit variant -************************************************************************/ - -/* XXH3_64bits(): - * default 64-bit variant, using default secret and default seed of 0. - * It's the fastest variant. */ -XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* data, size_t len); - -/* - * XXH3_64bits_withSeed(): - * This variant generates a custom secret on the fly - * based on default secret altered using the `seed` value. - * While this operation is decently fast, note that it's not completely free. - * Note: seed==0 produces the same results as XXH3_64bits(). - */ -XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* data, size_t len, XXH64_hash_t seed); - -/*! - * The bare minimum size for a custom secret. - * - * @see - * XXH3_64bits_withSecret(), XXH3_64bits_reset_withSecret(), - * XXH3_128bits_withSecret(), XXH3_128bits_reset_withSecret(). - */ -#define XXH3_SECRET_SIZE_MIN 136 - -/* - * XXH3_64bits_withSecret(): - * It's possible to provide any blob of bytes as a "secret" to generate the hash. - * This makes it more difficult for an external actor to prepare an intentional collision. - * The main condition is that secretSize *must* be large enough (>= XXH3_SECRET_SIZE_MIN). - * However, the quality of the secret impacts the dispersion of the hash algorithm. - * Therefore, the secret _must_ look like a bunch of random bytes. - * Avoid "trivial" or structured data such as repeated sequences or a text document. - * Whenever in doubt about the "randomness" of the blob of bytes, - * consider employing "XXH3_generateSecret()" instead (see below). - * It will generate a proper high entropy secret derived from the blob of bytes. - * Another advantage of using XXH3_generateSecret() is that - * it guarantees that all bits within the initial blob of bytes - * will impact every bit of the output. - * This is not necessarily the case when using the blob of bytes directly - * because, when hashing _small_ inputs, only a portion of the secret is employed. - */ -XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize); - - -/******* Streaming *******/ -/* - * Streaming requires state maintenance. - * This operation costs memory and CPU. - * As a consequence, streaming is slower than one-shot hashing. - * For better performance, prefer one-shot functions whenever applicable. - */ - -/*! - * @brief The state struct for the XXH3 streaming API. - * - * @see XXH3_state_s for details. - */ -typedef struct XXH3_state_s XXH3_state_t; -XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void); -XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr); -XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state); - -/* - * XXH3_64bits_reset(): - * Initialize with default parameters. - * digest will be equivalent to `XXH3_64bits()`. - */ -XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr); -/* - * XXH3_64bits_reset_withSeed(): - * Generate a custom secret from `seed`, and store it into `statePtr`. - * digest will be equivalent to `XXH3_64bits_withSeed()`. - */ -XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed); -/* - * XXH3_64bits_reset_withSecret(): - * `secret` is referenced, it _must outlive_ the hash streaming session. - * Similar to one-shot API, `secretSize` must be >= `XXH3_SECRET_SIZE_MIN`, - * and the quality of produced hash values depends on secret's entropy - * (secret's content should look like a bunch of random bytes). - * When in doubt about the randomness of a candidate `secret`, - * consider employing `XXH3_generateSecret()` instead (see below). - */ -XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize); - -XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH3_state_t* statePtr, const void* input, size_t length); -XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* statePtr); - -/* note : canonical representation of XXH3 is the same as XXH64 - * since they both produce XXH64_hash_t values */ - - -/*-********************************************************************** -* XXH3 128-bit variant -************************************************************************/ - -/*! - * @brief The return value from 128-bit hashes. - * - * Stored in little endian order, although the fields themselves are in native - * endianness. - */ -typedef struct { - XXH64_hash_t low64; /*!< `value & 0xFFFFFFFFFFFFFFFF` */ - XXH64_hash_t high64; /*!< `value >> 64` */ -} XXH128_hash_t; - -XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* data, size_t len); -XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, XXH64_hash_t seed); -XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize); - -/******* Streaming *******/ -/* - * Streaming requires state maintenance. - * This operation costs memory and CPU. - * As a consequence, streaming is slower than one-shot hashing. - * For better performance, prefer one-shot functions whenever applicable. - * - * XXH3_128bits uses the same XXH3_state_t as XXH3_64bits(). - * Use already declared XXH3_createState() and XXH3_freeState(). - * - * All reset and streaming functions have same meaning as their 64-bit counterpart. - */ - -XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr); -XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed); -XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize); - -XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH3_state_t* statePtr, const void* input, size_t length); -XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* statePtr); - -/* Following helper functions make it possible to compare XXH128_hast_t values. - * Since XXH128_hash_t is a structure, this capability is not offered by the language. - * Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */ - -/*! - * XXH128_isEqual(): - * Return: 1 if `h1` and `h2` are equal, 0 if they are not. - */ -XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2); - -/*! - * XXH128_cmp(): - * - * This comparator is compatible with stdlib's `qsort()`/`bsearch()`. - * - * return: >0 if *h128_1 > *h128_2 - * =0 if *h128_1 == *h128_2 - * <0 if *h128_1 < *h128_2 - */ -XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2); - - -/******* Canonical representation *******/ -typedef struct { unsigned char digest[sizeof(XXH128_hash_t)]; } XXH128_canonical_t; -XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash); -XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src); - - -#endif /* !XXH_NO_XXH3 */ -#endif /* XXH_NO_LONG_LONG */ - -/*! - * @} - */ -#endif /* XXHASH_H_5627135585666179 */ - - - -#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) -#define XXHASH_H_STATIC_13879238742 -/* **************************************************************************** - * This section contains declarations which are not guaranteed to remain stable. - * They may change in future versions, becoming incompatible with a different - * version of the library. - * These declarations should only be used with static linking. - * Never use them in association with dynamic linking! - ***************************************************************************** */ - -/* - * These definitions are only present to allow static allocation - * of XXH states, on stack or in a struct, for example. - * Never **ever** access their members directly. - */ - -/*! - * @internal - * @brief Structure for XXH32 streaming API. - * - * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY, - * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is - * an opaque type. This allows fields to safely be changed. - * - * Typedef'd to @ref XXH32_state_t. - * Do not access the members of this struct directly. - * @see XXH64_state_s, XXH3_state_s - */ -struct XXH32_state_s { - XXH32_hash_t total_len_32; /*!< Total length hashed, modulo 2^32 */ - XXH32_hash_t large_len; /*!< Whether the hash is >= 16 (handles @ref total_len_32 overflow) */ - XXH32_hash_t v[4]; /*!< Accumulator lanes */ - XXH32_hash_t mem32[4]; /*!< Internal buffer for partial reads. Treated as unsigned char[16]. */ - XXH32_hash_t memsize; /*!< Amount of data in @ref mem32 */ - XXH32_hash_t reserved; /*!< Reserved field. Do not read nor write to it. */ -}; /* typedef'd to XXH32_state_t */ - - -#ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */ - -/*! - * @internal - * @brief Structure for XXH64 streaming API. - * - * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY, - * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is - * an opaque type. This allows fields to safely be changed. - * - * Typedef'd to @ref XXH64_state_t. - * Do not access the members of this struct directly. - * @see XXH32_state_s, XXH3_state_s - */ -struct XXH64_state_s { - XXH64_hash_t total_len; /*!< Total length hashed. This is always 64-bit. */ - XXH64_hash_t v[4]; /*!< Accumulator lanes */ - XXH64_hash_t mem64[4]; /*!< Internal buffer for partial reads. Treated as unsigned char[32]. */ - XXH32_hash_t memsize; /*!< Amount of data in @ref mem64 */ - XXH32_hash_t reserved32; /*!< Reserved field, needed for padding anyways*/ - XXH64_hash_t reserved64; /*!< Reserved field. Do not read or write to it. */ -}; /* typedef'd to XXH64_state_t */ - - -#ifndef XXH_NO_XXH3 - -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* >= C11 */ -# include -# define XXH_ALIGN(n) alignas(n) -#elif defined(__cplusplus) && (__cplusplus >= 201103L) /* >= C++11 */ -/* In C++ alignas() is a keyword */ -# define XXH_ALIGN(n) alignas(n) -#elif defined(__GNUC__) -# define XXH_ALIGN(n) __attribute__ ((aligned(n))) -#elif defined(_MSC_VER) -# define XXH_ALIGN(n) __declspec(align(n)) -#else -# define XXH_ALIGN(n) /* disabled */ -#endif - -/* Old GCC versions only accept the attribute after the type in structures. */ -#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) /* C11+ */ \ - && ! (defined(__cplusplus) && (__cplusplus >= 201103L)) /* >= C++11 */ \ - && defined(__GNUC__) -# define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align) -#else -# define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type -#endif - -/*! - * @brief The size of the internal XXH3 buffer. - * - * This is the optimal update size for incremental hashing. - * - * @see XXH3_64b_update(), XXH3_128b_update(). - */ -#define XXH3_INTERNALBUFFER_SIZE 256 - -/*! - * @brief Default size of the secret buffer (and @ref XXH3_kSecret). - * - * This is the size used in @ref XXH3_kSecret and the seeded functions. - * - * Not to be confused with @ref XXH3_SECRET_SIZE_MIN. - */ -#define XXH3_SECRET_DEFAULT_SIZE 192 - -/*! - * @internal - * @brief Structure for XXH3 streaming API. - * - * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY, - * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. - * Otherwise it is an opaque type. - * Never use this definition in combination with dynamic library. - * This allows fields to safely be changed in the future. - * - * @note ** This structure has a strict alignment requirement of 64 bytes!! ** - * Do not allocate this with `malloc()` or `new`, - * it will not be sufficiently aligned. - * Use @ref XXH3_createState() and @ref XXH3_freeState(), or stack allocation. - * - * Typedef'd to @ref XXH3_state_t. - * Do never access the members of this struct directly. - * - * @see XXH3_INITSTATE() for stack initialization. - * @see XXH3_createState(), XXH3_freeState(). - * @see XXH32_state_s, XXH64_state_s - */ -struct XXH3_state_s { - XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]); - /*!< The 8 accumulators. Similar to `vN` in @ref XXH32_state_s::v1 and @ref XXH64_state_s */ - XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]); - /*!< Used to store a custom secret generated from a seed. */ - XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]); - /*!< The internal buffer. @see XXH32_state_s::mem32 */ - XXH32_hash_t bufferedSize; - /*!< The amount of memory in @ref buffer, @see XXH32_state_s::memsize */ - XXH32_hash_t useSeed; - /*!< Reserved field. Needed for padding on 64-bit. */ - size_t nbStripesSoFar; - /*!< Number or stripes processed. */ - XXH64_hash_t totalLen; - /*!< Total length hashed. 64-bit even on 32-bit targets. */ - size_t nbStripesPerBlock; - /*!< Number of stripes per block. */ - size_t secretLimit; - /*!< Size of @ref customSecret or @ref extSecret */ - XXH64_hash_t seed; - /*!< Seed for _withSeed variants. Must be zero otherwise, @see XXH3_INITSTATE() */ - XXH64_hash_t reserved64; - /*!< Reserved field. */ - const unsigned char* extSecret; - /*!< Reference to an external secret for the _withSecret variants, NULL - * for other variants. */ - /* note: there may be some padding at the end due to alignment on 64 bytes */ -}; /* typedef'd to XXH3_state_t */ - -#undef XXH_ALIGN_MEMBER - -/*! - * @brief Initializes a stack-allocated `XXH3_state_s`. - * - * When the @ref XXH3_state_t structure is merely emplaced on stack, - * it should be initialized with XXH3_INITSTATE() or a memset() - * in case its first reset uses XXH3_NNbits_reset_withSeed(). - * This init can be omitted if the first reset uses default or _withSecret mode. - * This operation isn't necessary when the state is created with XXH3_createState(). - * Note that this doesn't prepare the state for a streaming operation, - * it's still necessary to use XXH3_NNbits_reset*() afterwards. - */ -#define XXH3_INITSTATE(XXH3_state_ptr) { (XXH3_state_ptr)->seed = 0; } - - -/* XXH128() : - * simple alias to pre-selected XXH3_128bits variant - */ -XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, XXH64_hash_t seed); - - -/* === Experimental API === */ -/* Symbols defined below must be considered tied to a specific library version. */ - -/* - * XXH3_generateSecret(): - * - * Derive a high-entropy secret from any user-defined content, named customSeed. - * The generated secret can be used in combination with `*_withSecret()` functions. - * The `_withSecret()` variants are useful to provide a higher level of protection than 64-bit seed, - * as it becomes much more difficult for an external actor to guess how to impact the calculation logic. - * - * The function accepts as input a custom seed of any length and any content, - * and derives from it a high-entropy secret of length @secretSize - * into an already allocated buffer @secretBuffer. - * @secretSize must be >= XXH3_SECRET_SIZE_MIN - * - * The generated secret can then be used with any `*_withSecret()` variant. - * Functions `XXH3_128bits_withSecret()`, `XXH3_64bits_withSecret()`, - * `XXH3_128bits_reset_withSecret()` and `XXH3_64bits_reset_withSecret()` - * are part of this list. They all accept a `secret` parameter - * which must be large enough for implementation reasons (>= XXH3_SECRET_SIZE_MIN) - * _and_ feature very high entropy (consist of random-looking bytes). - * These conditions can be a high bar to meet, so - * XXH3_generateSecret() can be employed to ensure proper quality. - * - * customSeed can be anything. It can have any size, even small ones, - * and its content can be anything, even "poor entropy" sources such as a bunch of zeroes. - * The resulting `secret` will nonetheless provide all required qualities. - * - * When customSeedSize > 0, supplying NULL as customSeed is undefined behavior. - */ -XXH_PUBLIC_API XXH_errorcode XXH3_generateSecret(void* secretBuffer, size_t secretSize, const void* customSeed, size_t customSeedSize); - - -/* - * XXH3_generateSecret_fromSeed(): - * - * Generate the same secret as the _withSeed() variants. - * - * The resulting secret has a length of XXH3_SECRET_DEFAULT_SIZE (necessarily). - * @secretBuffer must be already allocated, of size at least XXH3_SECRET_DEFAULT_SIZE bytes. - * - * The generated secret can be used in combination with - *`*_withSecret()` and `_withSecretandSeed()` variants. - * This generator is notably useful in combination with `_withSecretandSeed()`, - * as a way to emulate a faster `_withSeed()` variant. - */ -XXH_PUBLIC_API void XXH3_generateSecret_fromSeed(void* secretBuffer, XXH64_hash_t seed); - -/* - * *_withSecretandSeed() : - * These variants generate hash values using either - * @seed for "short" keys (< XXH3_MIDSIZE_MAX = 240 bytes) - * or @secret for "large" keys (>= XXH3_MIDSIZE_MAX). - * - * This generally benefits speed, compared to `_withSeed()` or `_withSecret()`. - * `_withSeed()` has to generate the secret on the fly for "large" keys. - * It's fast, but can be perceptible for "not so large" keys (< 1 KB). - * `_withSecret()` has to generate the masks on the fly for "small" keys, - * which requires more instructions than _withSeed() variants. - * Therefore, _withSecretandSeed variant combines the best of both worlds. - * - * When @secret has been generated by XXH3_generateSecret_fromSeed(), - * this variant produces *exactly* the same results as `_withSeed()` variant, - * hence offering only a pure speed benefit on "large" input, - * by skipping the need to regenerate the secret for every large input. - * - * Another usage scenario is to hash the secret to a 64-bit hash value, - * for example with XXH3_64bits(), which then becomes the seed, - * and then employ both the seed and the secret in _withSecretandSeed(). - * On top of speed, an added benefit is that each bit in the secret - * has a 50% chance to swap each bit in the output, - * via its impact to the seed. - * This is not guaranteed when using the secret directly in "small data" scenarios, - * because only portions of the secret are employed for small data. - */ -XXH_PUBLIC_API XXH64_hash_t -XXH3_64bits_withSecretandSeed(const void* data, size_t len, - const void* secret, size_t secretSize, - XXH64_hash_t seed); - -XXH_PUBLIC_API XXH128_hash_t -XXH3_128bits_withSecretandSeed(const void* data, size_t len, - const void* secret, size_t secretSize, - XXH64_hash_t seed64); - -XXH_PUBLIC_API XXH_errorcode -XXH3_64bits_reset_withSecretandSeed(XXH3_state_t* statePtr, - const void* secret, size_t secretSize, - XXH64_hash_t seed64); - -XXH_PUBLIC_API XXH_errorcode -XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr, - const void* secret, size_t secretSize, - XXH64_hash_t seed64); - - -#endif /* XXH_NO_XXH3 */ -#endif /* XXH_NO_LONG_LONG */ -#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) -# define XXH_IMPLEMENTATION -#endif - -#endif /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */ - - -/* ======================================================================== */ -/* ======================================================================== */ -/* ======================================================================== */ - - -/*-********************************************************************** - * xxHash implementation - *-********************************************************************** - * xxHash's implementation used to be hosted inside xxhash.c. - * - * However, inlining requires implementation to be visible to the compiler, - * hence be included alongside the header. - * Previously, implementation was hosted inside xxhash.c, - * which was then #included when inlining was activated. - * This construction created issues with a few build and install systems, - * as it required xxhash.c to be stored in /include directory. - * - * xxHash implementation is now directly integrated within xxhash.h. - * As a consequence, xxhash.c is no longer needed in /include. - * - * xxhash.c is still available and is still useful. - * In a "normal" setup, when xxhash is not inlined, - * xxhash.h only exposes the prototypes and public symbols, - * while xxhash.c can be built into an object file xxhash.o - * which can then be linked into the final binary. - ************************************************************************/ - -#if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \ - || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387) -# define XXH_IMPLEM_13a8737387 - -/* ************************************* -* Tuning parameters -***************************************/ - -/*! - * @defgroup tuning Tuning parameters - * @{ - * - * Various macros to control xxHash's behavior. - */ -#ifdef XXH_DOXYGEN -/*! - * @brief Define this to disable 64-bit code. - * - * Useful if only using the @ref xxh32_family and you have a strict C90 compiler. - */ -# define XXH_NO_LONG_LONG -# undef XXH_NO_LONG_LONG /* don't actually */ -/*! - * @brief Controls how unaligned memory is accessed. - * - * By default, access to unaligned memory is controlled by `memcpy()`, which is - * safe and portable. - * - * Unfortunately, on some target/compiler combinations, the generated assembly - * is sub-optimal. - * - * The below switch allow selection of a different access method - * in the search for improved performance. - * - * @par Possible options: - * - * - `XXH_FORCE_MEMORY_ACCESS=0` (default): `memcpy` - * @par - * Use `memcpy()`. Safe and portable. Note that most modern compilers will - * eliminate the function call and treat it as an unaligned access. - * - * - `XXH_FORCE_MEMORY_ACCESS=1`: `__attribute__((packed))` - * @par - * Depends on compiler extensions and is therefore not portable. - * This method is safe _if_ your compiler supports it, - * and *generally* as fast or faster than `memcpy`. - * - * - `XXH_FORCE_MEMORY_ACCESS=2`: Direct cast - * @par - * Casts directly and dereferences. This method doesn't depend on the - * compiler, but it violates the C standard as it directly dereferences an - * unaligned pointer. It can generate buggy code on targets which do not - * support unaligned memory accesses, but in some circumstances, it's the - * only known way to get the most performance. - * - * - `XXH_FORCE_MEMORY_ACCESS=3`: Byteshift - * @par - * Also portable. This can generate the best code on old compilers which don't - * inline small `memcpy()` calls, and it might also be faster on big-endian - * systems which lack a native byteswap instruction. However, some compilers - * will emit literal byteshifts even if the target supports unaligned access. - * . - * - * @warning - * Methods 1 and 2 rely on implementation-defined behavior. Use these with - * care, as what works on one compiler/platform/optimization level may cause - * another to read garbage data or even crash. - * - * See http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html for details. - * - * Prefer these methods in priority order (0 > 3 > 1 > 2) - */ -# define XXH_FORCE_MEMORY_ACCESS 0 - -/*! - * @def XXH_FORCE_ALIGN_CHECK - * @brief If defined to non-zero, adds a special path for aligned inputs (XXH32() - * and XXH64() only). - * - * This is an important performance trick for architectures without decent - * unaligned memory access performance. - * - * It checks for input alignment, and when conditions are met, uses a "fast - * path" employing direct 32-bit/64-bit reads, resulting in _dramatically - * faster_ read speed. - * - * The check costs one initial branch per hash, which is generally negligible, - * but not zero. - * - * Moreover, it's not useful to generate an additional code path if memory - * access uses the same instruction for both aligned and unaligned - * addresses (e.g. x86 and aarch64). - * - * In these cases, the alignment check can be removed by setting this macro to 0. - * Then the code will always use unaligned memory access. - * Align check is automatically disabled on x86, x64 & arm64, - * which are platforms known to offer good unaligned memory accesses performance. - * - * This option does not affect XXH3 (only XXH32 and XXH64). - */ -# define XXH_FORCE_ALIGN_CHECK 0 - -/*! - * @def XXH_NO_INLINE_HINTS - * @brief When non-zero, sets all functions to `static`. - * - * By default, xxHash tries to force the compiler to inline almost all internal - * functions. - * - * This can usually improve performance due to reduced jumping and improved - * constant folding, but significantly increases the size of the binary which - * might not be favorable. - * - * Additionally, sometimes the forced inlining can be detrimental to performance, - * depending on the architecture. - * - * XXH_NO_INLINE_HINTS marks all internal functions as static, giving the - * compiler full control on whether to inline or not. - * - * When not optimizing (-O0), optimizing for size (-Os, -Oz), or using - * -fno-inline with GCC or Clang, this will automatically be defined. - */ -# define XXH_NO_INLINE_HINTS 0 - -/*! - * @def XXH32_ENDJMP - * @brief Whether to use a jump for `XXH32_finalize`. - * - * For performance, `XXH32_finalize` uses multiple branches in the finalizer. - * This is generally preferable for performance, - * but depending on exact architecture, a jmp may be preferable. - * - * This setting is only possibly making a difference for very small inputs. - */ -# define XXH32_ENDJMP 0 - -/*! - * @internal - * @brief Redefines old internal names. - * - * For compatibility with code that uses xxHash's internals before the names - * were changed to improve namespacing. There is no other reason to use this. - */ -# define XXH_OLD_NAMES -# undef XXH_OLD_NAMES /* don't actually use, it is ugly. */ -#endif /* XXH_DOXYGEN */ -/*! - * @} - */ - -#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ - /* prefer __packed__ structures (method 1) for gcc on armv7+ and mips */ -# if !defined(__clang__) && \ -( \ - (defined(__INTEL_COMPILER) && !defined(_WIN32)) || \ - ( \ - defined(__GNUC__) && ( \ - (defined(__ARM_ARCH) && __ARM_ARCH >= 7) || \ - ( \ - defined(__mips__) && \ - (__mips <= 5 || __mips_isa_rev < 6) && \ - (!defined(__mips16) || defined(__mips_mips16e2)) \ - ) \ - ) \ - ) \ -) -# define XXH_FORCE_MEMORY_ACCESS 1 -# endif -#endif - -#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */ -# if defined(__i386) || defined(__x86_64__) || defined(__aarch64__) \ - || defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) /* visual */ -# define XXH_FORCE_ALIGN_CHECK 0 -# else -# define XXH_FORCE_ALIGN_CHECK 1 -# endif -#endif - -#ifndef XXH_NO_INLINE_HINTS -# if defined(__OPTIMIZE_SIZE__) /* -Os, -Oz */ \ - || defined(__NO_INLINE__) /* -O0, -fno-inline */ -# define XXH_NO_INLINE_HINTS 1 -# else -# define XXH_NO_INLINE_HINTS 0 -# endif -#endif - -#ifndef XXH32_ENDJMP -/* generally preferable for performance */ -# define XXH32_ENDJMP 0 -#endif - -/*! - * @defgroup impl Implementation - * @{ - */ - - -/* ************************************* -* Includes & Memory related functions -***************************************/ -/* Modify the local functions below should you wish to use some other memory routines */ -/* for ZSTD_malloc(), ZSTD_free() */ -#define ZSTD_DEPS_NEED_MALLOC -#include "zstd_deps.h" /* size_t, ZSTD_malloc, ZSTD_free, ZSTD_memcpy */ -static void* XXH_malloc(size_t s) { return ZSTD_malloc(s); } -static void XXH_free (void* p) { ZSTD_free(p); } -static void* XXH_memcpy(void* dest, const void* src, size_t size) { return ZSTD_memcpy(dest,src,size); } - - -/* ************************************* -* Compiler Specific Options -***************************************/ -#ifdef _MSC_VER /* Visual Studio warning fix */ -# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ -#endif - -#if XXH_NO_INLINE_HINTS /* disable inlining hints */ -# if defined(__GNUC__) || defined(__clang__) -# define XXH_FORCE_INLINE static __attribute__((unused)) -# else -# define XXH_FORCE_INLINE static -# endif -# define XXH_NO_INLINE static -/* enable inlining hints */ -#elif defined(__GNUC__) || defined(__clang__) -# define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused)) -# define XXH_NO_INLINE static __attribute__((noinline)) -#elif defined(_MSC_VER) /* Visual Studio */ -# define XXH_FORCE_INLINE static __forceinline -# define XXH_NO_INLINE static __declspec(noinline) -#elif defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* C99 */ -# define XXH_FORCE_INLINE static inline -# define XXH_NO_INLINE static -#else -# define XXH_FORCE_INLINE static -# define XXH_NO_INLINE static -#endif - - - -/* ************************************* -* Debug -***************************************/ -/*! - * @ingroup tuning - * @def XXH_DEBUGLEVEL - * @brief Sets the debugging level. - * - * XXH_DEBUGLEVEL is expected to be defined externally, typically via the - * compiler's command line options. The value must be a number. - */ -#ifndef XXH_DEBUGLEVEL -# ifdef DEBUGLEVEL /* backwards compat */ -# define XXH_DEBUGLEVEL DEBUGLEVEL -# else -# define XXH_DEBUGLEVEL 0 -# endif -#endif - -#if (XXH_DEBUGLEVEL>=1) -# include /* note: can still be disabled with NDEBUG */ -# define XXH_ASSERT(c) assert(c) -#else -# define XXH_ASSERT(c) ((void)0) -#endif - -/* note: use after variable declarations */ -#ifndef XXH_STATIC_ASSERT -# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */ -# include -# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { static_assert((c),m); } while(0) -# elif defined(__cplusplus) && (__cplusplus >= 201103L) /* C++11 */ -# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { static_assert((c),m); } while(0) -# else -# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { struct xxh_sa { char x[(c) ? 1 : -1]; }; } while(0) -# endif -# define XXH_STATIC_ASSERT(c) XXH_STATIC_ASSERT_WITH_MESSAGE((c),#c) -#endif - -/*! - * @internal - * @def XXH_COMPILER_GUARD(var) - * @brief Used to prevent unwanted optimizations for @p var. - * - * It uses an empty GCC inline assembly statement with a register constraint - * which forces @p var into a general purpose register (eg eax, ebx, ecx - * on x86) and marks it as modified. - * - * This is used in a few places to avoid unwanted autovectorization (e.g. - * XXH32_round()). All vectorization we want is explicit via intrinsics, - * and _usually_ isn't wanted elsewhere. - * - * We also use it to prevent unwanted constant folding for AArch64 in - * XXH3_initCustomSecret_scalar(). - */ -#if defined(__GNUC__) || defined(__clang__) -# define XXH_COMPILER_GUARD(var) __asm__ __volatile__("" : "+r" (var)) -#else -# define XXH_COMPILER_GUARD(var) ((void)0) -#endif - -/* ************************************* -* Basic Types -***************************************/ -#if !defined (__VMS) \ - && (defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) -# include - typedef uint8_t xxh_u8; -#else - typedef unsigned char xxh_u8; -#endif -typedef XXH32_hash_t xxh_u32; - -#ifdef XXH_OLD_NAMES -# define BYTE xxh_u8 -# define U8 xxh_u8 -# define U32 xxh_u32 -#endif - -/* *** Memory access *** */ - -/*! - * @internal - * @fn xxh_u32 XXH_read32(const void* ptr) - * @brief Reads an unaligned 32-bit integer from @p ptr in native endianness. - * - * Affected by @ref XXH_FORCE_MEMORY_ACCESS. - * - * @param ptr The pointer to read from. - * @return The 32-bit native endian integer from the bytes at @p ptr. - */ - -/*! - * @internal - * @fn xxh_u32 XXH_readLE32(const void* ptr) - * @brief Reads an unaligned 32-bit little endian integer from @p ptr. - * - * Affected by @ref XXH_FORCE_MEMORY_ACCESS. - * - * @param ptr The pointer to read from. - * @return The 32-bit little endian integer from the bytes at @p ptr. - */ - -/*! - * @internal - * @fn xxh_u32 XXH_readBE32(const void* ptr) - * @brief Reads an unaligned 32-bit big endian integer from @p ptr. - * - * Affected by @ref XXH_FORCE_MEMORY_ACCESS. - * - * @param ptr The pointer to read from. - * @return The 32-bit big endian integer from the bytes at @p ptr. - */ - -/*! - * @internal - * @fn xxh_u32 XXH_readLE32_align(const void* ptr, XXH_alignment align) - * @brief Like @ref XXH_readLE32(), but has an option for aligned reads. - * - * Affected by @ref XXH_FORCE_MEMORY_ACCESS. - * Note that when @ref XXH_FORCE_ALIGN_CHECK == 0, the @p align parameter is - * always @ref XXH_alignment::XXH_unaligned. - * - * @param ptr The pointer to read from. - * @param align Whether @p ptr is aligned. - * @pre - * If @p align == @ref XXH_alignment::XXH_aligned, @p ptr must be 4 byte - * aligned. - * @return The 32-bit little endian integer from the bytes at @p ptr. - */ - -#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) -/* - * Manual byteshift. Best for old compilers which don't inline memcpy. - * We actually directly use XXH_readLE32 and XXH_readBE32. - */ -#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) - -/* - * Force direct memory access. Only works on CPU which support unaligned memory - * access in hardware. - */ -static xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr; } - -#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) - -/* - * __pack instructions are safer but compiler specific, hence potentially - * problematic for some compilers. - * - * Currently only defined for GCC and ICC. - */ -#ifdef XXH_OLD_NAMES -typedef union { xxh_u32 u32; } __attribute__((packed)) unalign; -#endif -static xxh_u32 XXH_read32(const void* ptr) -{ - typedef union { xxh_u32 u32; } __attribute__((packed)) xxh_unalign; - return ((const xxh_unalign*)ptr)->u32; -} - -#else - -/* - * Portable and safe solution. Generally efficient. - * see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html - */ -static xxh_u32 XXH_read32(const void* memPtr) -{ - xxh_u32 val; - XXH_memcpy(&val, memPtr, sizeof(val)); - return val; -} - -#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ - - -/* *** Endianness *** */ - -/*! - * @ingroup tuning - * @def XXH_CPU_LITTLE_ENDIAN - * @brief Whether the target is little endian. - * - * Defined to 1 if the target is little endian, or 0 if it is big endian. - * It can be defined externally, for example on the compiler command line. - * - * If it is not defined, - * a runtime check (which is usually constant folded) is used instead. - * - * @note - * This is not necessarily defined to an integer constant. - * - * @see XXH_isLittleEndian() for the runtime check. - */ -#ifndef XXH_CPU_LITTLE_ENDIAN -/* - * Try to detect endianness automatically, to avoid the nonstandard behavior - * in `XXH_isLittleEndian()` - */ -# if defined(_WIN32) /* Windows is always little endian */ \ - || defined(__LITTLE_ENDIAN__) \ - || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) -# define XXH_CPU_LITTLE_ENDIAN 1 -# elif defined(__BIG_ENDIAN__) \ - || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) -# define XXH_CPU_LITTLE_ENDIAN 0 -# else -/*! - * @internal - * @brief Runtime check for @ref XXH_CPU_LITTLE_ENDIAN. - * - * Most compilers will constant fold this. - */ -static int XXH_isLittleEndian(void) -{ - /* - * Portable and well-defined behavior. - * Don't use static: it is detrimental to performance. - */ - const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 }; - return one.c[0]; -} -# define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian() -# endif -#endif - - - - -/* **************************************** -* Compiler-specific Functions and Macros -******************************************/ -#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) - -#ifdef __has_builtin -# define XXH_HAS_BUILTIN(x) __has_builtin(x) -#else -# define XXH_HAS_BUILTIN(x) 0 -#endif - -/*! - * @internal - * @def XXH_rotl32(x,r) - * @brief 32-bit rotate left. - * - * @param x The 32-bit integer to be rotated. - * @param r The number of bits to rotate. - * @pre - * @p r > 0 && @p r < 32 - * @note - * @p x and @p r may be evaluated multiple times. - * @return The rotated result. - */ -#if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) \ - && XXH_HAS_BUILTIN(__builtin_rotateleft64) -# define XXH_rotl32 __builtin_rotateleft32 -# define XXH_rotl64 __builtin_rotateleft64 -/* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */ -#elif defined(_MSC_VER) -# define XXH_rotl32(x,r) _rotl(x,r) -# define XXH_rotl64(x,r) _rotl64(x,r) -#else -# define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) -# define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r)))) -#endif - -/*! - * @internal - * @fn xxh_u32 XXH_swap32(xxh_u32 x) - * @brief A 32-bit byteswap. - * - * @param x The 32-bit integer to byteswap. - * @return @p x, byteswapped. - */ -#if defined(_MSC_VER) /* Visual Studio */ -# define XXH_swap32 _byteswap_ulong -#elif XXH_GCC_VERSION >= 403 -# define XXH_swap32 __builtin_bswap32 -#else -static xxh_u32 XXH_swap32 (xxh_u32 x) -{ - return ((x << 24) & 0xff000000 ) | - ((x << 8) & 0x00ff0000 ) | - ((x >> 8) & 0x0000ff00 ) | - ((x >> 24) & 0x000000ff ); -} -#endif - - -/* *************************** -* Memory reads -*****************************/ - -/*! - * @internal - * @brief Enum to indicate whether a pointer is aligned. - */ -typedef enum { - XXH_aligned, /*!< Aligned */ - XXH_unaligned /*!< Possibly unaligned */ -} XXH_alignment; - -/* - * XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. - * - * This is ideal for older compilers which don't inline memcpy. - */ -#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) - -XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* memPtr) -{ - const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; - return bytePtr[0] - | ((xxh_u32)bytePtr[1] << 8) - | ((xxh_u32)bytePtr[2] << 16) - | ((xxh_u32)bytePtr[3] << 24); -} - -XXH_FORCE_INLINE xxh_u32 XXH_readBE32(const void* memPtr) -{ - const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; - return bytePtr[3] - | ((xxh_u32)bytePtr[2] << 8) - | ((xxh_u32)bytePtr[1] << 16) - | ((xxh_u32)bytePtr[0] << 24); -} - -#else -XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr)); -} - -static xxh_u32 XXH_readBE32(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr); -} -#endif - -XXH_FORCE_INLINE xxh_u32 -XXH_readLE32_align(const void* ptr, XXH_alignment align) -{ - if (align==XXH_unaligned) { - return XXH_readLE32(ptr); - } else { - return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr); - } -} - - -/* ************************************* -* Misc -***************************************/ -/*! @ingroup public */ -XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; } - - -/* ******************************************************************* -* 32-bit hash functions -*********************************************************************/ -/*! - * @} - * @defgroup xxh32_impl XXH32 implementation - * @ingroup impl - * @{ - */ - /* #define instead of static const, to be used as initializers */ -#define XXH_PRIME32_1 0x9E3779B1U /*!< 0b10011110001101110111100110110001 */ -#define XXH_PRIME32_2 0x85EBCA77U /*!< 0b10000101111010111100101001110111 */ -#define XXH_PRIME32_3 0xC2B2AE3DU /*!< 0b11000010101100101010111000111101 */ -#define XXH_PRIME32_4 0x27D4EB2FU /*!< 0b00100111110101001110101100101111 */ -#define XXH_PRIME32_5 0x165667B1U /*!< 0b00010110010101100110011110110001 */ - -#ifdef XXH_OLD_NAMES -# define PRIME32_1 XXH_PRIME32_1 -# define PRIME32_2 XXH_PRIME32_2 -# define PRIME32_3 XXH_PRIME32_3 -# define PRIME32_4 XXH_PRIME32_4 -# define PRIME32_5 XXH_PRIME32_5 -#endif - -/*! - * @internal - * @brief Normal stripe processing routine. - * - * This shuffles the bits so that any bit from @p input impacts several bits in - * @p acc. - * - * @param acc The accumulator lane. - * @param input The stripe of input to mix. - * @return The mixed accumulator lane. - */ -static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input) -{ - acc += input * XXH_PRIME32_2; - acc = XXH_rotl32(acc, 13); - acc *= XXH_PRIME32_1; -#if (defined(__SSE4_1__) || defined(__aarch64__)) && !defined(XXH_ENABLE_AUTOVECTORIZE) - /* - * UGLY HACK: - * A compiler fence is the only thing that prevents GCC and Clang from - * autovectorizing the XXH32 loop (pragmas and attributes don't work for some - * reason) without globally disabling SSE4.1. - * - * The reason we want to avoid vectorization is because despite working on - * 4 integers at a time, there are multiple factors slowing XXH32 down on - * SSE4: - * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on - * newer chips!) making it slightly slower to multiply four integers at - * once compared to four integers independently. Even when pmulld was - * fastest, Sandy/Ivy Bridge, it is still not worth it to go into SSE - * just to multiply unless doing a long operation. - * - * - Four instructions are required to rotate, - * movqda tmp, v // not required with VEX encoding - * pslld tmp, 13 // tmp <<= 13 - * psrld v, 19 // x >>= 19 - * por v, tmp // x |= tmp - * compared to one for scalar: - * roll v, 13 // reliably fast across the board - * shldl v, v, 13 // Sandy Bridge and later prefer this for some reason - * - * - Instruction level parallelism is actually more beneficial here because - * the SIMD actually serializes this operation: While v1 is rotating, v2 - * can load data, while v3 can multiply. SSE forces them to operate - * together. - * - * This is also enabled on AArch64, as Clang autovectorizes it incorrectly - * and it is pointless writing a NEON implementation that is basically the - * same speed as scalar for XXH32. - */ - XXH_COMPILER_GUARD(acc); -#endif - return acc; -} - -/*! - * @internal - * @brief Mixes all bits to finalize the hash. - * - * The final mix ensures that all input bits have a chance to impact any bit in - * the output digest, resulting in an unbiased distribution. - * - * @param h32 The hash to avalanche. - * @return The avalanched hash. - */ -static xxh_u32 XXH32_avalanche(xxh_u32 h32) -{ - h32 ^= h32 >> 15; - h32 *= XXH_PRIME32_2; - h32 ^= h32 >> 13; - h32 *= XXH_PRIME32_3; - h32 ^= h32 >> 16; - return(h32); -} - -#define XXH_get32bits(p) XXH_readLE32_align(p, align) - -/*! - * @internal - * @brief Processes the last 0-15 bytes of @p ptr. - * - * There may be up to 15 bytes remaining to consume from the input. - * This final stage will digest them to ensure that all input bytes are present - * in the final mix. - * - * @param h32 The hash to finalize. - * @param ptr The pointer to the remaining input. - * @param len The remaining length, modulo 16. - * @param align Whether @p ptr is aligned. - * @return The finalized hash. - */ -static xxh_u32 -XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align) -{ -#define XXH_PROCESS1 do { \ - h32 += (*ptr++) * XXH_PRIME32_5; \ - h32 = XXH_rotl32(h32, 11) * XXH_PRIME32_1; \ -} while (0) - -#define XXH_PROCESS4 do { \ - h32 += XXH_get32bits(ptr) * XXH_PRIME32_3; \ - ptr += 4; \ - h32 = XXH_rotl32(h32, 17) * XXH_PRIME32_4; \ -} while (0) - - if (ptr==NULL) XXH_ASSERT(len == 0); - - /* Compact rerolled version; generally faster */ - if (!XXH32_ENDJMP) { - len &= 15; - while (len >= 4) { - XXH_PROCESS4; - len -= 4; - } - while (len > 0) { - XXH_PROCESS1; - --len; - } - return XXH32_avalanche(h32); - } else { - switch(len&15) /* or switch(bEnd - p) */ { - case 12: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 8: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 4: XXH_PROCESS4; - return XXH32_avalanche(h32); - - case 13: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 9: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 5: XXH_PROCESS4; - XXH_PROCESS1; - return XXH32_avalanche(h32); - - case 14: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 10: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 6: XXH_PROCESS4; - XXH_PROCESS1; - XXH_PROCESS1; - return XXH32_avalanche(h32); - - case 15: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 11: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 7: XXH_PROCESS4; - XXH_FALLTHROUGH; - case 3: XXH_PROCESS1; - XXH_FALLTHROUGH; - case 2: XXH_PROCESS1; - XXH_FALLTHROUGH; - case 1: XXH_PROCESS1; - XXH_FALLTHROUGH; - case 0: return XXH32_avalanche(h32); - } - XXH_ASSERT(0); - return h32; /* reaching this point is deemed impossible */ - } -} - -#ifdef XXH_OLD_NAMES -# define PROCESS1 XXH_PROCESS1 -# define PROCESS4 XXH_PROCESS4 -#else -# undef XXH_PROCESS1 -# undef XXH_PROCESS4 -#endif - -/*! - * @internal - * @brief The implementation for @ref XXH32(). - * - * @param input , len , seed Directly passed from @ref XXH32(). - * @param align Whether @p input is aligned. - * @return The calculated hash. - */ -XXH_FORCE_INLINE xxh_u32 -XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align) -{ - xxh_u32 h32; - - if (input==NULL) XXH_ASSERT(len == 0); - - if (len>=16) { - const xxh_u8* const bEnd = input + len; - const xxh_u8* const limit = bEnd - 15; - xxh_u32 v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2; - xxh_u32 v2 = seed + XXH_PRIME32_2; - xxh_u32 v3 = seed + 0; - xxh_u32 v4 = seed - XXH_PRIME32_1; - - do { - v1 = XXH32_round(v1, XXH_get32bits(input)); input += 4; - v2 = XXH32_round(v2, XXH_get32bits(input)); input += 4; - v3 = XXH32_round(v3, XXH_get32bits(input)); input += 4; - v4 = XXH32_round(v4, XXH_get32bits(input)); input += 4; - } while (input < limit); - - h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7) - + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18); - } else { - h32 = seed + XXH_PRIME32_5; - } - - h32 += (xxh_u32)len; - - return XXH32_finalize(h32, input, len&15, align); -} - -/*! @ingroup xxh32_family */ -XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed) -{ -#if 0 - /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ - XXH32_state_t state; - XXH32_reset(&state, seed); - XXH32_update(&state, (const xxh_u8*)input, len); - return XXH32_digest(&state); -#else - if (XXH_FORCE_ALIGN_CHECK) { - if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */ - return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); - } } - - return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); -#endif -} - - - -/******* Hash streaming *******/ -/*! - * @ingroup xxh32_family - */ -XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void) -{ - return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); -} -/*! @ingroup xxh32_family */ -XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) -{ - XXH_free(statePtr); - return XXH_OK; -} - -/*! @ingroup xxh32_family */ -XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState) -{ - XXH_memcpy(dstState, srcState, sizeof(*dstState)); -} - -/*! @ingroup xxh32_family */ -XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed) -{ - XXH_ASSERT(statePtr != NULL); - memset(statePtr, 0, sizeof(*statePtr)); - statePtr->v[0] = seed + XXH_PRIME32_1 + XXH_PRIME32_2; - statePtr->v[1] = seed + XXH_PRIME32_2; - statePtr->v[2] = seed + 0; - statePtr->v[3] = seed - XXH_PRIME32_1; - return XXH_OK; -} - - -/*! @ingroup xxh32_family */ -XXH_PUBLIC_API XXH_errorcode -XXH32_update(XXH32_state_t* state, const void* input, size_t len) -{ - if (input==NULL) { - XXH_ASSERT(len == 0); - return XXH_OK; - } - - { const xxh_u8* p = (const xxh_u8*)input; - const xxh_u8* const bEnd = p + len; - - state->total_len_32 += (XXH32_hash_t)len; - state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16)); - - if (state->memsize + len < 16) { /* fill in tmp buffer */ - XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, len); - state->memsize += (XXH32_hash_t)len; - return XXH_OK; - } - - if (state->memsize) { /* some data left from previous update */ - XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, 16-state->memsize); - { const xxh_u32* p32 = state->mem32; - state->v[0] = XXH32_round(state->v[0], XXH_readLE32(p32)); p32++; - state->v[1] = XXH32_round(state->v[1], XXH_readLE32(p32)); p32++; - state->v[2] = XXH32_round(state->v[2], XXH_readLE32(p32)); p32++; - state->v[3] = XXH32_round(state->v[3], XXH_readLE32(p32)); - } - p += 16-state->memsize; - state->memsize = 0; - } - - if (p <= bEnd-16) { - const xxh_u8* const limit = bEnd - 16; - - do { - state->v[0] = XXH32_round(state->v[0], XXH_readLE32(p)); p+=4; - state->v[1] = XXH32_round(state->v[1], XXH_readLE32(p)); p+=4; - state->v[2] = XXH32_round(state->v[2], XXH_readLE32(p)); p+=4; - state->v[3] = XXH32_round(state->v[3], XXH_readLE32(p)); p+=4; - } while (p<=limit); - - } - - if (p < bEnd) { - XXH_memcpy(state->mem32, p, (size_t)(bEnd-p)); - state->memsize = (unsigned)(bEnd-p); - } - } - - return XXH_OK; -} - - -/*! @ingroup xxh32_family */ -XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* state) -{ - xxh_u32 h32; - - if (state->large_len) { - h32 = XXH_rotl32(state->v[0], 1) - + XXH_rotl32(state->v[1], 7) - + XXH_rotl32(state->v[2], 12) - + XXH_rotl32(state->v[3], 18); - } else { - h32 = state->v[2] /* == seed */ + XXH_PRIME32_5; - } - - h32 += state->total_len_32; - - return XXH32_finalize(h32, (const xxh_u8*)state->mem32, state->memsize, XXH_aligned); -} - - -/******* Canonical representation *******/ - -/*! - * @ingroup xxh32_family - * The default return values from XXH functions are unsigned 32 and 64 bit - * integers. - * - * The canonical representation uses big endian convention, the same convention - * as human-readable numbers (large digits first). - * - * This way, hash values can be written into a file or buffer, remaining - * comparable across different systems. - * - * The following functions allow transformation of hash values to and from their - * canonical format. - */ -XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash) -{ - /* XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t)); */ - if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash); - XXH_memcpy(dst, &hash, sizeof(*dst)); -} -/*! @ingroup xxh32_family */ -XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src) -{ - return XXH_readBE32(src); -} - - -#ifndef XXH_NO_LONG_LONG - -/* ******************************************************************* -* 64-bit hash functions -*********************************************************************/ -/*! - * @} - * @ingroup impl - * @{ - */ -/******* Memory access *******/ - -typedef XXH64_hash_t xxh_u64; - -#ifdef XXH_OLD_NAMES -# define U64 xxh_u64 -#endif - -#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) -/* - * Manual byteshift. Best for old compilers which don't inline memcpy. - * We actually directly use XXH_readLE64 and XXH_readBE64. - */ -#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) - -/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ -static xxh_u64 XXH_read64(const void* memPtr) -{ - return *(const xxh_u64*) memPtr; -} - -#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) - -/* - * __pack instructions are safer, but compiler specific, hence potentially - * problematic for some compilers. - * - * Currently only defined for GCC and ICC. - */ -#ifdef XXH_OLD_NAMES -typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) unalign64; -#endif -static xxh_u64 XXH_read64(const void* ptr) -{ - typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) xxh_unalign64; - return ((const xxh_unalign64*)ptr)->u64; -} - -#else - -/* - * Portable and safe solution. Generally efficient. - * see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html - */ -static xxh_u64 XXH_read64(const void* memPtr) -{ - xxh_u64 val; - XXH_memcpy(&val, memPtr, sizeof(val)); - return val; -} - -#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ - -#if defined(_MSC_VER) /* Visual Studio */ -# define XXH_swap64 _byteswap_uint64 -#elif XXH_GCC_VERSION >= 403 -# define XXH_swap64 __builtin_bswap64 -#else -static xxh_u64 XXH_swap64(xxh_u64 x) -{ - return ((x << 56) & 0xff00000000000000ULL) | - ((x << 40) & 0x00ff000000000000ULL) | - ((x << 24) & 0x0000ff0000000000ULL) | - ((x << 8) & 0x000000ff00000000ULL) | - ((x >> 8) & 0x00000000ff000000ULL) | - ((x >> 24) & 0x0000000000ff0000ULL) | - ((x >> 40) & 0x000000000000ff00ULL) | - ((x >> 56) & 0x00000000000000ffULL); -} -#endif - - -/* XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. */ -#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3)) - -XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* memPtr) -{ - const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; - return bytePtr[0] - | ((xxh_u64)bytePtr[1] << 8) - | ((xxh_u64)bytePtr[2] << 16) - | ((xxh_u64)bytePtr[3] << 24) - | ((xxh_u64)bytePtr[4] << 32) - | ((xxh_u64)bytePtr[5] << 40) - | ((xxh_u64)bytePtr[6] << 48) - | ((xxh_u64)bytePtr[7] << 56); -} - -XXH_FORCE_INLINE xxh_u64 XXH_readBE64(const void* memPtr) -{ - const xxh_u8* bytePtr = (const xxh_u8 *)memPtr; - return bytePtr[7] - | ((xxh_u64)bytePtr[6] << 8) - | ((xxh_u64)bytePtr[5] << 16) - | ((xxh_u64)bytePtr[4] << 24) - | ((xxh_u64)bytePtr[3] << 32) - | ((xxh_u64)bytePtr[2] << 40) - | ((xxh_u64)bytePtr[1] << 48) - | ((xxh_u64)bytePtr[0] << 56); -} - -#else -XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr)); -} - -static xxh_u64 XXH_readBE64(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr); -} -#endif - -XXH_FORCE_INLINE xxh_u64 -XXH_readLE64_align(const void* ptr, XXH_alignment align) -{ - if (align==XXH_unaligned) - return XXH_readLE64(ptr); - else - return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr); -} - - -/******* xxh64 *******/ -/*! - * @} - * @defgroup xxh64_impl XXH64 implementation - * @ingroup impl - * @{ - */ -/* #define rather that static const, to be used as initializers */ -#define XXH_PRIME64_1 0x9E3779B185EBCA87ULL /*!< 0b1001111000110111011110011011000110000101111010111100101010000111 */ -#define XXH_PRIME64_2 0xC2B2AE3D27D4EB4FULL /*!< 0b1100001010110010101011100011110100100111110101001110101101001111 */ -#define XXH_PRIME64_3 0x165667B19E3779F9ULL /*!< 0b0001011001010110011001111011000110011110001101110111100111111001 */ -#define XXH_PRIME64_4 0x85EBCA77C2B2AE63ULL /*!< 0b1000010111101011110010100111011111000010101100101010111001100011 */ -#define XXH_PRIME64_5 0x27D4EB2F165667C5ULL /*!< 0b0010011111010100111010110010111100010110010101100110011111000101 */ - -#ifdef XXH_OLD_NAMES -# define PRIME64_1 XXH_PRIME64_1 -# define PRIME64_2 XXH_PRIME64_2 -# define PRIME64_3 XXH_PRIME64_3 -# define PRIME64_4 XXH_PRIME64_4 -# define PRIME64_5 XXH_PRIME64_5 -#endif - -static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input) -{ - acc += input * XXH_PRIME64_2; - acc = XXH_rotl64(acc, 31); - acc *= XXH_PRIME64_1; - return acc; -} - -static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val) -{ - val = XXH64_round(0, val); - acc ^= val; - acc = acc * XXH_PRIME64_1 + XXH_PRIME64_4; - return acc; -} - -static xxh_u64 XXH64_avalanche(xxh_u64 h64) -{ - h64 ^= h64 >> 33; - h64 *= XXH_PRIME64_2; - h64 ^= h64 >> 29; - h64 *= XXH_PRIME64_3; - h64 ^= h64 >> 32; - return h64; -} - - -#define XXH_get64bits(p) XXH_readLE64_align(p, align) - -static xxh_u64 -XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align) -{ - if (ptr==NULL) XXH_ASSERT(len == 0); - len &= 31; - while (len >= 8) { - xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr)); - ptr += 8; - h64 ^= k1; - h64 = XXH_rotl64(h64,27) * XXH_PRIME64_1 + XXH_PRIME64_4; - len -= 8; - } - if (len >= 4) { - h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1; - ptr += 4; - h64 = XXH_rotl64(h64, 23) * XXH_PRIME64_2 + XXH_PRIME64_3; - len -= 4; - } - while (len > 0) { - h64 ^= (*ptr++) * XXH_PRIME64_5; - h64 = XXH_rotl64(h64, 11) * XXH_PRIME64_1; - --len; - } - return XXH64_avalanche(h64); -} - -#ifdef XXH_OLD_NAMES -# define PROCESS1_64 XXH_PROCESS1_64 -# define PROCESS4_64 XXH_PROCESS4_64 -# define PROCESS8_64 XXH_PROCESS8_64 -#else -# undef XXH_PROCESS1_64 -# undef XXH_PROCESS4_64 -# undef XXH_PROCESS8_64 -#endif - -XXH_FORCE_INLINE xxh_u64 -XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align) -{ - xxh_u64 h64; - if (input==NULL) XXH_ASSERT(len == 0); - - if (len>=32) { - const xxh_u8* const bEnd = input + len; - const xxh_u8* const limit = bEnd - 31; - xxh_u64 v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2; - xxh_u64 v2 = seed + XXH_PRIME64_2; - xxh_u64 v3 = seed + 0; - xxh_u64 v4 = seed - XXH_PRIME64_1; - - do { - v1 = XXH64_round(v1, XXH_get64bits(input)); input+=8; - v2 = XXH64_round(v2, XXH_get64bits(input)); input+=8; - v3 = XXH64_round(v3, XXH_get64bits(input)); input+=8; - v4 = XXH64_round(v4, XXH_get64bits(input)); input+=8; - } while (inputv[0] = seed + XXH_PRIME64_1 + XXH_PRIME64_2; - statePtr->v[1] = seed + XXH_PRIME64_2; - statePtr->v[2] = seed + 0; - statePtr->v[3] = seed - XXH_PRIME64_1; - return XXH_OK; -} - -/*! @ingroup xxh64_family */ -XXH_PUBLIC_API XXH_errorcode -XXH64_update (XXH64_state_t* state, const void* input, size_t len) -{ - if (input==NULL) { - XXH_ASSERT(len == 0); - return XXH_OK; - } - - { const xxh_u8* p = (const xxh_u8*)input; - const xxh_u8* const bEnd = p + len; - - state->total_len += len; - - if (state->memsize + len < 32) { /* fill in tmp buffer */ - XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, len); - state->memsize += (xxh_u32)len; - return XXH_OK; - } - - if (state->memsize) { /* tmp buffer is full */ - XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, 32-state->memsize); - state->v[0] = XXH64_round(state->v[0], XXH_readLE64(state->mem64+0)); - state->v[1] = XXH64_round(state->v[1], XXH_readLE64(state->mem64+1)); - state->v[2] = XXH64_round(state->v[2], XXH_readLE64(state->mem64+2)); - state->v[3] = XXH64_round(state->v[3], XXH_readLE64(state->mem64+3)); - p += 32 - state->memsize; - state->memsize = 0; - } - - if (p+32 <= bEnd) { - const xxh_u8* const limit = bEnd - 32; - - do { - state->v[0] = XXH64_round(state->v[0], XXH_readLE64(p)); p+=8; - state->v[1] = XXH64_round(state->v[1], XXH_readLE64(p)); p+=8; - state->v[2] = XXH64_round(state->v[2], XXH_readLE64(p)); p+=8; - state->v[3] = XXH64_round(state->v[3], XXH_readLE64(p)); p+=8; - } while (p<=limit); - - } - - if (p < bEnd) { - XXH_memcpy(state->mem64, p, (size_t)(bEnd-p)); - state->memsize = (unsigned)(bEnd-p); - } - } - - return XXH_OK; -} - - -/*! @ingroup xxh64_family */ -XXH_PUBLIC_API XXH64_hash_t XXH64_digest(const XXH64_state_t* state) -{ - xxh_u64 h64; - - if (state->total_len >= 32) { - h64 = XXH_rotl64(state->v[0], 1) + XXH_rotl64(state->v[1], 7) + XXH_rotl64(state->v[2], 12) + XXH_rotl64(state->v[3], 18); - h64 = XXH64_mergeRound(h64, state->v[0]); - h64 = XXH64_mergeRound(h64, state->v[1]); - h64 = XXH64_mergeRound(h64, state->v[2]); - h64 = XXH64_mergeRound(h64, state->v[3]); - } else { - h64 = state->v[2] /*seed*/ + XXH_PRIME64_5; - } - - h64 += (xxh_u64) state->total_len; - - return XXH64_finalize(h64, (const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned); -} - - -/******* Canonical representation *******/ - -/*! @ingroup xxh64_family */ -XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash) -{ - /* XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t)); */ - if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash); - XXH_memcpy(dst, &hash, sizeof(*dst)); -} - -/*! @ingroup xxh64_family */ -XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src) -{ - return XXH_readBE64(src); -} - -#ifndef XXH_NO_XXH3 - -/* ********************************************************************* -* XXH3 -* New generation hash designed for speed on small keys and vectorization -************************************************************************ */ -/*! - * @} - * @defgroup xxh3_impl XXH3 implementation - * @ingroup impl - * @{ - */ - -/* === Compiler specifics === */ - -#if ((defined(sun) || defined(__sun)) && __cplusplus) /* Solaris includes __STDC_VERSION__ with C++. Tested with GCC 5.5 */ -# define XXH_RESTRICT /* disable */ -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* >= C99 */ -# define XXH_RESTRICT restrict -#else -/* Note: it might be useful to define __restrict or __restrict__ for some C++ compilers */ -# define XXH_RESTRICT /* disable */ -#endif - -#if (defined(__GNUC__) && (__GNUC__ >= 3)) \ - || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \ - || defined(__clang__) -# define XXH_likely(x) __builtin_expect(x, 1) -# define XXH_unlikely(x) __builtin_expect(x, 0) -#else -# define XXH_likely(x) (x) -# define XXH_unlikely(x) (x) -#endif - -#if defined(__GNUC__) || defined(__clang__) -# if defined(__ARM_NEON__) || defined(__ARM_NEON) \ - || defined(__aarch64__) || defined(_M_ARM) \ - || defined(_M_ARM64) || defined(_M_ARM64EC) -# define inline __inline__ /* circumvent a clang bug */ -# include -# undef inline -# elif defined(__AVX2__) -# include -# elif defined(__SSE2__) -# include -# endif -#endif - -#if defined(_MSC_VER) -# include -#endif - -/* - * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while - * remaining a true 64-bit/128-bit hash function. - * - * This is done by prioritizing a subset of 64-bit operations that can be - * emulated without too many steps on the average 32-bit machine. - * - * For example, these two lines seem similar, and run equally fast on 64-bit: - * - * xxh_u64 x; - * x ^= (x >> 47); // good - * x ^= (x >> 13); // bad - * - * However, to a 32-bit machine, there is a major difference. - * - * x ^= (x >> 47) looks like this: - * - * x.lo ^= (x.hi >> (47 - 32)); - * - * while x ^= (x >> 13) looks like this: - * - * // note: funnel shifts are not usually cheap. - * x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13)); - * x.hi ^= (x.hi >> 13); - * - * The first one is significantly faster than the second, simply because the - * shift is larger than 32. This means: - * - All the bits we need are in the upper 32 bits, so we can ignore the lower - * 32 bits in the shift. - * - The shift result will always fit in the lower 32 bits, and therefore, - * we can ignore the upper 32 bits in the xor. - * - * Thanks to this optimization, XXH3 only requires these features to be efficient: - * - * - Usable unaligned access - * - A 32-bit or 64-bit ALU - * - If 32-bit, a decent ADC instruction - * - A 32 or 64-bit multiply with a 64-bit result - * - For the 128-bit variant, a decent byteswap helps short inputs. - * - * The first two are already required by XXH32, and almost all 32-bit and 64-bit - * platforms which can run XXH32 can run XXH3 efficiently. - * - * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one - * notable exception. - * - * First of all, Thumb-1 lacks support for the UMULL instruction which - * performs the important long multiply. This means numerous __aeabi_lmul - * calls. - * - * Second of all, the 8 functional registers are just not enough. - * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need - * Lo registers, and this shuffling results in thousands more MOVs than A32. - * - * A32 and T32 don't have this limitation. They can access all 14 registers, - * do a 32->64 multiply with UMULL, and the flexible operand allowing free - * shifts is helpful, too. - * - * Therefore, we do a quick sanity check. - * - * If compiling Thumb-1 for a target which supports ARM instructions, we will - * emit a warning, as it is not a "sane" platform to compile for. - * - * Usually, if this happens, it is because of an accident and you probably need - * to specify -march, as you likely meant to compile for a newer architecture. - * - * Credit: large sections of the vectorial and asm source code paths - * have been contributed by @easyaspi314 - */ -#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM) -# warning "XXH3 is highly inefficient without ARM or Thumb-2." -#endif - -/* ========================================== - * Vectorization detection - * ========================================== */ - -#ifdef XXH_DOXYGEN -/*! - * @ingroup tuning - * @brief Overrides the vectorization implementation chosen for XXH3. - * - * Can be defined to 0 to disable SIMD or any of the values mentioned in - * @ref XXH_VECTOR_TYPE. - * - * If this is not defined, it uses predefined macros to determine the best - * implementation. - */ -# define XXH_VECTOR XXH_SCALAR -/*! - * @ingroup tuning - * @brief Possible values for @ref XXH_VECTOR. - * - * Note that these are actually implemented as macros. - * - * If this is not defined, it is detected automatically. - * @ref XXH_X86DISPATCH overrides this. - */ -enum XXH_VECTOR_TYPE /* fake enum */ { - XXH_SCALAR = 0, /*!< Portable scalar version */ - XXH_SSE2 = 1, /*!< - * SSE2 for Pentium 4, Opteron, all x86_64. - * - * @note SSE2 is also guaranteed on Windows 10, macOS, and - * Android x86. - */ - XXH_AVX2 = 2, /*!< AVX2 for Haswell and Bulldozer */ - XXH_AVX512 = 3, /*!< AVX512 for Skylake and Icelake */ - XXH_NEON = 4, /*!< NEON for most ARMv7-A and all AArch64 */ - XXH_VSX = 5, /*!< VSX and ZVector for POWER8/z13 (64-bit) */ -}; -/*! - * @ingroup tuning - * @brief Selects the minimum alignment for XXH3's accumulators. - * - * When using SIMD, this should match the alignment reqired for said vector - * type, so, for example, 32 for AVX2. - * - * Default: Auto detected. - */ -# define XXH_ACC_ALIGN 8 -#endif - -/* Actual definition */ -#ifndef XXH_DOXYGEN -# define XXH_SCALAR 0 -# define XXH_SSE2 1 -# define XXH_AVX2 2 -# define XXH_AVX512 3 -# define XXH_NEON 4 -# define XXH_VSX 5 -#endif - -#ifndef XXH_VECTOR /* can be defined on command line */ -# if ( \ - defined(__ARM_NEON__) || defined(__ARM_NEON) /* gcc */ \ - || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC) /* msvc */ \ - ) && ( \ - defined(_WIN32) || defined(__LITTLE_ENDIAN__) /* little endian only */ \ - || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) \ - ) -# define XXH_VECTOR XXH_NEON -# elif defined(__AVX512F__) -# define XXH_VECTOR XXH_AVX512 -# elif defined(__AVX2__) -# define XXH_VECTOR XXH_AVX2 -# elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2)) -# define XXH_VECTOR XXH_SSE2 -# elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \ - || (defined(__s390x__) && defined(__VEC__)) \ - && defined(__GNUC__) /* TODO: IBM XL */ -# define XXH_VECTOR XXH_VSX -# else -# define XXH_VECTOR XXH_SCALAR -# endif -#endif - -/* - * Controls the alignment of the accumulator, - * for compatibility with aligned vector loads, which are usually faster. - */ -#ifndef XXH_ACC_ALIGN -# if defined(XXH_X86DISPATCH) -# define XXH_ACC_ALIGN 64 /* for compatibility with avx512 */ -# elif XXH_VECTOR == XXH_SCALAR /* scalar */ -# define XXH_ACC_ALIGN 8 -# elif XXH_VECTOR == XXH_SSE2 /* sse2 */ -# define XXH_ACC_ALIGN 16 -# elif XXH_VECTOR == XXH_AVX2 /* avx2 */ -# define XXH_ACC_ALIGN 32 -# elif XXH_VECTOR == XXH_NEON /* neon */ -# define XXH_ACC_ALIGN 16 -# elif XXH_VECTOR == XXH_VSX /* vsx */ -# define XXH_ACC_ALIGN 16 -# elif XXH_VECTOR == XXH_AVX512 /* avx512 */ -# define XXH_ACC_ALIGN 64 -# endif -#endif - -#if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 \ - || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512 -# define XXH_SEC_ALIGN XXH_ACC_ALIGN -#else -# define XXH_SEC_ALIGN 8 -#endif - -/* - * UGLY HACK: - * GCC usually generates the best code with -O3 for xxHash. - * - * However, when targeting AVX2, it is overzealous in its unrolling resulting - * in code roughly 3/4 the speed of Clang. - * - * There are other issues, such as GCC splitting _mm256_loadu_si256 into - * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which - * only applies to Sandy and Ivy Bridge... which don't even support AVX2. - * - * That is why when compiling the AVX2 version, it is recommended to use either - * -O2 -mavx2 -march=haswell - * or - * -O2 -mavx2 -mno-avx256-split-unaligned-load - * for decent performance, or to use Clang instead. - * - * Fortunately, we can control the first one with a pragma that forces GCC into - * -O2, but the other one we can't control without "failed to inline always - * inline function due to target mismatch" warnings. - */ -#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \ - && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ - && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */ -# pragma GCC push_options -# pragma GCC optimize("-O2") -#endif - - -#if XXH_VECTOR == XXH_NEON -/* - * NEON's setup for vmlal_u32 is a little more complicated than it is on - * SSE2, AVX2, and VSX. - * - * While PMULUDQ and VMULEUW both perform a mask, VMLAL.U32 performs an upcast. - * - * To do the same operation, the 128-bit 'Q' register needs to be split into - * two 64-bit 'D' registers, performing this operation:: - * - * [ a | b ] - * | '---------. .--------' | - * | x | - * | .---------' '--------. | - * [ a & 0xFFFFFFFF | b & 0xFFFFFFFF ],[ a >> 32 | b >> 32 ] - * - * Due to significant changes in aarch64, the fastest method for aarch64 is - * completely different than the fastest method for ARMv7-A. - * - * ARMv7-A treats D registers as unions overlaying Q registers, so modifying - * D11 will modify the high half of Q5. This is similar to how modifying AH - * will only affect bits 8-15 of AX on x86. - * - * VZIP takes two registers, and puts even lanes in one register and odd lanes - * in the other. - * - * On ARMv7-A, this strangely modifies both parameters in place instead of - * taking the usual 3-operand form. - * - * Therefore, if we want to do this, we can simply use a D-form VZIP.32 on the - * lower and upper halves of the Q register to end up with the high and low - * halves where we want - all in one instruction. - * - * vzip.32 d10, d11 @ d10 = { d10[0], d11[0] }; d11 = { d10[1], d11[1] } - * - * Unfortunately we need inline assembly for this: Instructions modifying two - * registers at once is not possible in GCC or Clang's IR, and they have to - * create a copy. - * - * aarch64 requires a different approach. - * - * In order to make it easier to write a decent compiler for aarch64, many - * quirks were removed, such as conditional execution. - * - * NEON was also affected by this. - * - * aarch64 cannot access the high bits of a Q-form register, and writes to a - * D-form register zero the high bits, similar to how writes to W-form scalar - * registers (or DWORD registers on x86_64) work. - * - * The formerly free vget_high intrinsics now require a vext (with a few - * exceptions) - * - * Additionally, VZIP was replaced by ZIP1 and ZIP2, which are the equivalent - * of PUNPCKL* and PUNPCKH* in SSE, respectively, in order to only modify one - * operand. - * - * The equivalent of the VZIP.32 on the lower and upper halves would be this - * mess: - * - * ext v2.4s, v0.4s, v0.4s, #2 // v2 = { v0[2], v0[3], v0[0], v0[1] } - * zip1 v1.2s, v0.2s, v2.2s // v1 = { v0[0], v2[0] } - * zip2 v0.2s, v0.2s, v1.2s // v0 = { v0[1], v2[1] } - * - * Instead, we use a literal downcast, vmovn_u64 (XTN), and vshrn_n_u64 (SHRN): - * - * shrn v1.2s, v0.2d, #32 // v1 = (uint32x2_t)(v0 >> 32); - * xtn v0.2s, v0.2d // v0 = (uint32x2_t)(v0 & 0xFFFFFFFF); - * - * This is available on ARMv7-A, but is less efficient than a single VZIP.32. - */ - -/*! - * Function-like macro: - * void XXH_SPLIT_IN_PLACE(uint64x2_t &in, uint32x2_t &outLo, uint32x2_t &outHi) - * { - * outLo = (uint32x2_t)(in & 0xFFFFFFFF); - * outHi = (uint32x2_t)(in >> 32); - * in = UNDEFINED; - * } - */ -# if !defined(XXH_NO_VZIP_HACK) /* define to disable */ \ - && (defined(__GNUC__) || defined(__clang__)) \ - && (defined(__arm__) || defined(__thumb__) || defined(_M_ARM)) -# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \ - do { \ - /* Undocumented GCC/Clang operand modifier: %e0 = lower D half, %f0 = upper D half */ \ - /* https://github.com/gcc-mirror/gcc/blob/38cf91e5/gcc/config/arm/arm.c#L22486 */ \ - /* https://github.com/llvm-mirror/llvm/blob/2c4ca683/lib/Target/ARM/ARMAsmPrinter.cpp#L399 */ \ - __asm__("vzip.32 %e0, %f0" : "+w" (in)); \ - (outLo) = vget_low_u32 (vreinterpretq_u32_u64(in)); \ - (outHi) = vget_high_u32(vreinterpretq_u32_u64(in)); \ - } while (0) -# else -# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \ - do { \ - (outLo) = vmovn_u64 (in); \ - (outHi) = vshrn_n_u64 ((in), 32); \ - } while (0) -# endif - -/*! - * @ingroup tuning - * @brief Controls the NEON to scalar ratio for XXH3 - * - * On AArch64 when not optimizing for size, XXH3 will run 6 lanes using NEON and - * 2 lanes on scalar by default. - * - * This can be set to 2, 4, 6, or 8. ARMv7 will default to all 8 NEON lanes, as the - * emulated 64-bit arithmetic is too slow. - * - * Modern ARM CPUs are _very_ sensitive to how their pipelines are used. - * - * For example, the Cortex-A73 can dispatch 3 micro-ops per cycle, but it can't - * have more than 2 NEON (F0/F1) micro-ops. If you are only using NEON instructions, - * you are only using 2/3 of the CPU bandwidth. - * - * This is even more noticable on the more advanced cores like the A76 which - * can dispatch 8 micro-ops per cycle, but still only 2 NEON micro-ops at once. - * - * Therefore, @ref XXH3_NEON_LANES lanes will be processed using NEON, and the - * remaining lanes will use scalar instructions. This improves the bandwidth - * and also gives the integer pipelines something to do besides twiddling loop - * counters and pointers. - * - * This change benefits CPUs with large micro-op buffers without negatively affecting - * other CPUs: - * - * | Chipset | Dispatch type | NEON only | 6:2 hybrid | Diff. | - * |:----------------------|:--------------------|----------:|-----------:|------:| - * | Snapdragon 730 (A76) | 2 NEON/8 micro-ops | 8.8 GB/s | 10.1 GB/s | ~16% | - * | Snapdragon 835 (A73) | 2 NEON/3 micro-ops | 5.1 GB/s | 5.3 GB/s | ~5% | - * | Marvell PXA1928 (A53) | In-order dual-issue | 1.9 GB/s | 1.9 GB/s | 0% | - * - * It also seems to fix some bad codegen on GCC, making it almost as fast as clang. - * - * @see XXH3_accumulate_512_neon() - */ -# ifndef XXH3_NEON_LANES -# if (defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) \ - && !defined(__OPTIMIZE_SIZE__) -# define XXH3_NEON_LANES 6 -# else -# define XXH3_NEON_LANES XXH_ACC_NB -# endif -# endif -#endif /* XXH_VECTOR == XXH_NEON */ - -/* - * VSX and Z Vector helpers. - * - * This is very messy, and any pull requests to clean this up are welcome. - * - * There are a lot of problems with supporting VSX and s390x, due to - * inconsistent intrinsics, spotty coverage, and multiple endiannesses. - */ -#if XXH_VECTOR == XXH_VSX -# if defined(__s390x__) -# include -# else -/* gcc's altivec.h can have the unwanted consequence to unconditionally - * #define bool, vector, and pixel keywords, - * with bad consequences for programs already using these keywords for other purposes. - * The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined. - * __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler, - * but it seems that, in some cases, it isn't. - * Force the build macro to be defined, so that keywords are not altered. - */ -# if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__) -# define __APPLE_ALTIVEC__ -# endif -# include -# endif - -typedef __vector unsigned long long xxh_u64x2; -typedef __vector unsigned char xxh_u8x16; -typedef __vector unsigned xxh_u32x4; - -# ifndef XXH_VSX_BE -# if defined(__BIG_ENDIAN__) \ - || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) -# define XXH_VSX_BE 1 -# elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__ -# warning "-maltivec=be is not recommended. Please use native endianness." -# define XXH_VSX_BE 1 -# else -# define XXH_VSX_BE 0 -# endif -# endif /* !defined(XXH_VSX_BE) */ - -# if XXH_VSX_BE -# if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__)) -# define XXH_vec_revb vec_revb -# else -/*! - * A polyfill for POWER9's vec_revb(). - */ -XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val) -{ - xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, - 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 }; - return vec_perm(val, val, vByteSwap); -} -# endif -# endif /* XXH_VSX_BE */ - -/*! - * Performs an unaligned vector load and byte swaps it on big endian. - */ -XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr) -{ - xxh_u64x2 ret; - XXH_memcpy(&ret, ptr, sizeof(xxh_u64x2)); -# if XXH_VSX_BE - ret = XXH_vec_revb(ret); -# endif - return ret; -} - -/* - * vec_mulo and vec_mule are very problematic intrinsics on PowerPC - * - * These intrinsics weren't added until GCC 8, despite existing for a while, - * and they are endian dependent. Also, their meaning swap depending on version. - * */ -# if defined(__s390x__) - /* s390x is always big endian, no issue on this platform */ -# define XXH_vec_mulo vec_mulo -# define XXH_vec_mule vec_mule -# elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw) -/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */ -# define XXH_vec_mulo __builtin_altivec_vmulouw -# define XXH_vec_mule __builtin_altivec_vmuleuw -# else -/* gcc needs inline assembly */ -/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */ -XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b) -{ - xxh_u64x2 result; - __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); - return result; -} -XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b) -{ - xxh_u64x2 result; - __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b)); - return result; -} -# endif /* XXH_vec_mulo, XXH_vec_mule */ -#endif /* XXH_VECTOR == XXH_VSX */ - - -/* prefetch - * can be disabled, by declaring XXH_NO_PREFETCH build macro */ -#if defined(XXH_NO_PREFETCH) -# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ -#else -# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) /* _mm_prefetch() not defined outside of x86/x64 */ -# include /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */ -# define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0) -# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) ) -# define XXH_PREFETCH(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */) -# else -# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */ -# endif -#endif /* XXH_NO_PREFETCH */ - - -/* ========================================== - * XXH3 default settings - * ========================================== */ - -#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */ - -#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN) -# error "default keyset is not large enough" -#endif - -/*! Pseudorandom secret taken directly from FARSH. */ -XXH_ALIGN(64) static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = { - 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c, - 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, - 0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, - 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c, - 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, - 0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, - 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d, - 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64, - 0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, - 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e, - 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, - 0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e, -}; - - -#ifdef XXH_OLD_NAMES -# define kSecret XXH3_kSecret -#endif - -#ifdef XXH_DOXYGEN -/*! - * @brief Calculates a 32-bit to 64-bit long multiply. - * - * Implemented as a macro. - * - * Wraps `__emulu` on MSVC x86 because it tends to call `__allmul` when it doesn't - * need to (but it shouldn't need to anyways, it is about 7 instructions to do - * a 64x64 multiply...). Since we know that this will _always_ emit `MULL`, we - * use that instead of the normal method. - * - * If you are compiling for platforms like Thumb-1 and don't have a better option, - * you may also want to write your own long multiply routine here. - * - * @param x, y Numbers to be multiplied - * @return 64-bit product of the low 32 bits of @p x and @p y. - */ -XXH_FORCE_INLINE xxh_u64 -XXH_mult32to64(xxh_u64 x, xxh_u64 y) -{ - return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF); -} -#elif defined(_MSC_VER) && defined(_M_IX86) -# define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y)) -#else -/* - * Downcast + upcast is usually better than masking on older compilers like - * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers. - * - * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands - * and perform a full 64x64 multiply -- entirely redundant on 32-bit. - */ -# define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y)) -#endif - -/*! - * @brief Calculates a 64->128-bit long multiply. - * - * Uses `__uint128_t` and `_umul128` if available, otherwise uses a scalar - * version. - * - * @param lhs , rhs The 64-bit integers to be multiplied - * @return The 128-bit result represented in an @ref XXH128_hash_t. - */ -static XXH128_hash_t -XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs) -{ - /* - * GCC/Clang __uint128_t method. - * - * On most 64-bit targets, GCC and Clang define a __uint128_t type. - * This is usually the best way as it usually uses a native long 64-bit - * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64. - * - * Usually. - * - * Despite being a 32-bit platform, Clang (and emscripten) define this type - * despite not having the arithmetic for it. This results in a laggy - * compiler builtin call which calculates a full 128-bit multiply. - * In that case it is best to use the portable one. - * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677 - */ -#if (defined(__GNUC__) || defined(__clang__)) && !defined(__wasm__) \ - && defined(__SIZEOF_INT128__) \ - || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128) - - __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs; - XXH128_hash_t r128; - r128.low64 = (xxh_u64)(product); - r128.high64 = (xxh_u64)(product >> 64); - return r128; - - /* - * MSVC for x64's _umul128 method. - * - * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct); - * - * This compiles to single operand MUL on x64. - */ -#elif (defined(_M_X64) || defined(_M_IA64)) && !defined(_M_ARM64EC) - -#ifndef _MSC_VER -# pragma intrinsic(_umul128) -#endif - xxh_u64 product_high; - xxh_u64 const product_low = _umul128(lhs, rhs, &product_high); - XXH128_hash_t r128; - r128.low64 = product_low; - r128.high64 = product_high; - return r128; - - /* - * MSVC for ARM64's __umulh method. - * - * This compiles to the same MUL + UMULH as GCC/Clang's __uint128_t method. - */ -#elif defined(_M_ARM64) || defined(_M_ARM64EC) - -#ifndef _MSC_VER -# pragma intrinsic(__umulh) -#endif - XXH128_hash_t r128; - r128.low64 = lhs * rhs; - r128.high64 = __umulh(lhs, rhs); - return r128; - -#else - /* - * Portable scalar method. Optimized for 32-bit and 64-bit ALUs. - * - * This is a fast and simple grade school multiply, which is shown below - * with base 10 arithmetic instead of base 0x100000000. - * - * 9 3 // D2 lhs = 93 - * x 7 5 // D2 rhs = 75 - * ---------- - * 1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15 - * 4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45 - * 2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21 - * + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63 - * --------- - * 2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27 - * + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67 - * --------- - * 6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975 - * - * The reasons for adding the products like this are: - * 1. It avoids manual carry tracking. Just like how - * (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX. - * This avoids a lot of complexity. - * - * 2. It hints for, and on Clang, compiles to, the powerful UMAAL - * instruction available in ARM's Digital Signal Processing extension - * in 32-bit ARMv6 and later, which is shown below: - * - * void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm) - * { - * xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm; - * *RdLo = (xxh_u32)(product & 0xFFFFFFFF); - * *RdHi = (xxh_u32)(product >> 32); - * } - * - * This instruction was designed for efficient long multiplication, and - * allows this to be calculated in only 4 instructions at speeds - * comparable to some 64-bit ALUs. - * - * 3. It isn't terrible on other platforms. Usually this will be a couple - * of 32-bit ADD/ADCs. - */ - - /* First calculate all of the cross products. */ - xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF); - xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF); - xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32); - xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32); - - /* Now add the products together. These will never overflow. */ - xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi; - xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi; - xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF); - - XXH128_hash_t r128; - r128.low64 = lower; - r128.high64 = upper; - return r128; -#endif -} - -/*! - * @brief Calculates a 64-bit to 128-bit multiply, then XOR folds it. - * - * The reason for the separate function is to prevent passing too many structs - * around by value. This will hopefully inline the multiply, but we don't force it. - * - * @param lhs , rhs The 64-bit integers to multiply - * @return The low 64 bits of the product XOR'd by the high 64 bits. - * @see XXH_mult64to128() - */ -static xxh_u64 -XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs) -{ - XXH128_hash_t product = XXH_mult64to128(lhs, rhs); - return product.low64 ^ product.high64; -} - -/*! Seems to produce slightly better code on GCC for some reason. */ -XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift) -{ - XXH_ASSERT(0 <= shift && shift < 64); - return v64 ^ (v64 >> shift); -} - -/* - * This is a fast avalanche stage, - * suitable when input bits are already partially mixed - */ -static XXH64_hash_t XXH3_avalanche(xxh_u64 h64) -{ - h64 = XXH_xorshift64(h64, 37); - h64 *= 0x165667919E3779F9ULL; - h64 = XXH_xorshift64(h64, 32); - return h64; -} - -/* - * This is a stronger avalanche, - * inspired by Pelle Evensen's rrmxmx - * preferable when input has not been previously mixed - */ -static XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len) -{ - /* this mix is inspired by Pelle Evensen's rrmxmx */ - h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24); - h64 *= 0x9FB21C651E98DF25ULL; - h64 ^= (h64 >> 35) + len ; - h64 *= 0x9FB21C651E98DF25ULL; - return XXH_xorshift64(h64, 28); -} - - -/* ========================================== - * Short keys - * ========================================== - * One of the shortcomings of XXH32 and XXH64 was that their performance was - * sub-optimal on short lengths. It used an iterative algorithm which strongly - * favored lengths that were a multiple of 4 or 8. - * - * Instead of iterating over individual inputs, we use a set of single shot - * functions which piece together a range of lengths and operate in constant time. - * - * Additionally, the number of multiplies has been significantly reduced. This - * reduces latency, especially when emulating 64-bit multiplies on 32-bit. - * - * Depending on the platform, this may or may not be faster than XXH32, but it - * is almost guaranteed to be faster than XXH64. - */ - -/* - * At very short lengths, there isn't enough input to fully hide secrets, or use - * the entire secret. - * - * There is also only a limited amount of mixing we can do before significantly - * impacting performance. - * - * Therefore, we use different sections of the secret and always mix two secret - * samples with an XOR. This should have no effect on performance on the - * seedless or withSeed variants because everything _should_ be constant folded - * by modern compilers. - * - * The XOR mixing hides individual parts of the secret and increases entropy. - * - * This adds an extra layer of strength for custom secrets. - */ -XXH_FORCE_INLINE XXH64_hash_t -XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - XXH_ASSERT(input != NULL); - XXH_ASSERT(1 <= len && len <= 3); - XXH_ASSERT(secret != NULL); - /* - * len = 1: combined = { input[0], 0x01, input[0], input[0] } - * len = 2: combined = { input[1], 0x02, input[0], input[1] } - * len = 3: combined = { input[2], 0x03, input[0], input[1] } - */ - { xxh_u8 const c1 = input[0]; - xxh_u8 const c2 = input[len >> 1]; - xxh_u8 const c3 = input[len - 1]; - xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24) - | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); - xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed; - xxh_u64 const keyed = (xxh_u64)combined ^ bitflip; - return XXH64_avalanche(keyed); - } -} - -XXH_FORCE_INLINE XXH64_hash_t -XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - XXH_ASSERT(input != NULL); - XXH_ASSERT(secret != NULL); - XXH_ASSERT(4 <= len && len <= 8); - seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; - { xxh_u32 const input1 = XXH_readLE32(input); - xxh_u32 const input2 = XXH_readLE32(input + len - 4); - xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed; - xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32); - xxh_u64 const keyed = input64 ^ bitflip; - return XXH3_rrmxmx(keyed, len); - } -} - -XXH_FORCE_INLINE XXH64_hash_t -XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - XXH_ASSERT(input != NULL); - XXH_ASSERT(secret != NULL); - XXH_ASSERT(9 <= len && len <= 16); - { xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed; - xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed; - xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1; - xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2; - xxh_u64 const acc = len - + XXH_swap64(input_lo) + input_hi - + XXH3_mul128_fold64(input_lo, input_hi); - return XXH3_avalanche(acc); - } -} - -XXH_FORCE_INLINE XXH64_hash_t -XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - XXH_ASSERT(len <= 16); - { if (XXH_likely(len > 8)) return XXH3_len_9to16_64b(input, len, secret, seed); - if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed); - if (len) return XXH3_len_1to3_64b(input, len, secret, seed); - return XXH64_avalanche(seed ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64))); - } -} - -/* - * DISCLAIMER: There are known *seed-dependent* multicollisions here due to - * multiplication by zero, affecting hashes of lengths 17 to 240. - * - * However, they are very unlikely. - * - * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all - * unseeded non-cryptographic hashes, it does not attempt to defend itself - * against specially crafted inputs, only random inputs. - * - * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes - * cancelling out the secret is taken an arbitrary number of times (addressed - * in XXH3_accumulate_512), this collision is very unlikely with random inputs - * and/or proper seeding: - * - * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a - * function that is only called up to 16 times per hash with up to 240 bytes of - * input. - * - * This is not too bad for a non-cryptographic hash function, especially with - * only 64 bit outputs. - * - * The 128-bit variant (which trades some speed for strength) is NOT affected - * by this, although it is always a good idea to use a proper seed if you care - * about strength. - */ -XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input, - const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64) -{ -#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \ - && defined(__i386__) && defined(__SSE2__) /* x86 + SSE2 */ \ - && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable like XXH32 hack */ - /* - * UGLY HACK: - * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in - * slower code. - * - * By forcing seed64 into a register, we disrupt the cost model and - * cause it to scalarize. See `XXH32_round()` - * - * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600, - * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on - * GCC 9.2, despite both emitting scalar code. - * - * GCC generates much better scalar code than Clang for the rest of XXH3, - * which is why finding a more optimal codepath is an interest. - */ - XXH_COMPILER_GUARD(seed64); -#endif - { xxh_u64 const input_lo = XXH_readLE64(input); - xxh_u64 const input_hi = XXH_readLE64(input+8); - return XXH3_mul128_fold64( - input_lo ^ (XXH_readLE64(secret) + seed64), - input_hi ^ (XXH_readLE64(secret+8) - seed64) - ); - } -} - -/* For mid range keys, XXH3 uses a Mum-hash variant. */ -XXH_FORCE_INLINE XXH64_hash_t -XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len, - const xxh_u8* XXH_RESTRICT secret, size_t secretSize, - XXH64_hash_t seed) -{ - XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; - XXH_ASSERT(16 < len && len <= 128); - - { xxh_u64 acc = len * XXH_PRIME64_1; - if (len > 32) { - if (len > 64) { - if (len > 96) { - acc += XXH3_mix16B(input+48, secret+96, seed); - acc += XXH3_mix16B(input+len-64, secret+112, seed); - } - acc += XXH3_mix16B(input+32, secret+64, seed); - acc += XXH3_mix16B(input+len-48, secret+80, seed); - } - acc += XXH3_mix16B(input+16, secret+32, seed); - acc += XXH3_mix16B(input+len-32, secret+48, seed); - } - acc += XXH3_mix16B(input+0, secret+0, seed); - acc += XXH3_mix16B(input+len-16, secret+16, seed); - - return XXH3_avalanche(acc); - } -} - -#define XXH3_MIDSIZE_MAX 240 - -XXH_NO_INLINE XXH64_hash_t -XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len, - const xxh_u8* XXH_RESTRICT secret, size_t secretSize, - XXH64_hash_t seed) -{ - XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; - XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); - - #define XXH3_MIDSIZE_STARTOFFSET 3 - #define XXH3_MIDSIZE_LASTOFFSET 17 - - { xxh_u64 acc = len * XXH_PRIME64_1; - int const nbRounds = (int)len / 16; - int i; - for (i=0; i<8; i++) { - acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed); - } - acc = XXH3_avalanche(acc); - XXH_ASSERT(nbRounds >= 8); -#if defined(__clang__) /* Clang */ \ - && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ - && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ - /* - * UGLY HACK: - * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86. - * In everywhere else, it uses scalar code. - * - * For 64->128-bit multiplies, even if the NEON was 100% optimal, it - * would still be slower than UMAAL (see XXH_mult64to128). - * - * Unfortunately, Clang doesn't handle the long multiplies properly and - * converts them to the nonexistent "vmulq_u64" intrinsic, which is then - * scalarized into an ugly mess of VMOV.32 instructions. - * - * This mess is difficult to avoid without turning autovectorization - * off completely, but they are usually relatively minor and/or not - * worth it to fix. - * - * This loop is the easiest to fix, as unlike XXH32, this pragma - * _actually works_ because it is a loop vectorization instead of an - * SLP vectorization. - */ - #pragma clang loop vectorize(disable) -#endif - for (i=8 ; i < nbRounds; i++) { - acc += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed); - } - /* last bytes */ - acc += XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed); - return XXH3_avalanche(acc); - } -} - - -/* ======= Long Keys ======= */ - -#define XXH_STRIPE_LEN 64 -#define XXH_SECRET_CONSUME_RATE 8 /* nb of secret bytes consumed at each accumulation */ -#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64)) - -#ifdef XXH_OLD_NAMES -# define STRIPE_LEN XXH_STRIPE_LEN -# define ACC_NB XXH_ACC_NB -#endif - -XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64) -{ - if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64); - XXH_memcpy(dst, &v64, sizeof(v64)); -} - -/* Several intrinsic functions below are supposed to accept __int64 as argument, - * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ . - * However, several environments do not define __int64 type, - * requiring a workaround. - */ -#if !defined (__VMS) \ - && (defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) - typedef int64_t xxh_i64; -#else - /* the following type must have a width of 64-bit */ - typedef long long xxh_i64; -#endif - - -/* - * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized. - * - * It is a hardened version of UMAC, based off of FARSH's implementation. - * - * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD - * implementations, and it is ridiculously fast. - * - * We harden it by mixing the original input to the accumulators as well as the product. - * - * This means that in the (relatively likely) case of a multiply by zero, the - * original input is preserved. - * - * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve - * cross-pollination, as otherwise the upper and lower halves would be - * essentially independent. - * - * This doesn't matter on 64-bit hashes since they all get merged together in - * the end, so we skip the extra step. - * - * Both XXH3_64bits and XXH3_128bits use this subroutine. - */ - -#if (XXH_VECTOR == XXH_AVX512) \ - || (defined(XXH_DISPATCH_AVX512) && XXH_DISPATCH_AVX512 != 0) - -#ifndef XXH_TARGET_AVX512 -# define XXH_TARGET_AVX512 /* disable attribute target */ -#endif - -XXH_FORCE_INLINE XXH_TARGET_AVX512 void -XXH3_accumulate_512_avx512(void* XXH_RESTRICT acc, - const void* XXH_RESTRICT input, - const void* XXH_RESTRICT secret) -{ - __m512i* const xacc = (__m512i *) acc; - XXH_ASSERT((((size_t)acc) & 63) == 0); - XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); - - { - /* data_vec = input[0]; */ - __m512i const data_vec = _mm512_loadu_si512 (input); - /* key_vec = secret[0]; */ - __m512i const key_vec = _mm512_loadu_si512 (secret); - /* data_key = data_vec ^ key_vec; */ - __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec); - /* data_key_lo = data_key >> 32; */ - __m512i const data_key_lo = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1)); - /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ - __m512i const product = _mm512_mul_epu32 (data_key, data_key_lo); - /* xacc[0] += swap(data_vec); */ - __m512i const data_swap = _mm512_shuffle_epi32(data_vec, (_MM_PERM_ENUM)_MM_SHUFFLE(1, 0, 3, 2)); - __m512i const sum = _mm512_add_epi64(*xacc, data_swap); - /* xacc[0] += product; */ - *xacc = _mm512_add_epi64(product, sum); - } -} - -/* - * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing. - * - * Multiplication isn't perfect, as explained by Google in HighwayHash: - * - * // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to - * // varying degrees. In descending order of goodness, bytes - * // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32. - * // As expected, the upper and lower bytes are much worse. - * - * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291 - * - * Since our algorithm uses a pseudorandom secret to add some variance into the - * mix, we don't need to (or want to) mix as often or as much as HighwayHash does. - * - * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid - * extraction. - * - * Both XXH3_64bits and XXH3_128bits use this subroutine. - */ - -XXH_FORCE_INLINE XXH_TARGET_AVX512 void -XXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) -{ - XXH_ASSERT((((size_t)acc) & 63) == 0); - XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i)); - { __m512i* const xacc = (__m512i*) acc; - const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1); - - /* xacc[0] ^= (xacc[0] >> 47) */ - __m512i const acc_vec = *xacc; - __m512i const shifted = _mm512_srli_epi64 (acc_vec, 47); - __m512i const data_vec = _mm512_xor_si512 (acc_vec, shifted); - /* xacc[0] ^= secret; */ - __m512i const key_vec = _mm512_loadu_si512 (secret); - __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec); - - /* xacc[0] *= XXH_PRIME32_1; */ - __m512i const data_key_hi = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1)); - __m512i const prod_lo = _mm512_mul_epu32 (data_key, prime32); - __m512i const prod_hi = _mm512_mul_epu32 (data_key_hi, prime32); - *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32)); - } -} - -XXH_FORCE_INLINE XXH_TARGET_AVX512 void -XXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64) -{ - XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0); - XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64); - XXH_ASSERT(((size_t)customSecret & 63) == 0); - (void)(&XXH_writeLE64); - { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i); - __m512i const seed = _mm512_mask_set1_epi64(_mm512_set1_epi64((xxh_i64)seed64), 0xAA, (xxh_i64)(0U - seed64)); - - const __m512i* const src = (const __m512i*) ((const void*) XXH3_kSecret); - __m512i* const dest = ( __m512i*) customSecret; - int i; - XXH_ASSERT(((size_t)src & 63) == 0); /* control alignment */ - XXH_ASSERT(((size_t)dest & 63) == 0); - for (i=0; i < nbRounds; ++i) { - /* GCC has a bug, _mm512_stream_load_si512 accepts 'void*', not 'void const*', - * this will warn "discards 'const' qualifier". */ - union { - const __m512i* cp; - void* p; - } remote_const_void; - remote_const_void.cp = src + i; - dest[i] = _mm512_add_epi64(_mm512_stream_load_si512(remote_const_void.p), seed); - } } -} - -#endif - -#if (XXH_VECTOR == XXH_AVX2) \ - || (defined(XXH_DISPATCH_AVX2) && XXH_DISPATCH_AVX2 != 0) - -#ifndef XXH_TARGET_AVX2 -# define XXH_TARGET_AVX2 /* disable attribute target */ -#endif - -XXH_FORCE_INLINE XXH_TARGET_AVX2 void -XXH3_accumulate_512_avx2( void* XXH_RESTRICT acc, - const void* XXH_RESTRICT input, - const void* XXH_RESTRICT secret) -{ - XXH_ASSERT((((size_t)acc) & 31) == 0); - { __m256i* const xacc = (__m256i *) acc; - /* Unaligned. This is mainly for pointer arithmetic, and because - * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ - const __m256i* const xinput = (const __m256i *) input; - /* Unaligned. This is mainly for pointer arithmetic, and because - * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ - const __m256i* const xsecret = (const __m256i *) secret; - - size_t i; - for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) { - /* data_vec = xinput[i]; */ - __m256i const data_vec = _mm256_loadu_si256 (xinput+i); - /* key_vec = xsecret[i]; */ - __m256i const key_vec = _mm256_loadu_si256 (xsecret+i); - /* data_key = data_vec ^ key_vec; */ - __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec); - /* data_key_lo = data_key >> 32; */ - __m256i const data_key_lo = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); - /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ - __m256i const product = _mm256_mul_epu32 (data_key, data_key_lo); - /* xacc[i] += swap(data_vec); */ - __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2)); - __m256i const sum = _mm256_add_epi64(xacc[i], data_swap); - /* xacc[i] += product; */ - xacc[i] = _mm256_add_epi64(product, sum); - } } -} - -XXH_FORCE_INLINE XXH_TARGET_AVX2 void -XXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) -{ - XXH_ASSERT((((size_t)acc) & 31) == 0); - { __m256i* const xacc = (__m256i*) acc; - /* Unaligned. This is mainly for pointer arithmetic, and because - * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */ - const __m256i* const xsecret = (const __m256i *) secret; - const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1); - - size_t i; - for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) { - /* xacc[i] ^= (xacc[i] >> 47) */ - __m256i const acc_vec = xacc[i]; - __m256i const shifted = _mm256_srli_epi64 (acc_vec, 47); - __m256i const data_vec = _mm256_xor_si256 (acc_vec, shifted); - /* xacc[i] ^= xsecret; */ - __m256i const key_vec = _mm256_loadu_si256 (xsecret+i); - __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec); - - /* xacc[i] *= XXH_PRIME32_1; */ - __m256i const data_key_hi = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); - __m256i const prod_lo = _mm256_mul_epu32 (data_key, prime32); - __m256i const prod_hi = _mm256_mul_epu32 (data_key_hi, prime32); - xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32)); - } - } -} - -XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) -{ - XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0); - XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6); - XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64); - (void)(&XXH_writeLE64); - XXH_PREFETCH(customSecret); - { __m256i const seed = _mm256_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64, (xxh_i64)(0U - seed64), (xxh_i64)seed64); - - const __m256i* const src = (const __m256i*) ((const void*) XXH3_kSecret); - __m256i* dest = ( __m256i*) customSecret; - -# if defined(__GNUC__) || defined(__clang__) - /* - * On GCC & Clang, marking 'dest' as modified will cause the compiler: - * - do not extract the secret from sse registers in the internal loop - * - use less common registers, and avoid pushing these reg into stack - */ - XXH_COMPILER_GUARD(dest); -# endif - XXH_ASSERT(((size_t)src & 31) == 0); /* control alignment */ - XXH_ASSERT(((size_t)dest & 31) == 0); - - /* GCC -O2 need unroll loop manually */ - dest[0] = _mm256_add_epi64(_mm256_stream_load_si256(src+0), seed); - dest[1] = _mm256_add_epi64(_mm256_stream_load_si256(src+1), seed); - dest[2] = _mm256_add_epi64(_mm256_stream_load_si256(src+2), seed); - dest[3] = _mm256_add_epi64(_mm256_stream_load_si256(src+3), seed); - dest[4] = _mm256_add_epi64(_mm256_stream_load_si256(src+4), seed); - dest[5] = _mm256_add_epi64(_mm256_stream_load_si256(src+5), seed); - } -} - -#endif - -/* x86dispatch always generates SSE2 */ -#if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH) - -#ifndef XXH_TARGET_SSE2 -# define XXH_TARGET_SSE2 /* disable attribute target */ -#endif - -XXH_FORCE_INLINE XXH_TARGET_SSE2 void -XXH3_accumulate_512_sse2( void* XXH_RESTRICT acc, - const void* XXH_RESTRICT input, - const void* XXH_RESTRICT secret) -{ - /* SSE2 is just a half-scale version of the AVX2 version. */ - XXH_ASSERT((((size_t)acc) & 15) == 0); - { __m128i* const xacc = (__m128i *) acc; - /* Unaligned. This is mainly for pointer arithmetic, and because - * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ - const __m128i* const xinput = (const __m128i *) input; - /* Unaligned. This is mainly for pointer arithmetic, and because - * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ - const __m128i* const xsecret = (const __m128i *) secret; - - size_t i; - for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) { - /* data_vec = xinput[i]; */ - __m128i const data_vec = _mm_loadu_si128 (xinput+i); - /* key_vec = xsecret[i]; */ - __m128i const key_vec = _mm_loadu_si128 (xsecret+i); - /* data_key = data_vec ^ key_vec; */ - __m128i const data_key = _mm_xor_si128 (data_vec, key_vec); - /* data_key_lo = data_key >> 32; */ - __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); - /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */ - __m128i const product = _mm_mul_epu32 (data_key, data_key_lo); - /* xacc[i] += swap(data_vec); */ - __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2)); - __m128i const sum = _mm_add_epi64(xacc[i], data_swap); - /* xacc[i] += product; */ - xacc[i] = _mm_add_epi64(product, sum); - } } -} - -XXH_FORCE_INLINE XXH_TARGET_SSE2 void -XXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) -{ - XXH_ASSERT((((size_t)acc) & 15) == 0); - { __m128i* const xacc = (__m128i*) acc; - /* Unaligned. This is mainly for pointer arithmetic, and because - * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */ - const __m128i* const xsecret = (const __m128i *) secret; - const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1); - - size_t i; - for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) { - /* xacc[i] ^= (xacc[i] >> 47) */ - __m128i const acc_vec = xacc[i]; - __m128i const shifted = _mm_srli_epi64 (acc_vec, 47); - __m128i const data_vec = _mm_xor_si128 (acc_vec, shifted); - /* xacc[i] ^= xsecret[i]; */ - __m128i const key_vec = _mm_loadu_si128 (xsecret+i); - __m128i const data_key = _mm_xor_si128 (data_vec, key_vec); - - /* xacc[i] *= XXH_PRIME32_1; */ - __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1)); - __m128i const prod_lo = _mm_mul_epu32 (data_key, prime32); - __m128i const prod_hi = _mm_mul_epu32 (data_key_hi, prime32); - xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32)); - } - } -} - -XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64) -{ - XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); - (void)(&XXH_writeLE64); - { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i); - -# if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900 - /* MSVC 32bit mode does not support _mm_set_epi64x before 2015 */ - XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, (xxh_i64)(0U - seed64) }; - __m128i const seed = _mm_load_si128((__m128i const*)seed64x2); -# else - __m128i const seed = _mm_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64); -# endif - int i; - - const void* const src16 = XXH3_kSecret; - __m128i* dst16 = (__m128i*) customSecret; -# if defined(__GNUC__) || defined(__clang__) - /* - * On GCC & Clang, marking 'dest' as modified will cause the compiler: - * - do not extract the secret from sse registers in the internal loop - * - use less common registers, and avoid pushing these reg into stack - */ - XXH_COMPILER_GUARD(dst16); -# endif - XXH_ASSERT(((size_t)src16 & 15) == 0); /* control alignment */ - XXH_ASSERT(((size_t)dst16 & 15) == 0); - - for (i=0; i < nbRounds; ++i) { - dst16[i] = _mm_add_epi64(_mm_load_si128((const __m128i *)src16+i), seed); - } } -} - -#endif - -#if (XXH_VECTOR == XXH_NEON) - -/* forward declarations for the scalar routines */ -XXH_FORCE_INLINE void -XXH3_scalarRound(void* XXH_RESTRICT acc, void const* XXH_RESTRICT input, - void const* XXH_RESTRICT secret, size_t lane); - -XXH_FORCE_INLINE void -XXH3_scalarScrambleRound(void* XXH_RESTRICT acc, - void const* XXH_RESTRICT secret, size_t lane); - -/*! - * @internal - * @brief The bulk processing loop for NEON. - * - * The NEON code path is actually partially scalar when running on AArch64. This - * is to optimize the pipelining and can have up to 15% speedup depending on the - * CPU, and it also mitigates some GCC codegen issues. - * - * @see XXH3_NEON_LANES for configuring this and details about this optimization. - */ -XXH_FORCE_INLINE void -XXH3_accumulate_512_neon( void* XXH_RESTRICT acc, - const void* XXH_RESTRICT input, - const void* XXH_RESTRICT secret) -{ - XXH_ASSERT((((size_t)acc) & 15) == 0); - XXH_STATIC_ASSERT(XXH3_NEON_LANES > 0 && XXH3_NEON_LANES <= XXH_ACC_NB && XXH3_NEON_LANES % 2 == 0); - { - uint64x2_t* const xacc = (uint64x2_t *) acc; - /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */ - uint8_t const* const xinput = (const uint8_t *) input; - uint8_t const* const xsecret = (const uint8_t *) secret; - - size_t i; - /* NEON for the first few lanes (these loops are normally interleaved) */ - for (i=0; i < XXH3_NEON_LANES / 2; i++) { - /* data_vec = xinput[i]; */ - uint8x16_t data_vec = vld1q_u8(xinput + (i * 16)); - /* key_vec = xsecret[i]; */ - uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16)); - uint64x2_t data_key; - uint32x2_t data_key_lo, data_key_hi; - /* xacc[i] += swap(data_vec); */ - uint64x2_t const data64 = vreinterpretq_u64_u8(data_vec); - uint64x2_t const swapped = vextq_u64(data64, data64, 1); - xacc[i] = vaddq_u64 (xacc[i], swapped); - /* data_key = data_vec ^ key_vec; */ - data_key = vreinterpretq_u64_u8(veorq_u8(data_vec, key_vec)); - /* data_key_lo = (uint32x2_t) (data_key & 0xFFFFFFFF); - * data_key_hi = (uint32x2_t) (data_key >> 32); - * data_key = UNDEFINED; */ - XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi); - /* xacc[i] += (uint64x2_t) data_key_lo * (uint64x2_t) data_key_hi; */ - xacc[i] = vmlal_u32 (xacc[i], data_key_lo, data_key_hi); - - } - /* Scalar for the remainder. This may be a zero iteration loop. */ - for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) { - XXH3_scalarRound(acc, input, secret, i); - } - } -} - -XXH_FORCE_INLINE void -XXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) -{ - XXH_ASSERT((((size_t)acc) & 15) == 0); - - { uint64x2_t* xacc = (uint64x2_t*) acc; - uint8_t const* xsecret = (uint8_t const*) secret; - uint32x2_t prime = vdup_n_u32 (XXH_PRIME32_1); - - size_t i; - /* NEON for the first few lanes (these loops are normally interleaved) */ - for (i=0; i < XXH3_NEON_LANES / 2; i++) { - /* xacc[i] ^= (xacc[i] >> 47); */ - uint64x2_t acc_vec = xacc[i]; - uint64x2_t shifted = vshrq_n_u64 (acc_vec, 47); - uint64x2_t data_vec = veorq_u64 (acc_vec, shifted); - - /* xacc[i] ^= xsecret[i]; */ - uint8x16_t key_vec = vld1q_u8 (xsecret + (i * 16)); - uint64x2_t data_key = veorq_u64 (data_vec, vreinterpretq_u64_u8(key_vec)); - - /* xacc[i] *= XXH_PRIME32_1 */ - uint32x2_t data_key_lo, data_key_hi; - /* data_key_lo = (uint32x2_t) (xacc[i] & 0xFFFFFFFF); - * data_key_hi = (uint32x2_t) (xacc[i] >> 32); - * xacc[i] = UNDEFINED; */ - XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi); - { /* - * prod_hi = (data_key >> 32) * XXH_PRIME32_1; - * - * Avoid vmul_u32 + vshll_n_u32 since Clang 6 and 7 will - * incorrectly "optimize" this: - * tmp = vmul_u32(vmovn_u64(a), vmovn_u64(b)); - * shifted = vshll_n_u32(tmp, 32); - * to this: - * tmp = "vmulq_u64"(a, b); // no such thing! - * shifted = vshlq_n_u64(tmp, 32); - * - * However, unlike SSE, Clang lacks a 64-bit multiply routine - * for NEON, and it scalarizes two 64-bit multiplies instead. - * - * vmull_u32 has the same timing as vmul_u32, and it avoids - * this bug completely. - * See https://bugs.llvm.org/show_bug.cgi?id=39967 - */ - uint64x2_t prod_hi = vmull_u32 (data_key_hi, prime); - /* xacc[i] = prod_hi << 32; */ - xacc[i] = vshlq_n_u64(prod_hi, 32); - /* xacc[i] += (prod_hi & 0xFFFFFFFF) * XXH_PRIME32_1; */ - xacc[i] = vmlal_u32(xacc[i], data_key_lo, prime); - } - } - /* Scalar for the remainder. This may be a zero iteration loop. */ - for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) { - XXH3_scalarScrambleRound(acc, secret, i); - } - } -} - -#endif - -#if (XXH_VECTOR == XXH_VSX) - -XXH_FORCE_INLINE void -XXH3_accumulate_512_vsx( void* XXH_RESTRICT acc, - const void* XXH_RESTRICT input, - const void* XXH_RESTRICT secret) -{ - /* presumed aligned */ - unsigned int* const xacc = (unsigned int*) acc; - xxh_u64x2 const* const xinput = (xxh_u64x2 const*) input; /* no alignment restriction */ - xxh_u64x2 const* const xsecret = (xxh_u64x2 const*) secret; /* no alignment restriction */ - xxh_u64x2 const v32 = { 32, 32 }; - size_t i; - for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { - /* data_vec = xinput[i]; */ - xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + i); - /* key_vec = xsecret[i]; */ - xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i); - xxh_u64x2 const data_key = data_vec ^ key_vec; - /* shuffled = (data_key << 32) | (data_key >> 32); */ - xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32); - /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */ - xxh_u64x2 const product = XXH_vec_mulo((xxh_u32x4)data_key, shuffled); - /* acc_vec = xacc[i]; */ - xxh_u64x2 acc_vec = (xxh_u64x2)vec_xl(0, xacc + 4 * i); - acc_vec += product; - - /* swap high and low halves */ -#ifdef __s390x__ - acc_vec += vec_permi(data_vec, data_vec, 2); -#else - acc_vec += vec_xxpermdi(data_vec, data_vec, 2); -#endif - /* xacc[i] = acc_vec; */ - vec_xst((xxh_u32x4)acc_vec, 0, xacc + 4 * i); - } -} - -XXH_FORCE_INLINE void -XXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) -{ - XXH_ASSERT((((size_t)acc) & 15) == 0); - - { xxh_u64x2* const xacc = (xxh_u64x2*) acc; - const xxh_u64x2* const xsecret = (const xxh_u64x2*) secret; - /* constants */ - xxh_u64x2 const v32 = { 32, 32 }; - xxh_u64x2 const v47 = { 47, 47 }; - xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 }; - size_t i; - for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) { - /* xacc[i] ^= (xacc[i] >> 47); */ - xxh_u64x2 const acc_vec = xacc[i]; - xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47); - - /* xacc[i] ^= xsecret[i]; */ - xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i); - xxh_u64x2 const data_key = data_vec ^ key_vec; - - /* xacc[i] *= XXH_PRIME32_1 */ - /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF); */ - xxh_u64x2 const prod_even = XXH_vec_mule((xxh_u32x4)data_key, prime); - /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32); */ - xxh_u64x2 const prod_odd = XXH_vec_mulo((xxh_u32x4)data_key, prime); - xacc[i] = prod_odd + (prod_even << v32); - } } -} - -#endif - -/* scalar variants - universal */ - -/*! - * @internal - * @brief Scalar round for @ref XXH3_accumulate_512_scalar(). - * - * This is extracted to its own function because the NEON path uses a combination - * of NEON and scalar. - */ -XXH_FORCE_INLINE void -XXH3_scalarRound(void* XXH_RESTRICT acc, - void const* XXH_RESTRICT input, - void const* XXH_RESTRICT secret, - size_t lane) -{ - xxh_u64* xacc = (xxh_u64*) acc; - xxh_u8 const* xinput = (xxh_u8 const*) input; - xxh_u8 const* xsecret = (xxh_u8 const*) secret; - XXH_ASSERT(lane < XXH_ACC_NB); - XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0); - { - xxh_u64 const data_val = XXH_readLE64(xinput + lane * 8); - xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + lane * 8); - xacc[lane ^ 1] += data_val; /* swap adjacent lanes */ - xacc[lane] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32); - } -} - -/*! - * @internal - * @brief Processes a 64 byte block of data using the scalar path. - */ -XXH_FORCE_INLINE void -XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc, - const void* XXH_RESTRICT input, - const void* XXH_RESTRICT secret) -{ - size_t i; - for (i=0; i < XXH_ACC_NB; i++) { - XXH3_scalarRound(acc, input, secret, i); - } -} - -/*! - * @internal - * @brief Scalar scramble step for @ref XXH3_scrambleAcc_scalar(). - * - * This is extracted to its own function because the NEON path uses a combination - * of NEON and scalar. - */ -XXH_FORCE_INLINE void -XXH3_scalarScrambleRound(void* XXH_RESTRICT acc, - void const* XXH_RESTRICT secret, - size_t lane) -{ - xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */ - const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */ - XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0); - XXH_ASSERT(lane < XXH_ACC_NB); - { - xxh_u64 const key64 = XXH_readLE64(xsecret + lane * 8); - xxh_u64 acc64 = xacc[lane]; - acc64 = XXH_xorshift64(acc64, 47); - acc64 ^= key64; - acc64 *= XXH_PRIME32_1; - xacc[lane] = acc64; - } -} - -/*! - * @internal - * @brief Scrambles the accumulators after a large chunk has been read - */ -XXH_FORCE_INLINE void -XXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret) -{ - size_t i; - for (i=0; i < XXH_ACC_NB; i++) { - XXH3_scalarScrambleRound(acc, secret, i); - } -} - -XXH_FORCE_INLINE void -XXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64) -{ - /* - * We need a separate pointer for the hack below, - * which requires a non-const pointer. - * Any decent compiler will optimize this out otherwise. - */ - const xxh_u8* kSecretPtr = XXH3_kSecret; - XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0); - -#if defined(__clang__) && defined(__aarch64__) - /* - * UGLY HACK: - * Clang generates a bunch of MOV/MOVK pairs for aarch64, and they are - * placed sequentially, in order, at the top of the unrolled loop. - * - * While MOVK is great for generating constants (2 cycles for a 64-bit - * constant compared to 4 cycles for LDR), it fights for bandwidth with - * the arithmetic instructions. - * - * I L S - * MOVK - * MOVK - * MOVK - * MOVK - * ADD - * SUB STR - * STR - * By forcing loads from memory (as the asm line causes Clang to assume - * that XXH3_kSecretPtr has been changed), the pipelines are used more - * efficiently: - * I L S - * LDR - * ADD LDR - * SUB STR - * STR - * - * See XXH3_NEON_LANES for details on the pipsline. - * - * XXH3_64bits_withSeed, len == 256, Snapdragon 835 - * without hack: 2654.4 MB/s - * with hack: 3202.9 MB/s - */ - XXH_COMPILER_GUARD(kSecretPtr); -#endif - /* - * Note: in debug mode, this overrides the asm optimization - * and Clang will emit MOVK chains again. - */ - XXH_ASSERT(kSecretPtr == XXH3_kSecret); - - { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16; - int i; - for (i=0; i < nbRounds; i++) { - /* - * The asm hack causes Clang to assume that kSecretPtr aliases with - * customSecret, and on aarch64, this prevented LDP from merging two - * loads together for free. Putting the loads together before the stores - * properly generates LDP. - */ - xxh_u64 lo = XXH_readLE64(kSecretPtr + 16*i) + seed64; - xxh_u64 hi = XXH_readLE64(kSecretPtr + 16*i + 8) - seed64; - XXH_writeLE64((xxh_u8*)customSecret + 16*i, lo); - XXH_writeLE64((xxh_u8*)customSecret + 16*i + 8, hi); - } } -} - - -typedef void (*XXH3_f_accumulate_512)(void* XXH_RESTRICT, const void*, const void*); -typedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*); -typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64); - - -#if (XXH_VECTOR == XXH_AVX512) - -#define XXH3_accumulate_512 XXH3_accumulate_512_avx512 -#define XXH3_scrambleAcc XXH3_scrambleAcc_avx512 -#define XXH3_initCustomSecret XXH3_initCustomSecret_avx512 - -#elif (XXH_VECTOR == XXH_AVX2) - -#define XXH3_accumulate_512 XXH3_accumulate_512_avx2 -#define XXH3_scrambleAcc XXH3_scrambleAcc_avx2 -#define XXH3_initCustomSecret XXH3_initCustomSecret_avx2 - -#elif (XXH_VECTOR == XXH_SSE2) - -#define XXH3_accumulate_512 XXH3_accumulate_512_sse2 -#define XXH3_scrambleAcc XXH3_scrambleAcc_sse2 -#define XXH3_initCustomSecret XXH3_initCustomSecret_sse2 - -#elif (XXH_VECTOR == XXH_NEON) - -#define XXH3_accumulate_512 XXH3_accumulate_512_neon -#define XXH3_scrambleAcc XXH3_scrambleAcc_neon -#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar - -#elif (XXH_VECTOR == XXH_VSX) - -#define XXH3_accumulate_512 XXH3_accumulate_512_vsx -#define XXH3_scrambleAcc XXH3_scrambleAcc_vsx -#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar - -#else /* scalar */ - -#define XXH3_accumulate_512 XXH3_accumulate_512_scalar -#define XXH3_scrambleAcc XXH3_scrambleAcc_scalar -#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar - -#endif - - - -#ifndef XXH_PREFETCH_DIST -# ifdef __clang__ -# define XXH_PREFETCH_DIST 320 -# else -# if (XXH_VECTOR == XXH_AVX512) -# define XXH_PREFETCH_DIST 512 -# else -# define XXH_PREFETCH_DIST 384 -# endif -# endif /* __clang__ */ -#endif /* XXH_PREFETCH_DIST */ - -/* - * XXH3_accumulate() - * Loops over XXH3_accumulate_512(). - * Assumption: nbStripes will not overflow the secret size - */ -XXH_FORCE_INLINE void -XXH3_accumulate( xxh_u64* XXH_RESTRICT acc, - const xxh_u8* XXH_RESTRICT input, - const xxh_u8* XXH_RESTRICT secret, - size_t nbStripes, - XXH3_f_accumulate_512 f_acc512) -{ - size_t n; - for (n = 0; n < nbStripes; n++ ) { - const xxh_u8* const in = input + n*XXH_STRIPE_LEN; - XXH_PREFETCH(in + XXH_PREFETCH_DIST); - f_acc512(acc, - in, - secret + n*XXH_SECRET_CONSUME_RATE); - } -} - -XXH_FORCE_INLINE void -XXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc, - const xxh_u8* XXH_RESTRICT input, size_t len, - const xxh_u8* XXH_RESTRICT secret, size_t secretSize, - XXH3_f_accumulate_512 f_acc512, - XXH3_f_scrambleAcc f_scramble) -{ - size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE; - size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock; - size_t const nb_blocks = (len - 1) / block_len; - - size_t n; - - XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); - - for (n = 0; n < nb_blocks; n++) { - XXH3_accumulate(acc, input + n*block_len, secret, nbStripesPerBlock, f_acc512); - f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN); - } - - /* last partial block */ - XXH_ASSERT(len > XXH_STRIPE_LEN); - { size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN; - XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE)); - XXH3_accumulate(acc, input + nb_blocks*block_len, secret, nbStripes, f_acc512); - - /* last stripe */ - { const xxh_u8* const p = input + len - XXH_STRIPE_LEN; -#define XXH_SECRET_LASTACC_START 7 /* not aligned on 8, last secret is different from acc & scrambler */ - f_acc512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START); - } } -} - -XXH_FORCE_INLINE xxh_u64 -XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret) -{ - return XXH3_mul128_fold64( - acc[0] ^ XXH_readLE64(secret), - acc[1] ^ XXH_readLE64(secret+8) ); -} - -static XXH64_hash_t -XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start) -{ - xxh_u64 result64 = start; - size_t i = 0; - - for (i = 0; i < 4; i++) { - result64 += XXH3_mix2Accs(acc+2*i, secret + 16*i); -#if defined(__clang__) /* Clang */ \ - && (defined(__arm__) || defined(__thumb__)) /* ARMv7 */ \ - && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \ - && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */ - /* - * UGLY HACK: - * Prevent autovectorization on Clang ARMv7-a. Exact same problem as - * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b. - * XXH3_64bits, len == 256, Snapdragon 835: - * without hack: 2063.7 MB/s - * with hack: 2560.7 MB/s - */ - XXH_COMPILER_GUARD(result64); -#endif - } - - return XXH3_avalanche(result64); -} - -#define XXH3_INIT_ACC { XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, \ - XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 } - -XXH_FORCE_INLINE XXH64_hash_t -XXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len, - const void* XXH_RESTRICT secret, size_t secretSize, - XXH3_f_accumulate_512 f_acc512, - XXH3_f_scrambleAcc f_scramble) -{ - XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; - - XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc512, f_scramble); - - /* converge into final hash */ - XXH_STATIC_ASSERT(sizeof(acc) == 64); - /* do not align on 8, so that the secret is different from the accumulator */ -#define XXH_SECRET_MERGEACCS_START 11 - XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); - return XXH3_mergeAccs(acc, (const xxh_u8*)secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1); -} - -/* - * It's important for performance to transmit secret's size (when it's static) - * so that the compiler can properly optimize the vectorized loop. - * This makes a big performance difference for "medium" keys (<1 KB) when using AVX instruction set. - */ -XXH_FORCE_INLINE XXH64_hash_t -XXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len, - XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) -{ - (void)seed64; - return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate_512, XXH3_scrambleAcc); -} - -/* - * It's preferable for performance that XXH3_hashLong is not inlined, - * as it results in a smaller function for small data, easier to the instruction cache. - * Note that inside this no_inline function, we do inline the internal loop, - * and provide a statically defined secret size to allow optimization of vector loop. - */ -XXH_NO_INLINE XXH64_hash_t -XXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len, - XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen) -{ - (void)seed64; (void)secret; (void)secretLen; - return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, XXH3_scrambleAcc); -} - -/* - * XXH3_hashLong_64b_withSeed(): - * Generate a custom key based on alteration of default XXH3_kSecret with the seed, - * and then use this key for long mode hashing. - * - * This operation is decently fast but nonetheless costs a little bit of time. - * Try to avoid it whenever possible (typically when seed==0). - * - * It's important for performance that XXH3_hashLong is not inlined. Not sure - * why (uop cache maybe?), but the difference is large and easily measurable. - */ -XXH_FORCE_INLINE XXH64_hash_t -XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len, - XXH64_hash_t seed, - XXH3_f_accumulate_512 f_acc512, - XXH3_f_scrambleAcc f_scramble, - XXH3_f_initCustomSecret f_initSec) -{ - if (seed == 0) - return XXH3_hashLong_64b_internal(input, len, - XXH3_kSecret, sizeof(XXH3_kSecret), - f_acc512, f_scramble); - { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; - f_initSec(secret, seed); - return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret), - f_acc512, f_scramble); - } -} - -/* - * It's important for performance that XXH3_hashLong is not inlined. - */ -XXH_NO_INLINE XXH64_hash_t -XXH3_hashLong_64b_withSeed(const void* input, size_t len, - XXH64_hash_t seed, const xxh_u8* secret, size_t secretLen) -{ - (void)secret; (void)secretLen; - return XXH3_hashLong_64b_withSeed_internal(input, len, seed, - XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret); -} - - -typedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t, - XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t); - -XXH_FORCE_INLINE XXH64_hash_t -XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len, - XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen, - XXH3_hashLong64_f f_hashLong) -{ - XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); - /* - * If an action is to be taken if `secretLen` condition is not respected, - * it should be done here. - * For now, it's a contract pre-condition. - * Adding a check and a branch here would cost performance at every hash. - * Also, note that function signature doesn't offer room to return an error. - */ - if (len <= 16) - return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64); - if (len <= 128) - return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); - if (len <= XXH3_MIDSIZE_MAX) - return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); - return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen); -} - - -/* === Public entry point === */ - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* input, size_t len) -{ - return XXH3_64bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH64_hash_t -XXH3_64bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize) -{ - return XXH3_64bits_internal(input, len, 0, secret, secretSize, XXH3_hashLong_64b_withSecret); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH64_hash_t -XXH3_64bits_withSeed(const void* input, size_t len, XXH64_hash_t seed) -{ - return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed); -} - -XXH_PUBLIC_API XXH64_hash_t -XXH3_64bits_withSecretandSeed(const void* input, size_t len, const void* secret, size_t secretSize, XXH64_hash_t seed) -{ - if (len <= XXH3_MIDSIZE_MAX) - return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL); - return XXH3_hashLong_64b_withSecret(input, len, seed, (const xxh_u8*)secret, secretSize); -} - - -/* === XXH3 streaming === */ - -/* - * Malloc's a pointer that is always aligned to align. - * - * This must be freed with `XXH_alignedFree()`. - * - * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte - * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2 - * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON. - * - * This underalignment previously caused a rather obvious crash which went - * completely unnoticed due to XXH3_createState() not actually being tested. - * Credit to RedSpah for noticing this bug. - * - * The alignment is done manually: Functions like posix_memalign or _mm_malloc - * are avoided: To maintain portability, we would have to write a fallback - * like this anyways, and besides, testing for the existence of library - * functions without relying on external build tools is impossible. - * - * The method is simple: Overallocate, manually align, and store the offset - * to the original behind the returned pointer. - * - * Align must be a power of 2 and 8 <= align <= 128. - */ -static void* XXH_alignedMalloc(size_t s, size_t align) -{ - XXH_ASSERT(align <= 128 && align >= 8); /* range check */ - XXH_ASSERT((align & (align-1)) == 0); /* power of 2 */ - XXH_ASSERT(s != 0 && s < (s + align)); /* empty/overflow */ - { /* Overallocate to make room for manual realignment and an offset byte */ - xxh_u8* base = (xxh_u8*)XXH_malloc(s + align); - if (base != NULL) { - /* - * Get the offset needed to align this pointer. - * - * Even if the returned pointer is aligned, there will always be - * at least one byte to store the offset to the original pointer. - */ - size_t offset = align - ((size_t)base & (align - 1)); /* base % align */ - /* Add the offset for the now-aligned pointer */ - xxh_u8* ptr = base + offset; - - XXH_ASSERT((size_t)ptr % align == 0); - - /* Store the offset immediately before the returned pointer. */ - ptr[-1] = (xxh_u8)offset; - return ptr; - } - return NULL; - } -} -/* - * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass - * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout. - */ -static void XXH_alignedFree(void* p) -{ - if (p != NULL) { - xxh_u8* ptr = (xxh_u8*)p; - /* Get the offset byte we added in XXH_malloc. */ - xxh_u8 offset = ptr[-1]; - /* Free the original malloc'd pointer */ - xxh_u8* base = ptr - offset; - XXH_free(base); - } -} -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void) -{ - XXH3_state_t* const state = (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64); - if (state==NULL) return NULL; - XXH3_INITSTATE(state); - return state; -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr) -{ - XXH_alignedFree(statePtr); - return XXH_OK; -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API void -XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state) -{ - XXH_memcpy(dst_state, src_state, sizeof(*dst_state)); -} - -static void -XXH3_reset_internal(XXH3_state_t* statePtr, - XXH64_hash_t seed, - const void* secret, size_t secretSize) -{ - size_t const initStart = offsetof(XXH3_state_t, bufferedSize); - size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart; - XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart); - XXH_ASSERT(statePtr != NULL); - /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */ - memset((char*)statePtr + initStart, 0, initLength); - statePtr->acc[0] = XXH_PRIME32_3; - statePtr->acc[1] = XXH_PRIME64_1; - statePtr->acc[2] = XXH_PRIME64_2; - statePtr->acc[3] = XXH_PRIME64_3; - statePtr->acc[4] = XXH_PRIME64_4; - statePtr->acc[5] = XXH_PRIME32_2; - statePtr->acc[6] = XXH_PRIME64_5; - statePtr->acc[7] = XXH_PRIME32_1; - statePtr->seed = seed; - statePtr->useSeed = (seed != 0); - statePtr->extSecret = (const unsigned char*)secret; - XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); - statePtr->secretLimit = secretSize - XXH_STRIPE_LEN; - statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE; -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_64bits_reset(XXH3_state_t* statePtr) -{ - if (statePtr == NULL) return XXH_ERROR; - XXH3_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE); - return XXH_OK; -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize) -{ - if (statePtr == NULL) return XXH_ERROR; - XXH3_reset_internal(statePtr, 0, secret, secretSize); - if (secret == NULL) return XXH_ERROR; - if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; - return XXH_OK; -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed) -{ - if (statePtr == NULL) return XXH_ERROR; - if (seed==0) return XXH3_64bits_reset(statePtr); - if ((seed != statePtr->seed) || (statePtr->extSecret != NULL)) - XXH3_initCustomSecret(statePtr->customSecret, seed); - XXH3_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE); - return XXH_OK; -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_64bits_reset_withSecretandSeed(XXH3_state_t* statePtr, const void* secret, size_t secretSize, XXH64_hash_t seed64) -{ - if (statePtr == NULL) return XXH_ERROR; - if (secret == NULL) return XXH_ERROR; - if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; - XXH3_reset_internal(statePtr, seed64, secret, secretSize); - statePtr->useSeed = 1; /* always, even if seed64==0 */ - return XXH_OK; -} - -/* Note : when XXH3_consumeStripes() is invoked, - * there must be a guarantee that at least one more byte must be consumed from input - * so that the function can blindly consume all stripes using the "normal" secret segment */ -XXH_FORCE_INLINE void -XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc, - size_t* XXH_RESTRICT nbStripesSoFarPtr, size_t nbStripesPerBlock, - const xxh_u8* XXH_RESTRICT input, size_t nbStripes, - const xxh_u8* XXH_RESTRICT secret, size_t secretLimit, - XXH3_f_accumulate_512 f_acc512, - XXH3_f_scrambleAcc f_scramble) -{ - XXH_ASSERT(nbStripes <= nbStripesPerBlock); /* can handle max 1 scramble per invocation */ - XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock); - if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) { - /* need a scrambling operation */ - size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr; - size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock; - XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripesToEndofBlock, f_acc512); - f_scramble(acc, secret + secretLimit); - XXH3_accumulate(acc, input + nbStripesToEndofBlock * XXH_STRIPE_LEN, secret, nbStripesAfterBlock, f_acc512); - *nbStripesSoFarPtr = nbStripesAfterBlock; - } else { - XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripes, f_acc512); - *nbStripesSoFarPtr += nbStripes; - } -} - -#ifndef XXH3_STREAM_USE_STACK -# ifndef __clang__ /* clang doesn't need additional stack space */ -# define XXH3_STREAM_USE_STACK 1 -# endif -#endif -/* - * Both XXH3_64bits_update and XXH3_128bits_update use this routine. - */ -XXH_FORCE_INLINE XXH_errorcode -XXH3_update(XXH3_state_t* XXH_RESTRICT const state, - const xxh_u8* XXH_RESTRICT input, size_t len, - XXH3_f_accumulate_512 f_acc512, - XXH3_f_scrambleAcc f_scramble) -{ - if (input==NULL) { - XXH_ASSERT(len == 0); - return XXH_OK; - } - - XXH_ASSERT(state != NULL); - { const xxh_u8* const bEnd = input + len; - const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; -#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1 - /* For some reason, gcc and MSVC seem to suffer greatly - * when operating accumulators directly into state. - * Operating into stack space seems to enable proper optimization. - * clang, on the other hand, doesn't seem to need this trick */ - XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[8]; memcpy(acc, state->acc, sizeof(acc)); -#else - xxh_u64* XXH_RESTRICT const acc = state->acc; -#endif - state->totalLen += len; - XXH_ASSERT(state->bufferedSize <= XXH3_INTERNALBUFFER_SIZE); - - /* small input : just fill in tmp buffer */ - if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) { - XXH_memcpy(state->buffer + state->bufferedSize, input, len); - state->bufferedSize += (XXH32_hash_t)len; - return XXH_OK; - } - - /* total input is now > XXH3_INTERNALBUFFER_SIZE */ - #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN) - XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0); /* clean multiple */ - - /* - * Internal buffer is partially filled (always, except at beginning) - * Complete it, then consume it. - */ - if (state->bufferedSize) { - size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize; - XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize); - input += loadSize; - XXH3_consumeStripes(acc, - &state->nbStripesSoFar, state->nbStripesPerBlock, - state->buffer, XXH3_INTERNALBUFFER_STRIPES, - secret, state->secretLimit, - f_acc512, f_scramble); - state->bufferedSize = 0; - } - XXH_ASSERT(input < bEnd); - - /* large input to consume : ingest per full block */ - if ((size_t)(bEnd - input) > state->nbStripesPerBlock * XXH_STRIPE_LEN) { - size_t nbStripes = (size_t)(bEnd - 1 - input) / XXH_STRIPE_LEN; - XXH_ASSERT(state->nbStripesPerBlock >= state->nbStripesSoFar); - /* join to current block's end */ - { size_t const nbStripesToEnd = state->nbStripesPerBlock - state->nbStripesSoFar; - XXH_ASSERT(nbStripesToEnd <= nbStripes); - XXH3_accumulate(acc, input, secret + state->nbStripesSoFar * XXH_SECRET_CONSUME_RATE, nbStripesToEnd, f_acc512); - f_scramble(acc, secret + state->secretLimit); - state->nbStripesSoFar = 0; - input += nbStripesToEnd * XXH_STRIPE_LEN; - nbStripes -= nbStripesToEnd; - } - /* consume per entire blocks */ - while(nbStripes >= state->nbStripesPerBlock) { - XXH3_accumulate(acc, input, secret, state->nbStripesPerBlock, f_acc512); - f_scramble(acc, secret + state->secretLimit); - input += state->nbStripesPerBlock * XXH_STRIPE_LEN; - nbStripes -= state->nbStripesPerBlock; - } - /* consume last partial block */ - XXH3_accumulate(acc, input, secret, nbStripes, f_acc512); - input += nbStripes * XXH_STRIPE_LEN; - XXH_ASSERT(input < bEnd); /* at least some bytes left */ - state->nbStripesSoFar = nbStripes; - /* buffer predecessor of last partial stripe */ - XXH_memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN); - XXH_ASSERT(bEnd - input <= XXH_STRIPE_LEN); - } else { - /* content to consume <= block size */ - /* Consume input by a multiple of internal buffer size */ - if (bEnd - input > XXH3_INTERNALBUFFER_SIZE) { - const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE; - do { - XXH3_consumeStripes(acc, - &state->nbStripesSoFar, state->nbStripesPerBlock, - input, XXH3_INTERNALBUFFER_STRIPES, - secret, state->secretLimit, - f_acc512, f_scramble); - input += XXH3_INTERNALBUFFER_SIZE; - } while (inputbuffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN); - } - } - - /* Some remaining input (always) : buffer it */ - XXH_ASSERT(input < bEnd); - XXH_ASSERT(bEnd - input <= XXH3_INTERNALBUFFER_SIZE); - XXH_ASSERT(state->bufferedSize == 0); - XXH_memcpy(state->buffer, input, (size_t)(bEnd-input)); - state->bufferedSize = (XXH32_hash_t)(bEnd-input); -#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1 - /* save stack accumulators into state */ - memcpy(state->acc, acc, sizeof(acc)); -#endif - } - - return XXH_OK; -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len) -{ - return XXH3_update(state, (const xxh_u8*)input, len, - XXH3_accumulate_512, XXH3_scrambleAcc); -} - - -XXH_FORCE_INLINE void -XXH3_digest_long (XXH64_hash_t* acc, - const XXH3_state_t* state, - const unsigned char* secret) -{ - /* - * Digest on a local copy. This way, the state remains unaltered, and it can - * continue ingesting more input afterwards. - */ - XXH_memcpy(acc, state->acc, sizeof(state->acc)); - if (state->bufferedSize >= XXH_STRIPE_LEN) { - size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN; - size_t nbStripesSoFar = state->nbStripesSoFar; - XXH3_consumeStripes(acc, - &nbStripesSoFar, state->nbStripesPerBlock, - state->buffer, nbStripes, - secret, state->secretLimit, - XXH3_accumulate_512, XXH3_scrambleAcc); - /* last stripe */ - XXH3_accumulate_512(acc, - state->buffer + state->bufferedSize - XXH_STRIPE_LEN, - secret + state->secretLimit - XXH_SECRET_LASTACC_START); - } else { /* bufferedSize < XXH_STRIPE_LEN */ - xxh_u8 lastStripe[XXH_STRIPE_LEN]; - size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize; - XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */ - XXH_memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize); - XXH_memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize); - XXH3_accumulate_512(acc, - lastStripe, - secret + state->secretLimit - XXH_SECRET_LASTACC_START); - } -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* state) -{ - const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; - if (state->totalLen > XXH3_MIDSIZE_MAX) { - XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; - XXH3_digest_long(acc, state, secret); - return XXH3_mergeAccs(acc, - secret + XXH_SECRET_MERGEACCS_START, - (xxh_u64)state->totalLen * XXH_PRIME64_1); - } - /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */ - if (state->useSeed) - return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); - return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen), - secret, state->secretLimit + XXH_STRIPE_LEN); -} - - - -/* ========================================== - * XXH3 128 bits (a.k.a XXH128) - * ========================================== - * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant, - * even without counting the significantly larger output size. - * - * For example, extra steps are taken to avoid the seed-dependent collisions - * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B). - * - * This strength naturally comes at the cost of some speed, especially on short - * lengths. Note that longer hashes are about as fast as the 64-bit version - * due to it using only a slight modification of the 64-bit loop. - * - * XXH128 is also more oriented towards 64-bit machines. It is still extremely - * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64). - */ - -XXH_FORCE_INLINE XXH128_hash_t -XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - /* A doubled version of 1to3_64b with different constants. */ - XXH_ASSERT(input != NULL); - XXH_ASSERT(1 <= len && len <= 3); - XXH_ASSERT(secret != NULL); - /* - * len = 1: combinedl = { input[0], 0x01, input[0], input[0] } - * len = 2: combinedl = { input[1], 0x02, input[0], input[1] } - * len = 3: combinedl = { input[2], 0x03, input[0], input[1] } - */ - { xxh_u8 const c1 = input[0]; - xxh_u8 const c2 = input[len >> 1]; - xxh_u8 const c3 = input[len - 1]; - xxh_u32 const combinedl = ((xxh_u32)c1 <<16) | ((xxh_u32)c2 << 24) - | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8); - xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13); - xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed; - xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed; - xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl; - xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph; - XXH128_hash_t h128; - h128.low64 = XXH64_avalanche(keyed_lo); - h128.high64 = XXH64_avalanche(keyed_hi); - return h128; - } -} - -XXH_FORCE_INLINE XXH128_hash_t -XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - XXH_ASSERT(input != NULL); - XXH_ASSERT(secret != NULL); - XXH_ASSERT(4 <= len && len <= 8); - seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32; - { xxh_u32 const input_lo = XXH_readLE32(input); - xxh_u32 const input_hi = XXH_readLE32(input + len - 4); - xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32); - xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed; - xxh_u64 const keyed = input_64 ^ bitflip; - - /* Shift len to the left to ensure it is even, this avoids even multiplies. */ - XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2)); - - m128.high64 += (m128.low64 << 1); - m128.low64 ^= (m128.high64 >> 3); - - m128.low64 = XXH_xorshift64(m128.low64, 35); - m128.low64 *= 0x9FB21C651E98DF25ULL; - m128.low64 = XXH_xorshift64(m128.low64, 28); - m128.high64 = XXH3_avalanche(m128.high64); - return m128; - } -} - -XXH_FORCE_INLINE XXH128_hash_t -XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - XXH_ASSERT(input != NULL); - XXH_ASSERT(secret != NULL); - XXH_ASSERT(9 <= len && len <= 16); - { xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed; - xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed; - xxh_u64 const input_lo = XXH_readLE64(input); - xxh_u64 input_hi = XXH_readLE64(input + len - 8); - XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1); - /* - * Put len in the middle of m128 to ensure that the length gets mixed to - * both the low and high bits in the 128x64 multiply below. - */ - m128.low64 += (xxh_u64)(len - 1) << 54; - input_hi ^= bitfliph; - /* - * Add the high 32 bits of input_hi to the high 32 bits of m128, then - * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to - * the high 64 bits of m128. - * - * The best approach to this operation is different on 32-bit and 64-bit. - */ - if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */ - /* - * 32-bit optimized version, which is more readable. - * - * On 32-bit, it removes an ADC and delays a dependency between the two - * halves of m128.high64, but it generates an extra mask on 64-bit. - */ - m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2); - } else { - /* - * 64-bit optimized (albeit more confusing) version. - * - * Uses some properties of addition and multiplication to remove the mask: - * - * Let: - * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF) - * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000) - * c = XXH_PRIME32_2 - * - * a + (b * c) - * Inverse Property: x + y - x == y - * a + (b * (1 + c - 1)) - * Distributive Property: x * (y + z) == (x * y) + (x * z) - * a + (b * 1) + (b * (c - 1)) - * Identity Property: x * 1 == x - * a + b + (b * (c - 1)) - * - * Substitute a, b, and c: - * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) - * - * Since input_hi.hi + input_hi.lo == input_hi, we get this: - * input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1)) - */ - m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1); - } - /* m128 ^= XXH_swap64(m128 >> 64); */ - m128.low64 ^= XXH_swap64(m128.high64); - - { /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */ - XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2); - h128.high64 += m128.high64 * XXH_PRIME64_2; - - h128.low64 = XXH3_avalanche(h128.low64); - h128.high64 = XXH3_avalanche(h128.high64); - return h128; - } } -} - -/* - * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN - */ -XXH_FORCE_INLINE XXH128_hash_t -XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed) -{ - XXH_ASSERT(len <= 16); - { if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed); - if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed); - if (len) return XXH3_len_1to3_128b(input, len, secret, seed); - { XXH128_hash_t h128; - xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72); - xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88); - h128.low64 = XXH64_avalanche(seed ^ bitflipl); - h128.high64 = XXH64_avalanche( seed ^ bitfliph); - return h128; - } } -} - -/* - * A bit slower than XXH3_mix16B, but handles multiply by zero better. - */ -XXH_FORCE_INLINE XXH128_hash_t -XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2, - const xxh_u8* secret, XXH64_hash_t seed) -{ - acc.low64 += XXH3_mix16B (input_1, secret+0, seed); - acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8); - acc.high64 += XXH3_mix16B (input_2, secret+16, seed); - acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8); - return acc; -} - - -XXH_FORCE_INLINE XXH128_hash_t -XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len, - const xxh_u8* XXH_RESTRICT secret, size_t secretSize, - XXH64_hash_t seed) -{ - XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; - XXH_ASSERT(16 < len && len <= 128); - - { XXH128_hash_t acc; - acc.low64 = len * XXH_PRIME64_1; - acc.high64 = 0; - if (len > 32) { - if (len > 64) { - if (len > 96) { - acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed); - } - acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed); - } - acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed); - } - acc = XXH128_mix32B(acc, input, input+len-16, secret, seed); - { XXH128_hash_t h128; - h128.low64 = acc.low64 + acc.high64; - h128.high64 = (acc.low64 * XXH_PRIME64_1) - + (acc.high64 * XXH_PRIME64_4) - + ((len - seed) * XXH_PRIME64_2); - h128.low64 = XXH3_avalanche(h128.low64); - h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); - return h128; - } - } -} - -XXH_NO_INLINE XXH128_hash_t -XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len, - const xxh_u8* XXH_RESTRICT secret, size_t secretSize, - XXH64_hash_t seed) -{ - XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize; - XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX); - - { XXH128_hash_t acc; - int const nbRounds = (int)len / 32; - int i; - acc.low64 = len * XXH_PRIME64_1; - acc.high64 = 0; - for (i=0; i<4; i++) { - acc = XXH128_mix32B(acc, - input + (32 * i), - input + (32 * i) + 16, - secret + (32 * i), - seed); - } - acc.low64 = XXH3_avalanche(acc.low64); - acc.high64 = XXH3_avalanche(acc.high64); - XXH_ASSERT(nbRounds >= 4); - for (i=4 ; i < nbRounds; i++) { - acc = XXH128_mix32B(acc, - input + (32 * i), - input + (32 * i) + 16, - secret + XXH3_MIDSIZE_STARTOFFSET + (32 * (i - 4)), - seed); - } - /* last bytes */ - acc = XXH128_mix32B(acc, - input + len - 16, - input + len - 32, - secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16, - 0ULL - seed); - - { XXH128_hash_t h128; - h128.low64 = acc.low64 + acc.high64; - h128.high64 = (acc.low64 * XXH_PRIME64_1) - + (acc.high64 * XXH_PRIME64_4) - + ((len - seed) * XXH_PRIME64_2); - h128.low64 = XXH3_avalanche(h128.low64); - h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64); - return h128; - } - } -} - -XXH_FORCE_INLINE XXH128_hash_t -XXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len, - const xxh_u8* XXH_RESTRICT secret, size_t secretSize, - XXH3_f_accumulate_512 f_acc512, - XXH3_f_scrambleAcc f_scramble) -{ - XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC; - - XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc512, f_scramble); - - /* converge into final hash */ - XXH_STATIC_ASSERT(sizeof(acc) == 64); - XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); - { XXH128_hash_t h128; - h128.low64 = XXH3_mergeAccs(acc, - secret + XXH_SECRET_MERGEACCS_START, - (xxh_u64)len * XXH_PRIME64_1); - h128.high64 = XXH3_mergeAccs(acc, - secret + secretSize - - sizeof(acc) - XXH_SECRET_MERGEACCS_START, - ~((xxh_u64)len * XXH_PRIME64_2)); - return h128; - } -} - -/* - * It's important for performance that XXH3_hashLong is not inlined. - */ -XXH_NO_INLINE XXH128_hash_t -XXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len, - XXH64_hash_t seed64, - const void* XXH_RESTRICT secret, size_t secretLen) -{ - (void)seed64; (void)secret; (void)secretLen; - return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), - XXH3_accumulate_512, XXH3_scrambleAcc); -} - -/* - * It's important for performance to pass @secretLen (when it's static) - * to the compiler, so that it can properly optimize the vectorized loop. - */ -XXH_FORCE_INLINE XXH128_hash_t -XXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len, - XXH64_hash_t seed64, - const void* XXH_RESTRICT secret, size_t secretLen) -{ - (void)seed64; - return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen, - XXH3_accumulate_512, XXH3_scrambleAcc); -} - -XXH_FORCE_INLINE XXH128_hash_t -XXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len, - XXH64_hash_t seed64, - XXH3_f_accumulate_512 f_acc512, - XXH3_f_scrambleAcc f_scramble, - XXH3_f_initCustomSecret f_initSec) -{ - if (seed64 == 0) - return XXH3_hashLong_128b_internal(input, len, - XXH3_kSecret, sizeof(XXH3_kSecret), - f_acc512, f_scramble); - { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE]; - f_initSec(secret, seed64); - return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret), - f_acc512, f_scramble); - } -} - -/* - * It's important for performance that XXH3_hashLong is not inlined. - */ -XXH_NO_INLINE XXH128_hash_t -XXH3_hashLong_128b_withSeed(const void* input, size_t len, - XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen) -{ - (void)secret; (void)secretLen; - return XXH3_hashLong_128b_withSeed_internal(input, len, seed64, - XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret); -} - -typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t, - XXH64_hash_t, const void* XXH_RESTRICT, size_t); - -XXH_FORCE_INLINE XXH128_hash_t -XXH3_128bits_internal(const void* input, size_t len, - XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen, - XXH3_hashLong128_f f_hl128) -{ - XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN); - /* - * If an action is to be taken if `secret` conditions are not respected, - * it should be done here. - * For now, it's a contract pre-condition. - * Adding a check and a branch here would cost performance at every hash. - */ - if (len <= 16) - return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64); - if (len <= 128) - return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); - if (len <= XXH3_MIDSIZE_MAX) - return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64); - return f_hl128(input, len, seed64, secret, secretLen); -} - - -/* === Public XXH128 API === */ - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* input, size_t len) -{ - return XXH3_128bits_internal(input, len, 0, - XXH3_kSecret, sizeof(XXH3_kSecret), - XXH3_hashLong_128b_default); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH128_hash_t -XXH3_128bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize) -{ - return XXH3_128bits_internal(input, len, 0, - (const xxh_u8*)secret, secretSize, - XXH3_hashLong_128b_withSecret); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH128_hash_t -XXH3_128bits_withSeed(const void* input, size_t len, XXH64_hash_t seed) -{ - return XXH3_128bits_internal(input, len, seed, - XXH3_kSecret, sizeof(XXH3_kSecret), - XXH3_hashLong_128b_withSeed); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH128_hash_t -XXH3_128bits_withSecretandSeed(const void* input, size_t len, const void* secret, size_t secretSize, XXH64_hash_t seed) -{ - if (len <= XXH3_MIDSIZE_MAX) - return XXH3_128bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL); - return XXH3_hashLong_128b_withSecret(input, len, seed, secret, secretSize); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH128_hash_t -XXH128(const void* input, size_t len, XXH64_hash_t seed) -{ - return XXH3_128bits_withSeed(input, len, seed); -} - - -/* === XXH3 128-bit streaming === */ - -/* - * All initialization and update functions are identical to 64-bit streaming variant. - * The only difference is the finalization routine. - */ - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_128bits_reset(XXH3_state_t* statePtr) -{ - return XXH3_64bits_reset(statePtr); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize) -{ - return XXH3_64bits_reset_withSecret(statePtr, secret, secretSize); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed) -{ - return XXH3_64bits_reset_withSeed(statePtr, seed); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr, const void* secret, size_t secretSize, XXH64_hash_t seed) -{ - return XXH3_64bits_reset_withSecretandSeed(statePtr, secret, secretSize, seed); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len) -{ - return XXH3_update(state, (const xxh_u8*)input, len, - XXH3_accumulate_512, XXH3_scrambleAcc); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* state) -{ - const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret; - if (state->totalLen > XXH3_MIDSIZE_MAX) { - XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB]; - XXH3_digest_long(acc, state, secret); - XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START); - { XXH128_hash_t h128; - h128.low64 = XXH3_mergeAccs(acc, - secret + XXH_SECRET_MERGEACCS_START, - (xxh_u64)state->totalLen * XXH_PRIME64_1); - h128.high64 = XXH3_mergeAccs(acc, - secret + state->secretLimit + XXH_STRIPE_LEN - - sizeof(acc) - XXH_SECRET_MERGEACCS_START, - ~((xxh_u64)state->totalLen * XXH_PRIME64_2)); - return h128; - } - } - /* len <= XXH3_MIDSIZE_MAX : short code */ - if (state->seed) - return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed); - return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen), - secret, state->secretLimit + XXH_STRIPE_LEN); -} - -/* 128-bit utility functions */ - -#include /* memcmp, memcpy */ - -/* return : 1 is equal, 0 if different */ -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2) -{ - /* note : XXH128_hash_t is compact, it has no padding byte */ - return !(memcmp(&h1, &h2, sizeof(h1))); -} - -/* This prototype is compatible with stdlib's qsort(). - * return : >0 if *h128_1 > *h128_2 - * <0 if *h128_1 < *h128_2 - * =0 if *h128_1 == *h128_2 */ -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2) -{ - XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1; - XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2; - int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64); - /* note : bets that, in most cases, hash values are different */ - if (hcmp) return hcmp; - return (h1.low64 > h2.low64) - (h2.low64 > h1.low64); -} - - -/*====== Canonical representation ======*/ -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API void -XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash) -{ - XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t)); - if (XXH_CPU_LITTLE_ENDIAN) { - hash.high64 = XXH_swap64(hash.high64); - hash.low64 = XXH_swap64(hash.low64); - } - XXH_memcpy(dst, &hash.high64, sizeof(hash.high64)); - XXH_memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64)); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH128_hash_t -XXH128_hashFromCanonical(const XXH128_canonical_t* src) -{ - XXH128_hash_t h; - h.high64 = XXH_readBE64(src); - h.low64 = XXH_readBE64(src->digest + 8); - return h; -} - - - -/* ========================================== - * Secret generators - * ========================================== - */ -#define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x)) - -XXH_FORCE_INLINE void XXH3_combine16(void* dst, XXH128_hash_t h128) -{ - XXH_writeLE64( dst, XXH_readLE64(dst) ^ h128.low64 ); - XXH_writeLE64( (char*)dst+8, XXH_readLE64((char*)dst+8) ^ h128.high64 ); -} - -/*! @ingroup xxh3_family */ -XXH_PUBLIC_API XXH_errorcode -XXH3_generateSecret(void* secretBuffer, size_t secretSize, const void* customSeed, size_t customSeedSize) -{ -#if (XXH_DEBUGLEVEL >= 1) - XXH_ASSERT(secretBuffer != NULL); - XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); -#else - /* production mode, assert() are disabled */ - if (secretBuffer == NULL) return XXH_ERROR; - if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR; -#endif - - if (customSeedSize == 0) { - customSeed = XXH3_kSecret; - customSeedSize = XXH_SECRET_DEFAULT_SIZE; - } -#if (XXH_DEBUGLEVEL >= 1) - XXH_ASSERT(customSeed != NULL); -#else - if (customSeed == NULL) return XXH_ERROR; -#endif - - /* Fill secretBuffer with a copy of customSeed - repeat as needed */ - { size_t pos = 0; - while (pos < secretSize) { - size_t const toCopy = XXH_MIN((secretSize - pos), customSeedSize); - memcpy((char*)secretBuffer + pos, customSeed, toCopy); - pos += toCopy; - } } - - { size_t const nbSeg16 = secretSize / 16; - size_t n; - XXH128_canonical_t scrambler; - XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0)); - for (n=0; n -#include -#include - -#if defined(__GNUC__) && __GNUC__ >= 4 -# define ZSTD_memcpy(d,s,l) __builtin_memcpy((d),(s),(l)) -# define ZSTD_memmove(d,s,l) __builtin_memmove((d),(s),(l)) -# define ZSTD_memset(p,v,l) __builtin_memset((p),(v),(l)) -#else -# define ZSTD_memcpy(d,s,l) memcpy((d),(s),(l)) -# define ZSTD_memmove(d,s,l) memmove((d),(s),(l)) -# define ZSTD_memset(p,v,l) memset((p),(v),(l)) -#endif - -#endif /* ZSTD_DEPS_COMMON */ - -/* Need: - * ZSTD_malloc() - * ZSTD_free() - * ZSTD_calloc() - */ -#ifdef ZSTD_DEPS_NEED_MALLOC -#ifndef ZSTD_DEPS_MALLOC -#define ZSTD_DEPS_MALLOC - -#include - -#define ZSTD_malloc(s) malloc(s) -#define ZSTD_calloc(n,s) calloc((n), (s)) -#define ZSTD_free(p) free((p)) - -#endif /* ZSTD_DEPS_MALLOC */ -#endif /* ZSTD_DEPS_NEED_MALLOC */ - -/* - * Provides 64-bit math support. - * Need: - * U64 ZSTD_div64(U64 dividend, U32 divisor) - */ -#ifdef ZSTD_DEPS_NEED_MATH64 -#ifndef ZSTD_DEPS_MATH64 -#define ZSTD_DEPS_MATH64 - -#define ZSTD_div64(dividend, divisor) ((dividend) / (divisor)) - -#endif /* ZSTD_DEPS_MATH64 */ -#endif /* ZSTD_DEPS_NEED_MATH64 */ - -/* Need: - * assert() - */ -#ifdef ZSTD_DEPS_NEED_ASSERT -#ifndef ZSTD_DEPS_ASSERT -#define ZSTD_DEPS_ASSERT - -#include - -#endif /* ZSTD_DEPS_ASSERT */ -#endif /* ZSTD_DEPS_NEED_ASSERT */ - -/* Need: - * ZSTD_DEBUG_PRINT() - */ -#ifdef ZSTD_DEPS_NEED_IO -#ifndef ZSTD_DEPS_IO -#define ZSTD_DEPS_IO - -#include -#define ZSTD_DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__) - -#endif /* ZSTD_DEPS_IO */ -#endif /* ZSTD_DEPS_NEED_IO */ - -/* Only requested when is known to be present. - * Need: - * intptr_t - */ -#ifdef ZSTD_DEPS_NEED_STDINT -#ifndef ZSTD_DEPS_STDINT -#define ZSTD_DEPS_STDINT - -#include - -#endif /* ZSTD_DEPS_STDINT */ -#endif /* ZSTD_DEPS_NEED_STDINT */ diff --git a/stage1/zstd/lib/common/zstd_internal.h b/stage1/zstd/lib/common/zstd_internal.h deleted file mode 100644 index e4d36ce090..0000000000 --- a/stage1/zstd/lib/common/zstd_internal.h +++ /dev/null @@ -1,493 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef ZSTD_CCOMMON_H_MODULE -#define ZSTD_CCOMMON_H_MODULE - -/* this module contains definitions which must be identical - * across compression, decompression and dictBuilder. - * It also contains a few functions useful to at least 2 of them - * and which benefit from being inlined */ - -/*-************************************* -* Dependencies -***************************************/ -#include "compiler.h" -#include "cpu.h" -#include "mem.h" -#include "debug.h" /* assert, DEBUGLOG, RAWLOG, g_debuglevel */ -#include "error_private.h" -#define ZSTD_STATIC_LINKING_ONLY -#include "../zstd.h" -#define FSE_STATIC_LINKING_ONLY -#include "fse.h" -#define HUF_STATIC_LINKING_ONLY -#include "huf.h" -#ifndef XXH_STATIC_LINKING_ONLY -# define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */ -#endif -#include "xxhash.h" /* XXH_reset, update, digest */ -#ifndef ZSTD_NO_TRACE -# include "zstd_trace.h" -#else -# define ZSTD_TRACE 0 -#endif - -#if defined (__cplusplus) -extern "C" { -#endif - -/* ---- static assert (debug) --- */ -#define ZSTD_STATIC_ASSERT(c) DEBUG_STATIC_ASSERT(c) -#define ZSTD_isError ERR_isError /* for inlining */ -#define FSE_isError ERR_isError -#define HUF_isError ERR_isError - - -/*-************************************* -* shared macros -***************************************/ -#undef MIN -#undef MAX -#define MIN(a,b) ((a)<(b) ? (a) : (b)) -#define MAX(a,b) ((a)>(b) ? (a) : (b)) -#define BOUNDED(min,val,max) (MAX(min,MIN(val,max))) - - -/*-************************************* -* Common constants -***************************************/ -#define ZSTD_OPT_NUM (1<<12) - -#define ZSTD_REP_NUM 3 /* number of repcodes */ -static UNUSED_ATTR const U32 repStartValue[ZSTD_REP_NUM] = { 1, 4, 8 }; - -#define KB *(1 <<10) -#define MB *(1 <<20) -#define GB *(1U<<30) - -#define BIT7 128 -#define BIT6 64 -#define BIT5 32 -#define BIT4 16 -#define BIT1 2 -#define BIT0 1 - -#define ZSTD_WINDOWLOG_ABSOLUTEMIN 10 -static UNUSED_ATTR const size_t ZSTD_fcs_fieldSize[4] = { 0, 2, 4, 8 }; -static UNUSED_ATTR const size_t ZSTD_did_fieldSize[4] = { 0, 1, 2, 4 }; - -#define ZSTD_FRAMEIDSIZE 4 /* magic number size */ - -#define ZSTD_BLOCKHEADERSIZE 3 /* C standard doesn't allow `static const` variable to be init using another `static const` variable */ -static UNUSED_ATTR const size_t ZSTD_blockHeaderSize = ZSTD_BLOCKHEADERSIZE; -typedef enum { bt_raw, bt_rle, bt_compressed, bt_reserved } blockType_e; - -#define ZSTD_FRAMECHECKSUMSIZE 4 - -#define MIN_SEQUENCES_SIZE 1 /* nbSeq==0 */ -#define MIN_CBLOCK_SIZE (1 /*litCSize*/ + 1 /* RLE or RAW */ + MIN_SEQUENCES_SIZE /* nbSeq==0 */) /* for a non-null block */ - -#define HufLog 12 -typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingType_e; - -#define LONGNBSEQ 0x7F00 - -#define MINMATCH 3 - -#define Litbits 8 -#define MaxLit ((1<= WILDCOPY_VECLEN || diff <= -WILDCOPY_VECLEN); - /* Separate out the first COPY16() call because the copy length is - * almost certain to be short, so the branches have different - * probabilities. Since it is almost certain to be short, only do - * one COPY16() in the first call. Then, do two calls per loop since - * at that point it is more likely to have a high trip count. - */ -#ifdef __aarch64__ - do { - COPY16(op, ip); - } - while (op < oend); -#else - ZSTD_copy16(op, ip); - if (16 >= length) return; - op += 16; - ip += 16; - do { - COPY16(op, ip); - COPY16(op, ip); - } - while (op < oend); -#endif - } -} - -MEM_STATIC size_t ZSTD_limitCopy(void* dst, size_t dstCapacity, const void* src, size_t srcSize) -{ - size_t const length = MIN(dstCapacity, srcSize); - if (length > 0) { - ZSTD_memcpy(dst, src, length); - } - return length; -} - -/* define "workspace is too large" as this number of times larger than needed */ -#define ZSTD_WORKSPACETOOLARGE_FACTOR 3 - -/* when workspace is continuously too large - * during at least this number of times, - * context's memory usage is considered wasteful, - * because it's sized to handle a worst case scenario which rarely happens. - * In which case, resize it down to free some memory */ -#define ZSTD_WORKSPACETOOLARGE_MAXDURATION 128 - -/* Controls whether the input/output buffer is buffered or stable. */ -typedef enum { - ZSTD_bm_buffered = 0, /* Buffer the input/output */ - ZSTD_bm_stable = 1 /* ZSTD_inBuffer/ZSTD_outBuffer is stable */ -} ZSTD_bufferMode_e; - - -/*-******************************************* -* Private declarations -*********************************************/ -typedef struct seqDef_s { - U32 offBase; /* offBase == Offset + ZSTD_REP_NUM, or repcode 1,2,3 */ - U16 litLength; - U16 mlBase; /* mlBase == matchLength - MINMATCH */ -} seqDef; - -/* Controls whether seqStore has a single "long" litLength or matchLength. See seqStore_t. */ -typedef enum { - ZSTD_llt_none = 0, /* no longLengthType */ - ZSTD_llt_literalLength = 1, /* represents a long literal */ - ZSTD_llt_matchLength = 2 /* represents a long match */ -} ZSTD_longLengthType_e; - -typedef struct { - seqDef* sequencesStart; - seqDef* sequences; /* ptr to end of sequences */ - BYTE* litStart; - BYTE* lit; /* ptr to end of literals */ - BYTE* llCode; - BYTE* mlCode; - BYTE* ofCode; - size_t maxNbSeq; - size_t maxNbLit; - - /* longLengthPos and longLengthType to allow us to represent either a single litLength or matchLength - * in the seqStore that has a value larger than U16 (if it exists). To do so, we increment - * the existing value of the litLength or matchLength by 0x10000. - */ - ZSTD_longLengthType_e longLengthType; - U32 longLengthPos; /* Index of the sequence to apply long length modification to */ -} seqStore_t; - -typedef struct { - U32 litLength; - U32 matchLength; -} ZSTD_sequenceLength; - -/** - * Returns the ZSTD_sequenceLength for the given sequences. It handles the decoding of long sequences - * indicated by longLengthPos and longLengthType, and adds MINMATCH back to matchLength. - */ -MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore, seqDef const* seq) -{ - ZSTD_sequenceLength seqLen; - seqLen.litLength = seq->litLength; - seqLen.matchLength = seq->mlBase + MINMATCH; - if (seqStore->longLengthPos == (U32)(seq - seqStore->sequencesStart)) { - if (seqStore->longLengthType == ZSTD_llt_literalLength) { - seqLen.litLength += 0xFFFF; - } - if (seqStore->longLengthType == ZSTD_llt_matchLength) { - seqLen.matchLength += 0xFFFF; - } - } - return seqLen; -} - -/** - * Contains the compressed frame size and an upper-bound for the decompressed frame size. - * Note: before using `compressedSize`, check for errors using ZSTD_isError(). - * similarly, before using `decompressedBound`, check for errors using: - * `decompressedBound != ZSTD_CONTENTSIZE_ERROR` - */ -typedef struct { - size_t compressedSize; - unsigned long long decompressedBound; -} ZSTD_frameSizeInfo; /* decompress & legacy */ - -const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx); /* compress & dictBuilder */ -void ZSTD_seqToCodes(const seqStore_t* seqStorePtr); /* compress, dictBuilder, decodeCorpus (shouldn't get its definition from here) */ - -/* custom memory allocation functions */ -void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem); -void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem); -void ZSTD_customFree(void* ptr, ZSTD_customMem customMem); - - -MEM_STATIC U32 ZSTD_highbit32(U32 val) /* compress, dictBuilder, decodeCorpus */ -{ - assert(val != 0); - { -# if defined(_MSC_VER) /* Visual */ -# if STATIC_BMI2 == 1 - return _lzcnt_u32(val)^31; -# else - if (val != 0) { - unsigned long r; - _BitScanReverse(&r, val); - return (unsigned)r; - } else { - /* Should not reach this code path */ - __assume(0); - } -# endif -# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */ - return __builtin_clz (val) ^ 31; -# elif defined(__ICCARM__) /* IAR Intrinsic */ - return 31 - __CLZ(val); -# else /* Software version */ - static const U32 DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; - U32 v = val; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - return DeBruijnClz[(v * 0x07C4ACDDU) >> 27]; -# endif - } -} - -/** - * Counts the number of trailing zeros of a `size_t`. - * Most compilers should support CTZ as a builtin. A backup - * implementation is provided if the builtin isn't supported, but - * it may not be terribly efficient. - */ -MEM_STATIC unsigned ZSTD_countTrailingZeros(size_t val) -{ - if (MEM_64bits()) { -# if defined(_MSC_VER) && defined(_WIN64) -# if STATIC_BMI2 - return _tzcnt_u64(val); -# else - if (val != 0) { - unsigned long r; - _BitScanForward64(&r, (U64)val); - return (unsigned)r; - } else { - /* Should not reach this code path */ - __assume(0); - } -# endif -# elif defined(__GNUC__) && (__GNUC__ >= 4) - return __builtin_ctzll((U64)val); -# else - static const int DeBruijnBytePos[64] = { 0, 1, 2, 7, 3, 13, 8, 19, - 4, 25, 14, 28, 9, 34, 20, 56, - 5, 17, 26, 54, 15, 41, 29, 43, - 10, 31, 38, 35, 21, 45, 49, 57, - 63, 6, 12, 18, 24, 27, 33, 55, - 16, 53, 40, 42, 30, 37, 44, 48, - 62, 11, 23, 32, 52, 39, 36, 47, - 61, 22, 51, 46, 60, 50, 59, 58 }; - return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58]; -# endif - } else { /* 32 bits */ -# if defined(_MSC_VER) - if (val != 0) { - unsigned long r; - _BitScanForward(&r, (U32)val); - return (unsigned)r; - } else { - /* Should not reach this code path */ - __assume(0); - } -# elif defined(__GNUC__) && (__GNUC__ >= 3) - return __builtin_ctz((U32)val); -# else - static const int DeBruijnBytePos[32] = { 0, 1, 28, 2, 29, 14, 24, 3, - 30, 22, 20, 15, 25, 17, 4, 8, - 31, 27, 13, 23, 21, 19, 16, 7, - 26, 12, 18, 6, 11, 5, 10, 9 }; - return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27]; -# endif - } -} - - -/* ZSTD_invalidateRepCodes() : - * ensures next compression will not use repcodes from previous block. - * Note : only works with regular variant; - * do not use with extDict variant ! */ -void ZSTD_invalidateRepCodes(ZSTD_CCtx* cctx); /* zstdmt, adaptive_compression (shouldn't get this definition from here) */ - - -typedef struct { - blockType_e blockType; - U32 lastBlock; - U32 origSize; -} blockProperties_t; /* declared here for decompress and fullbench */ - -/*! ZSTD_getcBlockSize() : - * Provides the size of compressed block from block header `src` */ -/* Used by: decompress, fullbench (does not get its definition from here) */ -size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, - blockProperties_t* bpPtr); - -/*! ZSTD_decodeSeqHeaders() : - * decode sequence header from src */ -/* Used by: decompress, fullbench (does not get its definition from here) */ -size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr, - const void* src, size_t srcSize); - -/** - * @returns true iff the CPU supports dynamic BMI2 dispatch. - */ -MEM_STATIC int ZSTD_cpuSupportsBmi2(void) -{ - ZSTD_cpuid_t cpuid = ZSTD_cpuid(); - return ZSTD_cpuid_bmi1(cpuid) && ZSTD_cpuid_bmi2(cpuid); -} - -#if defined (__cplusplus) -} -#endif - -#endif /* ZSTD_CCOMMON_H_MODULE */ diff --git a/stage1/zstd/lib/common/zstd_trace.h b/stage1/zstd/lib/common/zstd_trace.h deleted file mode 100644 index f9121f7d8e..0000000000 --- a/stage1/zstd/lib/common/zstd_trace.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef ZSTD_TRACE_H -#define ZSTD_TRACE_H - -#if defined (__cplusplus) -extern "C" { -#endif - -#include - -/* weak symbol support - * For now, enable conservatively: - * - Only GNUC - * - Only ELF - * - Only x86-64 and i386 - * Also, explicitly disable on platforms known not to work so they aren't - * forgotten in the future. - */ -#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && \ - defined(__GNUC__) && defined(__ELF__) && \ - (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)) && \ - !defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \ - !defined(__CYGWIN__) && !defined(_AIX) -# define ZSTD_HAVE_WEAK_SYMBOLS 1 -#else -# define ZSTD_HAVE_WEAK_SYMBOLS 0 -#endif -#if ZSTD_HAVE_WEAK_SYMBOLS -# define ZSTD_WEAK_ATTR __attribute__((__weak__)) -#else -# define ZSTD_WEAK_ATTR -#endif - -/* Only enable tracing when weak symbols are available. */ -#ifndef ZSTD_TRACE -# define ZSTD_TRACE ZSTD_HAVE_WEAK_SYMBOLS -#endif - -#if ZSTD_TRACE - -struct ZSTD_CCtx_s; -struct ZSTD_DCtx_s; -struct ZSTD_CCtx_params_s; - -typedef struct { - /** - * ZSTD_VERSION_NUMBER - * - * This is guaranteed to be the first member of ZSTD_trace. - * Otherwise, this struct is not stable between versions. If - * the version number does not match your expectation, you - * should not interpret the rest of the struct. - */ - unsigned version; - /** - * Non-zero if streaming (de)compression is used. - */ - unsigned streaming; - /** - * The dictionary ID. - */ - unsigned dictionaryID; - /** - * Is the dictionary cold? - * Only set on decompression. - */ - unsigned dictionaryIsCold; - /** - * The dictionary size or zero if no dictionary. - */ - size_t dictionarySize; - /** - * The uncompressed size of the data. - */ - size_t uncompressedSize; - /** - * The compressed size of the data. - */ - size_t compressedSize; - /** - * The fully resolved CCtx parameters (NULL on decompression). - */ - struct ZSTD_CCtx_params_s const* params; - /** - * The ZSTD_CCtx pointer (NULL on decompression). - */ - struct ZSTD_CCtx_s const* cctx; - /** - * The ZSTD_DCtx pointer (NULL on compression). - */ - struct ZSTD_DCtx_s const* dctx; -} ZSTD_Trace; - -/** - * A tracing context. It must be 0 when tracing is disabled. - * Otherwise, any non-zero value returned by a tracing begin() - * function is presented to any subsequent calls to end(). - * - * Any non-zero value is treated as tracing is enabled and not - * interpreted by the library. - * - * Two possible uses are: - * * A timestamp for when the begin() function was called. - * * A unique key identifying the (de)compression, like the - * address of the [dc]ctx pointer if you need to track - * more information than just a timestamp. - */ -typedef unsigned long long ZSTD_TraceCtx; - -/** - * Trace the beginning of a compression call. - * @param cctx The dctx pointer for the compression. - * It can be used as a key to map begin() to end(). - * @returns Non-zero if tracing is enabled. The return value is - * passed to ZSTD_trace_compress_end(). - */ -ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_compress_begin( - struct ZSTD_CCtx_s const* cctx); - -/** - * Trace the end of a compression call. - * @param ctx The return value of ZSTD_trace_compress_begin(). - * @param trace The zstd tracing info. - */ -ZSTD_WEAK_ATTR void ZSTD_trace_compress_end( - ZSTD_TraceCtx ctx, - ZSTD_Trace const* trace); - -/** - * Trace the beginning of a decompression call. - * @param dctx The dctx pointer for the decompression. - * It can be used as a key to map begin() to end(). - * @returns Non-zero if tracing is enabled. The return value is - * passed to ZSTD_trace_compress_end(). - */ -ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_decompress_begin( - struct ZSTD_DCtx_s const* dctx); - -/** - * Trace the end of a decompression call. - * @param ctx The return value of ZSTD_trace_decompress_begin(). - * @param trace The zstd tracing info. - */ -ZSTD_WEAK_ATTR void ZSTD_trace_decompress_end( - ZSTD_TraceCtx ctx, - ZSTD_Trace const* trace); - -#endif /* ZSTD_TRACE */ - -#if defined (__cplusplus) -} -#endif - -#endif /* ZSTD_TRACE_H */ diff --git a/stage1/zstd/lib/decompress/huf_decompress.c b/stage1/zstd/lib/decompress/huf_decompress.c deleted file mode 100644 index 2027188255..0000000000 --- a/stage1/zstd/lib/decompress/huf_decompress.c +++ /dev/null @@ -1,1889 +0,0 @@ -/* ****************************************************************** - * huff0 huffman decoder, - * part of Finite State Entropy library - * Copyright (c) Yann Collet, Facebook, Inc. - * - * You can contact the author at : - * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. -****************************************************************** */ - -/* ************************************************************** -* Dependencies -****************************************************************/ -#include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memset */ -#include "../common/compiler.h" -#include "../common/bitstream.h" /* BIT_* */ -#include "../common/fse.h" /* to compress headers */ -#define HUF_STATIC_LINKING_ONLY -#include "../common/huf.h" -#include "../common/error_private.h" -#include "../common/zstd_internal.h" - -/* ************************************************************** -* Constants -****************************************************************/ - -#define HUF_DECODER_FAST_TABLELOG 11 - -/* ************************************************************** -* Macros -****************************************************************/ - -/* These two optional macros force the use one way or another of the two - * Huffman decompression implementations. You can't force in both directions - * at the same time. - */ -#if defined(HUF_FORCE_DECOMPRESS_X1) && \ - defined(HUF_FORCE_DECOMPRESS_X2) -#error "Cannot force the use of the X1 and X2 decoders at the same time!" -#endif - -#if ZSTD_ENABLE_ASM_X86_64_BMI2 && DYNAMIC_BMI2 -# define HUF_ASM_X86_64_BMI2_ATTRS BMI2_TARGET_ATTRIBUTE -#else -# define HUF_ASM_X86_64_BMI2_ATTRS -#endif - -#ifdef __cplusplus -# define HUF_EXTERN_C extern "C" -#else -# define HUF_EXTERN_C -#endif -#define HUF_ASM_DECL HUF_EXTERN_C - -#if DYNAMIC_BMI2 || (ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__)) -# define HUF_NEED_BMI2_FUNCTION 1 -#else -# define HUF_NEED_BMI2_FUNCTION 0 -#endif - -#if !(ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__)) -# define HUF_NEED_DEFAULT_FUNCTION 1 -#else -# define HUF_NEED_DEFAULT_FUNCTION 0 -#endif - -/* ************************************************************** -* Error Management -****************************************************************/ -#define HUF_isError ERR_isError - - -/* ************************************************************** -* Byte alignment for workSpace management -****************************************************************/ -#define HUF_ALIGN(x, a) HUF_ALIGN_MASK((x), (a) - 1) -#define HUF_ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask)) - - -/* ************************************************************** -* BMI2 Variant Wrappers -****************************************************************/ -#if DYNAMIC_BMI2 - -#define HUF_DGEN(fn) \ - \ - static size_t fn##_default( \ - void* dst, size_t dstSize, \ - const void* cSrc, size_t cSrcSize, \ - const HUF_DTable* DTable) \ - { \ - return fn##_body(dst, dstSize, cSrc, cSrcSize, DTable); \ - } \ - \ - static BMI2_TARGET_ATTRIBUTE size_t fn##_bmi2( \ - void* dst, size_t dstSize, \ - const void* cSrc, size_t cSrcSize, \ - const HUF_DTable* DTable) \ - { \ - return fn##_body(dst, dstSize, cSrc, cSrcSize, DTable); \ - } \ - \ - static size_t fn(void* dst, size_t dstSize, void const* cSrc, \ - size_t cSrcSize, HUF_DTable const* DTable, int bmi2) \ - { \ - if (bmi2) { \ - return fn##_bmi2(dst, dstSize, cSrc, cSrcSize, DTable); \ - } \ - return fn##_default(dst, dstSize, cSrc, cSrcSize, DTable); \ - } - -#else - -#define HUF_DGEN(fn) \ - static size_t fn(void* dst, size_t dstSize, void const* cSrc, \ - size_t cSrcSize, HUF_DTable const* DTable, int bmi2) \ - { \ - (void)bmi2; \ - return fn##_body(dst, dstSize, cSrc, cSrcSize, DTable); \ - } - -#endif - - -/*-***************************/ -/* generic DTableDesc */ -/*-***************************/ -typedef struct { BYTE maxTableLog; BYTE tableType; BYTE tableLog; BYTE reserved; } DTableDesc; - -static DTableDesc HUF_getDTableDesc(const HUF_DTable* table) -{ - DTableDesc dtd; - ZSTD_memcpy(&dtd, table, sizeof(dtd)); - return dtd; -} - -#if ZSTD_ENABLE_ASM_X86_64_BMI2 - -static size_t HUF_initDStream(BYTE const* ip) { - BYTE const lastByte = ip[7]; - size_t const bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; - size_t const value = MEM_readLEST(ip) | 1; - assert(bitsConsumed <= 8); - return value << bitsConsumed; -} -typedef struct { - BYTE const* ip[4]; - BYTE* op[4]; - U64 bits[4]; - void const* dt; - BYTE const* ilimit; - BYTE* oend; - BYTE const* iend[4]; -} HUF_DecompressAsmArgs; - -/** - * Initializes args for the asm decoding loop. - * @returns 0 on success - * 1 if the fallback implementation should be used. - * Or an error code on failure. - */ -static size_t HUF_DecompressAsmArgs_init(HUF_DecompressAsmArgs* args, void* dst, size_t dstSize, void const* src, size_t srcSize, const HUF_DTable* DTable) -{ - void const* dt = DTable + 1; - U32 const dtLog = HUF_getDTableDesc(DTable).tableLog; - - const BYTE* const ilimit = (const BYTE*)src + 6 + 8; - - BYTE* const oend = (BYTE*)dst + dstSize; - - /* The following condition is false on x32 platform, - * but HUF_asm is not compatible with this ABI */ - if (!(MEM_isLittleEndian() && !MEM_32bits())) return 1; - - /* strict minimum : jump table + 1 byte per stream */ - if (srcSize < 10) - return ERROR(corruption_detected); - - /* Must have at least 8 bytes per stream because we don't handle initializing smaller bit containers. - * If table log is not correct at this point, fallback to the old decoder. - * On small inputs we don't have enough data to trigger the fast loop, so use the old decoder. - */ - if (dtLog != HUF_DECODER_FAST_TABLELOG) - return 1; - - /* Read the jump table. */ - { - const BYTE* const istart = (const BYTE*)src; - size_t const length1 = MEM_readLE16(istart); - size_t const length2 = MEM_readLE16(istart+2); - size_t const length3 = MEM_readLE16(istart+4); - size_t const length4 = srcSize - (length1 + length2 + length3 + 6); - args->iend[0] = istart + 6; /* jumpTable */ - args->iend[1] = args->iend[0] + length1; - args->iend[2] = args->iend[1] + length2; - args->iend[3] = args->iend[2] + length3; - - /* HUF_initDStream() requires this, and this small of an input - * won't benefit from the ASM loop anyways. - * length1 must be >= 16 so that ip[0] >= ilimit before the loop - * starts. - */ - if (length1 < 16 || length2 < 8 || length3 < 8 || length4 < 8) - return 1; - if (length4 > srcSize) return ERROR(corruption_detected); /* overflow */ - } - /* ip[] contains the position that is currently loaded into bits[]. */ - args->ip[0] = args->iend[1] - sizeof(U64); - args->ip[1] = args->iend[2] - sizeof(U64); - args->ip[2] = args->iend[3] - sizeof(U64); - args->ip[3] = (BYTE const*)src + srcSize - sizeof(U64); - - /* op[] contains the output pointers. */ - args->op[0] = (BYTE*)dst; - args->op[1] = args->op[0] + (dstSize+3)/4; - args->op[2] = args->op[1] + (dstSize+3)/4; - args->op[3] = args->op[2] + (dstSize+3)/4; - - /* No point to call the ASM loop for tiny outputs. */ - if (args->op[3] >= oend) - return 1; - - /* bits[] is the bit container. - * It is read from the MSB down to the LSB. - * It is shifted left as it is read, and zeros are - * shifted in. After the lowest valid bit a 1 is - * set, so that CountTrailingZeros(bits[]) can be used - * to count how many bits we've consumed. - */ - args->bits[0] = HUF_initDStream(args->ip[0]); - args->bits[1] = HUF_initDStream(args->ip[1]); - args->bits[2] = HUF_initDStream(args->ip[2]); - args->bits[3] = HUF_initDStream(args->ip[3]); - - /* If ip[] >= ilimit, it is guaranteed to be safe to - * reload bits[]. It may be beyond its section, but is - * guaranteed to be valid (>= istart). - */ - args->ilimit = ilimit; - - args->oend = oend; - args->dt = dt; - - return 0; -} - -static size_t HUF_initRemainingDStream(BIT_DStream_t* bit, HUF_DecompressAsmArgs const* args, int stream, BYTE* segmentEnd) -{ - /* Validate that we haven't overwritten. */ - if (args->op[stream] > segmentEnd) - return ERROR(corruption_detected); - /* Validate that we haven't read beyond iend[]. - * Note that ip[] may be < iend[] because the MSB is - * the next bit to read, and we may have consumed 100% - * of the stream, so down to iend[i] - 8 is valid. - */ - if (args->ip[stream] < args->iend[stream] - 8) - return ERROR(corruption_detected); - - /* Construct the BIT_DStream_t. */ - bit->bitContainer = MEM_readLE64(args->ip[stream]); - bit->bitsConsumed = ZSTD_countTrailingZeros((size_t)args->bits[stream]); - bit->start = (const char*)args->iend[0]; - bit->limitPtr = bit->start + sizeof(size_t); - bit->ptr = (const char*)args->ip[stream]; - - return 0; -} -#endif - - -#ifndef HUF_FORCE_DECOMPRESS_X2 - -/*-***************************/ -/* single-symbol decoding */ -/*-***************************/ -typedef struct { BYTE nbBits; BYTE byte; } HUF_DEltX1; /* single-symbol decoding */ - -/** - * Packs 4 HUF_DEltX1 structs into a U64. This is used to lay down 4 entries at - * a time. - */ -static U64 HUF_DEltX1_set4(BYTE symbol, BYTE nbBits) { - U64 D4; - if (MEM_isLittleEndian()) { - D4 = (symbol << 8) + nbBits; - } else { - D4 = symbol + (nbBits << 8); - } - D4 *= 0x0001000100010001ULL; - return D4; -} - -/** - * Increase the tableLog to targetTableLog and rescales the stats. - * If tableLog > targetTableLog this is a no-op. - * @returns New tableLog - */ -static U32 HUF_rescaleStats(BYTE* huffWeight, U32* rankVal, U32 nbSymbols, U32 tableLog, U32 targetTableLog) -{ - if (tableLog > targetTableLog) - return tableLog; - if (tableLog < targetTableLog) { - U32 const scale = targetTableLog - tableLog; - U32 s; - /* Increase the weight for all non-zero probability symbols by scale. */ - for (s = 0; s < nbSymbols; ++s) { - huffWeight[s] += (BYTE)((huffWeight[s] == 0) ? 0 : scale); - } - /* Update rankVal to reflect the new weights. - * All weights except 0 get moved to weight + scale. - * Weights [1, scale] are empty. - */ - for (s = targetTableLog; s > scale; --s) { - rankVal[s] = rankVal[s - scale]; - } - for (s = scale; s > 0; --s) { - rankVal[s] = 0; - } - } - return targetTableLog; -} - -typedef struct { - U32 rankVal[HUF_TABLELOG_ABSOLUTEMAX + 1]; - U32 rankStart[HUF_TABLELOG_ABSOLUTEMAX + 1]; - U32 statsWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32]; - BYTE symbols[HUF_SYMBOLVALUE_MAX + 1]; - BYTE huffWeight[HUF_SYMBOLVALUE_MAX + 1]; -} HUF_ReadDTableX1_Workspace; - - -size_t HUF_readDTableX1_wksp(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize) -{ - return HUF_readDTableX1_wksp_bmi2(DTable, src, srcSize, workSpace, wkspSize, /* bmi2 */ 0); -} - -size_t HUF_readDTableX1_wksp_bmi2(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int bmi2) -{ - U32 tableLog = 0; - U32 nbSymbols = 0; - size_t iSize; - void* const dtPtr = DTable + 1; - HUF_DEltX1* const dt = (HUF_DEltX1*)dtPtr; - HUF_ReadDTableX1_Workspace* wksp = (HUF_ReadDTableX1_Workspace*)workSpace; - - DEBUG_STATIC_ASSERT(HUF_DECOMPRESS_WORKSPACE_SIZE >= sizeof(*wksp)); - if (sizeof(*wksp) > wkspSize) return ERROR(tableLog_tooLarge); - - DEBUG_STATIC_ASSERT(sizeof(DTableDesc) == sizeof(HUF_DTable)); - /* ZSTD_memset(huffWeight, 0, sizeof(huffWeight)); */ /* is not necessary, even though some analyzer complain ... */ - - iSize = HUF_readStats_wksp(wksp->huffWeight, HUF_SYMBOLVALUE_MAX + 1, wksp->rankVal, &nbSymbols, &tableLog, src, srcSize, wksp->statsWksp, sizeof(wksp->statsWksp), bmi2); - if (HUF_isError(iSize)) return iSize; - - - /* Table header */ - { DTableDesc dtd = HUF_getDTableDesc(DTable); - U32 const maxTableLog = dtd.maxTableLog + 1; - U32 const targetTableLog = MIN(maxTableLog, HUF_DECODER_FAST_TABLELOG); - tableLog = HUF_rescaleStats(wksp->huffWeight, wksp->rankVal, nbSymbols, tableLog, targetTableLog); - if (tableLog > (U32)(dtd.maxTableLog+1)) return ERROR(tableLog_tooLarge); /* DTable too small, Huffman tree cannot fit in */ - dtd.tableType = 0; - dtd.tableLog = (BYTE)tableLog; - ZSTD_memcpy(DTable, &dtd, sizeof(dtd)); - } - - /* Compute symbols and rankStart given rankVal: - * - * rankVal already contains the number of values of each weight. - * - * symbols contains the symbols ordered by weight. First are the rankVal[0] - * weight 0 symbols, followed by the rankVal[1] weight 1 symbols, and so on. - * symbols[0] is filled (but unused) to avoid a branch. - * - * rankStart contains the offset where each rank belongs in the DTable. - * rankStart[0] is not filled because there are no entries in the table for - * weight 0. - */ - { - int n; - int nextRankStart = 0; - int const unroll = 4; - int const nLimit = (int)nbSymbols - unroll + 1; - for (n=0; n<(int)tableLog+1; n++) { - U32 const curr = nextRankStart; - nextRankStart += wksp->rankVal[n]; - wksp->rankStart[n] = curr; - } - for (n=0; n < nLimit; n += unroll) { - int u; - for (u=0; u < unroll; ++u) { - size_t const w = wksp->huffWeight[n+u]; - wksp->symbols[wksp->rankStart[w]++] = (BYTE)(n+u); - } - } - for (; n < (int)nbSymbols; ++n) { - size_t const w = wksp->huffWeight[n]; - wksp->symbols[wksp->rankStart[w]++] = (BYTE)n; - } - } - - /* fill DTable - * We fill all entries of each weight in order. - * That way length is a constant for each iteration of the outer loop. - * We can switch based on the length to a different inner loop which is - * optimized for that particular case. - */ - { - U32 w; - int symbol=wksp->rankVal[0]; - int rankStart=0; - for (w=1; wrankVal[w]; - int const length = (1 << w) >> 1; - int uStart = rankStart; - BYTE const nbBits = (BYTE)(tableLog + 1 - w); - int s; - int u; - switch (length) { - case 1: - for (s=0; ssymbols[symbol + s]; - D.nbBits = nbBits; - dt[uStart] = D; - uStart += 1; - } - break; - case 2: - for (s=0; ssymbols[symbol + s]; - D.nbBits = nbBits; - dt[uStart+0] = D; - dt[uStart+1] = D; - uStart += 2; - } - break; - case 4: - for (s=0; ssymbols[symbol + s], nbBits); - MEM_write64(dt + uStart, D4); - uStart += 4; - } - break; - case 8: - for (s=0; ssymbols[symbol + s], nbBits); - MEM_write64(dt + uStart, D4); - MEM_write64(dt + uStart + 4, D4); - uStart += 8; - } - break; - default: - for (s=0; ssymbols[symbol + s], nbBits); - for (u=0; u < length; u += 16) { - MEM_write64(dt + uStart + u + 0, D4); - MEM_write64(dt + uStart + u + 4, D4); - MEM_write64(dt + uStart + u + 8, D4); - MEM_write64(dt + uStart + u + 12, D4); - } - assert(u == length); - uStart += length; - } - break; - } - symbol += symbolCount; - rankStart += symbolCount * length; - } - } - return iSize; -} - -FORCE_INLINE_TEMPLATE BYTE -HUF_decodeSymbolX1(BIT_DStream_t* Dstream, const HUF_DEltX1* dt, const U32 dtLog) -{ - size_t const val = BIT_lookBitsFast(Dstream, dtLog); /* note : dtLog >= 1 */ - BYTE const c = dt[val].byte; - BIT_skipBits(Dstream, dt[val].nbBits); - return c; -} - -#define HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr) \ - *ptr++ = HUF_decodeSymbolX1(DStreamPtr, dt, dtLog) - -#define HUF_DECODE_SYMBOLX1_1(ptr, DStreamPtr) \ - if (MEM_64bits() || (HUF_TABLELOG_MAX<=12)) \ - HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr) - -#define HUF_DECODE_SYMBOLX1_2(ptr, DStreamPtr) \ - if (MEM_64bits()) \ - HUF_DECODE_SYMBOLX1_0(ptr, DStreamPtr) - -HINT_INLINE size_t -HUF_decodeStreamX1(BYTE* p, BIT_DStream_t* const bitDPtr, BYTE* const pEnd, const HUF_DEltX1* const dt, const U32 dtLog) -{ - BYTE* const pStart = p; - - /* up to 4 symbols at a time */ - if ((pEnd - p) > 3) { - while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-3)) { - HUF_DECODE_SYMBOLX1_2(p, bitDPtr); - HUF_DECODE_SYMBOLX1_1(p, bitDPtr); - HUF_DECODE_SYMBOLX1_2(p, bitDPtr); - HUF_DECODE_SYMBOLX1_0(p, bitDPtr); - } - } else { - BIT_reloadDStream(bitDPtr); - } - - /* [0-3] symbols remaining */ - if (MEM_32bits()) - while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd)) - HUF_DECODE_SYMBOLX1_0(p, bitDPtr); - - /* no more data to retrieve from bitstream, no need to reload */ - while (p < pEnd) - HUF_DECODE_SYMBOLX1_0(p, bitDPtr); - - return pEnd-pStart; -} - -FORCE_INLINE_TEMPLATE size_t -HUF_decompress1X1_usingDTable_internal_body( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - BYTE* op = (BYTE*)dst; - BYTE* const oend = op + dstSize; - const void* dtPtr = DTable + 1; - const HUF_DEltX1* const dt = (const HUF_DEltX1*)dtPtr; - BIT_DStream_t bitD; - DTableDesc const dtd = HUF_getDTableDesc(DTable); - U32 const dtLog = dtd.tableLog; - - CHECK_F( BIT_initDStream(&bitD, cSrc, cSrcSize) ); - - HUF_decodeStreamX1(op, &bitD, oend, dt, dtLog); - - if (!BIT_endOfDStream(&bitD)) return ERROR(corruption_detected); - - return dstSize; -} - -FORCE_INLINE_TEMPLATE size_t -HUF_decompress4X1_usingDTable_internal_body( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - /* Check */ - if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */ - - { const BYTE* const istart = (const BYTE*) cSrc; - BYTE* const ostart = (BYTE*) dst; - BYTE* const oend = ostart + dstSize; - BYTE* const olimit = oend - 3; - const void* const dtPtr = DTable + 1; - const HUF_DEltX1* const dt = (const HUF_DEltX1*)dtPtr; - - /* Init */ - BIT_DStream_t bitD1; - BIT_DStream_t bitD2; - BIT_DStream_t bitD3; - BIT_DStream_t bitD4; - size_t const length1 = MEM_readLE16(istart); - size_t const length2 = MEM_readLE16(istart+2); - size_t const length3 = MEM_readLE16(istart+4); - size_t const length4 = cSrcSize - (length1 + length2 + length3 + 6); - const BYTE* const istart1 = istart + 6; /* jumpTable */ - const BYTE* const istart2 = istart1 + length1; - const BYTE* const istart3 = istart2 + length2; - const BYTE* const istart4 = istart3 + length3; - const size_t segmentSize = (dstSize+3) / 4; - BYTE* const opStart2 = ostart + segmentSize; - BYTE* const opStart3 = opStart2 + segmentSize; - BYTE* const opStart4 = opStart3 + segmentSize; - BYTE* op1 = ostart; - BYTE* op2 = opStart2; - BYTE* op3 = opStart3; - BYTE* op4 = opStart4; - DTableDesc const dtd = HUF_getDTableDesc(DTable); - U32 const dtLog = dtd.tableLog; - U32 endSignal = 1; - - if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */ - if (opStart4 > oend) return ERROR(corruption_detected); /* overflow */ - CHECK_F( BIT_initDStream(&bitD1, istart1, length1) ); - CHECK_F( BIT_initDStream(&bitD2, istart2, length2) ); - CHECK_F( BIT_initDStream(&bitD3, istart3, length3) ); - CHECK_F( BIT_initDStream(&bitD4, istart4, length4) ); - - /* up to 16 symbols per loop (4 symbols per stream) in 64-bit mode */ - if ((size_t)(oend - op4) >= sizeof(size_t)) { - for ( ; (endSignal) & (op4 < olimit) ; ) { - HUF_DECODE_SYMBOLX1_2(op1, &bitD1); - HUF_DECODE_SYMBOLX1_2(op2, &bitD2); - HUF_DECODE_SYMBOLX1_2(op3, &bitD3); - HUF_DECODE_SYMBOLX1_2(op4, &bitD4); - HUF_DECODE_SYMBOLX1_1(op1, &bitD1); - HUF_DECODE_SYMBOLX1_1(op2, &bitD2); - HUF_DECODE_SYMBOLX1_1(op3, &bitD3); - HUF_DECODE_SYMBOLX1_1(op4, &bitD4); - HUF_DECODE_SYMBOLX1_2(op1, &bitD1); - HUF_DECODE_SYMBOLX1_2(op2, &bitD2); - HUF_DECODE_SYMBOLX1_2(op3, &bitD3); - HUF_DECODE_SYMBOLX1_2(op4, &bitD4); - HUF_DECODE_SYMBOLX1_0(op1, &bitD1); - HUF_DECODE_SYMBOLX1_0(op2, &bitD2); - HUF_DECODE_SYMBOLX1_0(op3, &bitD3); - HUF_DECODE_SYMBOLX1_0(op4, &bitD4); - endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished; - endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished; - endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished; - endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished; - } - } - - /* check corruption */ - /* note : should not be necessary : op# advance in lock step, and we control op4. - * but curiously, binary generated by gcc 7.2 & 7.3 with -mbmi2 runs faster when >=1 test is present */ - if (op1 > opStart2) return ERROR(corruption_detected); - if (op2 > opStart3) return ERROR(corruption_detected); - if (op3 > opStart4) return ERROR(corruption_detected); - /* note : op4 supposed already verified within main loop */ - - /* finish bitStreams one by one */ - HUF_decodeStreamX1(op1, &bitD1, opStart2, dt, dtLog); - HUF_decodeStreamX1(op2, &bitD2, opStart3, dt, dtLog); - HUF_decodeStreamX1(op3, &bitD3, opStart4, dt, dtLog); - HUF_decodeStreamX1(op4, &bitD4, oend, dt, dtLog); - - /* check */ - { U32 const endCheck = BIT_endOfDStream(&bitD1) & BIT_endOfDStream(&bitD2) & BIT_endOfDStream(&bitD3) & BIT_endOfDStream(&bitD4); - if (!endCheck) return ERROR(corruption_detected); } - - /* decoded size */ - return dstSize; - } -} - -#if HUF_NEED_BMI2_FUNCTION -static BMI2_TARGET_ATTRIBUTE -size_t HUF_decompress4X1_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc, - size_t cSrcSize, HUF_DTable const* DTable) { - return HUF_decompress4X1_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable); -} -#endif - -#if HUF_NEED_DEFAULT_FUNCTION -static -size_t HUF_decompress4X1_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc, - size_t cSrcSize, HUF_DTable const* DTable) { - return HUF_decompress4X1_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable); -} -#endif - -#if ZSTD_ENABLE_ASM_X86_64_BMI2 - -HUF_ASM_DECL void HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop(HUF_DecompressAsmArgs* args) ZSTDLIB_HIDDEN; - -static HUF_ASM_X86_64_BMI2_ATTRS -size_t -HUF_decompress4X1_usingDTable_internal_bmi2_asm( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - void const* dt = DTable + 1; - const BYTE* const iend = (const BYTE*)cSrc + 6; - BYTE* const oend = (BYTE*)dst + dstSize; - HUF_DecompressAsmArgs args; - { - size_t const ret = HUF_DecompressAsmArgs_init(&args, dst, dstSize, cSrc, cSrcSize, DTable); - FORWARD_IF_ERROR(ret, "Failed to init asm args"); - if (ret != 0) - return HUF_decompress4X1_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable); - } - - assert(args.ip[0] >= args.ilimit); - HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop(&args); - - /* Our loop guarantees that ip[] >= ilimit and that we haven't - * overwritten any op[]. - */ - assert(args.ip[0] >= iend); - assert(args.ip[1] >= iend); - assert(args.ip[2] >= iend); - assert(args.ip[3] >= iend); - assert(args.op[3] <= oend); - (void)iend; - - /* finish bit streams one by one. */ - { - size_t const segmentSize = (dstSize+3) / 4; - BYTE* segmentEnd = (BYTE*)dst; - int i; - for (i = 0; i < 4; ++i) { - BIT_DStream_t bit; - if (segmentSize <= (size_t)(oend - segmentEnd)) - segmentEnd += segmentSize; - else - segmentEnd = oend; - FORWARD_IF_ERROR(HUF_initRemainingDStream(&bit, &args, i, segmentEnd), "corruption"); - /* Decompress and validate that we've produced exactly the expected length. */ - args.op[i] += HUF_decodeStreamX1(args.op[i], &bit, segmentEnd, (HUF_DEltX1 const*)dt, HUF_DECODER_FAST_TABLELOG); - if (args.op[i] != segmentEnd) return ERROR(corruption_detected); - } - } - - /* decoded size */ - return dstSize; -} -#endif /* ZSTD_ENABLE_ASM_X86_64_BMI2 */ - -typedef size_t (*HUF_decompress_usingDTable_t)(void *dst, size_t dstSize, - const void *cSrc, - size_t cSrcSize, - const HUF_DTable *DTable); - -HUF_DGEN(HUF_decompress1X1_usingDTable_internal) - -static size_t HUF_decompress4X1_usingDTable_internal(void* dst, size_t dstSize, void const* cSrc, - size_t cSrcSize, HUF_DTable const* DTable, int bmi2) -{ -#if DYNAMIC_BMI2 - if (bmi2) { -# if ZSTD_ENABLE_ASM_X86_64_BMI2 - return HUF_decompress4X1_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable); -# else - return HUF_decompress4X1_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable); -# endif - } -#else - (void)bmi2; -#endif - -#if ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__) - return HUF_decompress4X1_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable); -#else - return HUF_decompress4X1_usingDTable_internal_default(dst, dstSize, cSrc, cSrcSize, DTable); -#endif -} - - -size_t HUF_decompress1X1_usingDTable( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - DTableDesc dtd = HUF_getDTableDesc(DTable); - if (dtd.tableType != 0) return ERROR(GENERIC); - return HUF_decompress1X1_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -} - -size_t HUF_decompress1X1_DCtx_wksp(HUF_DTable* DCtx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - void* workSpace, size_t wkspSize) -{ - const BYTE* ip = (const BYTE*) cSrc; - - size_t const hSize = HUF_readDTableX1_wksp(DCtx, cSrc, cSrcSize, workSpace, wkspSize); - if (HUF_isError(hSize)) return hSize; - if (hSize >= cSrcSize) return ERROR(srcSize_wrong); - ip += hSize; cSrcSize -= hSize; - - return HUF_decompress1X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx, /* bmi2 */ 0); -} - - -size_t HUF_decompress4X1_usingDTable( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - DTableDesc dtd = HUF_getDTableDesc(DTable); - if (dtd.tableType != 0) return ERROR(GENERIC); - return HUF_decompress4X1_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -} - -static size_t HUF_decompress4X1_DCtx_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - void* workSpace, size_t wkspSize, int bmi2) -{ - const BYTE* ip = (const BYTE*) cSrc; - - size_t const hSize = HUF_readDTableX1_wksp_bmi2(dctx, cSrc, cSrcSize, workSpace, wkspSize, bmi2); - if (HUF_isError(hSize)) return hSize; - if (hSize >= cSrcSize) return ERROR(srcSize_wrong); - ip += hSize; cSrcSize -= hSize; - - return HUF_decompress4X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, bmi2); -} - -size_t HUF_decompress4X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - void* workSpace, size_t wkspSize) -{ - return HUF_decompress4X1_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, 0); -} - - -#endif /* HUF_FORCE_DECOMPRESS_X2 */ - - -#ifndef HUF_FORCE_DECOMPRESS_X1 - -/* *************************/ -/* double-symbols decoding */ -/* *************************/ - -typedef struct { U16 sequence; BYTE nbBits; BYTE length; } HUF_DEltX2; /* double-symbols decoding */ -typedef struct { BYTE symbol; } sortedSymbol_t; -typedef U32 rankValCol_t[HUF_TABLELOG_MAX + 1]; -typedef rankValCol_t rankVal_t[HUF_TABLELOG_MAX]; - -/** - * Constructs a HUF_DEltX2 in a U32. - */ -static U32 HUF_buildDEltX2U32(U32 symbol, U32 nbBits, U32 baseSeq, int level) -{ - U32 seq; - DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, sequence) == 0); - DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, nbBits) == 2); - DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, length) == 3); - DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(U32)); - if (MEM_isLittleEndian()) { - seq = level == 1 ? symbol : (baseSeq + (symbol << 8)); - return seq + (nbBits << 16) + ((U32)level << 24); - } else { - seq = level == 1 ? (symbol << 8) : ((baseSeq << 8) + symbol); - return (seq << 16) + (nbBits << 8) + (U32)level; - } -} - -/** - * Constructs a HUF_DEltX2. - */ -static HUF_DEltX2 HUF_buildDEltX2(U32 symbol, U32 nbBits, U32 baseSeq, int level) -{ - HUF_DEltX2 DElt; - U32 const val = HUF_buildDEltX2U32(symbol, nbBits, baseSeq, level); - DEBUG_STATIC_ASSERT(sizeof(DElt) == sizeof(val)); - ZSTD_memcpy(&DElt, &val, sizeof(val)); - return DElt; -} - -/** - * Constructs 2 HUF_DEltX2s and packs them into a U64. - */ -static U64 HUF_buildDEltX2U64(U32 symbol, U32 nbBits, U16 baseSeq, int level) -{ - U32 DElt = HUF_buildDEltX2U32(symbol, nbBits, baseSeq, level); - return (U64)DElt + ((U64)DElt << 32); -} - -/** - * Fills the DTable rank with all the symbols from [begin, end) that are each - * nbBits long. - * - * @param DTableRank The start of the rank in the DTable. - * @param begin The first symbol to fill (inclusive). - * @param end The last symbol to fill (exclusive). - * @param nbBits Each symbol is nbBits long. - * @param tableLog The table log. - * @param baseSeq If level == 1 { 0 } else { the first level symbol } - * @param level The level in the table. Must be 1 or 2. - */ -static void HUF_fillDTableX2ForWeight( - HUF_DEltX2* DTableRank, - sortedSymbol_t const* begin, sortedSymbol_t const* end, - U32 nbBits, U32 tableLog, - U16 baseSeq, int const level) -{ - U32 const length = 1U << ((tableLog - nbBits) & 0x1F /* quiet static-analyzer */); - const sortedSymbol_t* ptr; - assert(level >= 1 && level <= 2); - switch (length) { - case 1: - for (ptr = begin; ptr != end; ++ptr) { - HUF_DEltX2 const DElt = HUF_buildDEltX2(ptr->symbol, nbBits, baseSeq, level); - *DTableRank++ = DElt; - } - break; - case 2: - for (ptr = begin; ptr != end; ++ptr) { - HUF_DEltX2 const DElt = HUF_buildDEltX2(ptr->symbol, nbBits, baseSeq, level); - DTableRank[0] = DElt; - DTableRank[1] = DElt; - DTableRank += 2; - } - break; - case 4: - for (ptr = begin; ptr != end; ++ptr) { - U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level); - ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2)); - DTableRank += 4; - } - break; - case 8: - for (ptr = begin; ptr != end; ++ptr) { - U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level); - ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTableRank + 4, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTableRank + 6, &DEltX2, sizeof(DEltX2)); - DTableRank += 8; - } - break; - default: - for (ptr = begin; ptr != end; ++ptr) { - U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level); - HUF_DEltX2* const DTableRankEnd = DTableRank + length; - for (; DTableRank != DTableRankEnd; DTableRank += 8) { - ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTableRank + 4, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTableRank + 6, &DEltX2, sizeof(DEltX2)); - } - } - break; - } -} - -/* HUF_fillDTableX2Level2() : - * `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */ -static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 targetLog, const U32 consumedBits, - const U32* rankVal, const int minWeight, const int maxWeight1, - const sortedSymbol_t* sortedSymbols, U32 const* rankStart, - U32 nbBitsBaseline, U16 baseSeq) -{ - /* Fill skipped values (all positions up to rankVal[minWeight]). - * These are positions only get a single symbol because the combined weight - * is too large. - */ - if (minWeight>1) { - U32 const length = 1U << ((targetLog - consumedBits) & 0x1F /* quiet static-analyzer */); - U64 const DEltX2 = HUF_buildDEltX2U64(baseSeq, consumedBits, /* baseSeq */ 0, /* level */ 1); - int const skipSize = rankVal[minWeight]; - assert(length > 1); - assert((U32)skipSize < length); - switch (length) { - case 2: - assert(skipSize == 1); - ZSTD_memcpy(DTable, &DEltX2, sizeof(DEltX2)); - break; - case 4: - assert(skipSize <= 4); - ZSTD_memcpy(DTable + 0, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTable + 2, &DEltX2, sizeof(DEltX2)); - break; - default: - { - int i; - for (i = 0; i < skipSize; i += 8) { - ZSTD_memcpy(DTable + i + 0, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTable + i + 2, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTable + i + 4, &DEltX2, sizeof(DEltX2)); - ZSTD_memcpy(DTable + i + 6, &DEltX2, sizeof(DEltX2)); - } - } - } - } - - /* Fill each of the second level symbols by weight. */ - { - int w; - for (w = minWeight; w < maxWeight1; ++w) { - int const begin = rankStart[w]; - int const end = rankStart[w+1]; - U32 const nbBits = nbBitsBaseline - w; - U32 const totalBits = nbBits + consumedBits; - HUF_fillDTableX2ForWeight( - DTable + rankVal[w], - sortedSymbols + begin, sortedSymbols + end, - totalBits, targetLog, - baseSeq, /* level */ 2); - } - } -} - -static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog, - const sortedSymbol_t* sortedList, - const U32* rankStart, rankVal_t rankValOrigin, const U32 maxWeight, - const U32 nbBitsBaseline) -{ - U32* const rankVal = rankValOrigin[0]; - const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */ - const U32 minBits = nbBitsBaseline - maxWeight; - int w; - int const wEnd = (int)maxWeight + 1; - - /* Fill DTable in order of weight. */ - for (w = 1; w < wEnd; ++w) { - int const begin = (int)rankStart[w]; - int const end = (int)rankStart[w+1]; - U32 const nbBits = nbBitsBaseline - w; - - if (targetLog-nbBits >= minBits) { - /* Enough room for a second symbol. */ - int start = rankVal[w]; - U32 const length = 1U << ((targetLog - nbBits) & 0x1F /* quiet static-analyzer */); - int minWeight = nbBits + scaleLog; - int s; - if (minWeight < 1) minWeight = 1; - /* Fill the DTable for every symbol of weight w. - * These symbols get at least 1 second symbol. - */ - for (s = begin; s != end; ++s) { - HUF_fillDTableX2Level2( - DTable + start, targetLog, nbBits, - rankValOrigin[nbBits], minWeight, wEnd, - sortedList, rankStart, - nbBitsBaseline, sortedList[s].symbol); - start += length; - } - } else { - /* Only a single symbol. */ - HUF_fillDTableX2ForWeight( - DTable + rankVal[w], - sortedList + begin, sortedList + end, - nbBits, targetLog, - /* baseSeq */ 0, /* level */ 1); - } - } -} - -typedef struct { - rankValCol_t rankVal[HUF_TABLELOG_MAX]; - U32 rankStats[HUF_TABLELOG_MAX + 1]; - U32 rankStart0[HUF_TABLELOG_MAX + 3]; - sortedSymbol_t sortedSymbol[HUF_SYMBOLVALUE_MAX + 1]; - BYTE weightList[HUF_SYMBOLVALUE_MAX + 1]; - U32 calleeWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32]; -} HUF_ReadDTableX2_Workspace; - -size_t HUF_readDTableX2_wksp(HUF_DTable* DTable, - const void* src, size_t srcSize, - void* workSpace, size_t wkspSize) -{ - return HUF_readDTableX2_wksp_bmi2(DTable, src, srcSize, workSpace, wkspSize, /* bmi2 */ 0); -} - -size_t HUF_readDTableX2_wksp_bmi2(HUF_DTable* DTable, - const void* src, size_t srcSize, - void* workSpace, size_t wkspSize, int bmi2) -{ - U32 tableLog, maxW, nbSymbols; - DTableDesc dtd = HUF_getDTableDesc(DTable); - U32 maxTableLog = dtd.maxTableLog; - size_t iSize; - void* dtPtr = DTable+1; /* force compiler to avoid strict-aliasing */ - HUF_DEltX2* const dt = (HUF_DEltX2*)dtPtr; - U32 *rankStart; - - HUF_ReadDTableX2_Workspace* const wksp = (HUF_ReadDTableX2_Workspace*)workSpace; - - if (sizeof(*wksp) > wkspSize) return ERROR(GENERIC); - - rankStart = wksp->rankStart0 + 1; - ZSTD_memset(wksp->rankStats, 0, sizeof(wksp->rankStats)); - ZSTD_memset(wksp->rankStart0, 0, sizeof(wksp->rankStart0)); - - DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */ - if (maxTableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge); - /* ZSTD_memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */ - - iSize = HUF_readStats_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), bmi2); - if (HUF_isError(iSize)) return iSize; - - /* check result */ - if (tableLog > maxTableLog) return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */ - if (tableLog <= HUF_DECODER_FAST_TABLELOG && maxTableLog > HUF_DECODER_FAST_TABLELOG) maxTableLog = HUF_DECODER_FAST_TABLELOG; - - /* find maxWeight */ - for (maxW = tableLog; wksp->rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */ - - /* Get start index of each weight */ - { U32 w, nextRankStart = 0; - for (w=1; wrankStats[w]; - rankStart[w] = curr; - } - rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/ - rankStart[maxW+1] = nextRankStart; - } - - /* sort symbols by weight */ - { U32 s; - for (s=0; sweightList[s]; - U32 const r = rankStart[w]++; - wksp->sortedSymbol[r].symbol = (BYTE)s; - } - rankStart[0] = 0; /* forget 0w symbols; this is beginning of weight(1) */ - } - - /* Build rankVal */ - { U32* const rankVal0 = wksp->rankVal[0]; - { int const rescale = (maxTableLog-tableLog) - 1; /* tableLog <= maxTableLog */ - U32 nextRankVal = 0; - U32 w; - for (w=1; wrankStats[w] << (w+rescale); - rankVal0[w] = curr; - } } - { U32 const minBits = tableLog+1 - maxW; - U32 consumed; - for (consumed = minBits; consumed < maxTableLog - minBits + 1; consumed++) { - U32* const rankValPtr = wksp->rankVal[consumed]; - U32 w; - for (w = 1; w < maxW+1; w++) { - rankValPtr[w] = rankVal0[w] >> consumed; - } } } } - - HUF_fillDTableX2(dt, maxTableLog, - wksp->sortedSymbol, - wksp->rankStart0, wksp->rankVal, maxW, - tableLog+1); - - dtd.tableLog = (BYTE)maxTableLog; - dtd.tableType = 1; - ZSTD_memcpy(DTable, &dtd, sizeof(dtd)); - return iSize; -} - - -FORCE_INLINE_TEMPLATE U32 -HUF_decodeSymbolX2(void* op, BIT_DStream_t* DStream, const HUF_DEltX2* dt, const U32 dtLog) -{ - size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */ - ZSTD_memcpy(op, &dt[val].sequence, 2); - BIT_skipBits(DStream, dt[val].nbBits); - return dt[val].length; -} - -FORCE_INLINE_TEMPLATE U32 -HUF_decodeLastSymbolX2(void* op, BIT_DStream_t* DStream, const HUF_DEltX2* dt, const U32 dtLog) -{ - size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */ - ZSTD_memcpy(op, &dt[val].sequence, 1); - if (dt[val].length==1) { - BIT_skipBits(DStream, dt[val].nbBits); - } else { - if (DStream->bitsConsumed < (sizeof(DStream->bitContainer)*8)) { - BIT_skipBits(DStream, dt[val].nbBits); - if (DStream->bitsConsumed > (sizeof(DStream->bitContainer)*8)) - /* ugly hack; works only because it's the last symbol. Note : can't easily extract nbBits from just this symbol */ - DStream->bitsConsumed = (sizeof(DStream->bitContainer)*8); - } - } - return 1; -} - -#define HUF_DECODE_SYMBOLX2_0(ptr, DStreamPtr) \ - ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog) - -#define HUF_DECODE_SYMBOLX2_1(ptr, DStreamPtr) \ - if (MEM_64bits() || (HUF_TABLELOG_MAX<=12)) \ - ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog) - -#define HUF_DECODE_SYMBOLX2_2(ptr, DStreamPtr) \ - if (MEM_64bits()) \ - ptr += HUF_decodeSymbolX2(ptr, DStreamPtr, dt, dtLog) - -HINT_INLINE size_t -HUF_decodeStreamX2(BYTE* p, BIT_DStream_t* bitDPtr, BYTE* const pEnd, - const HUF_DEltX2* const dt, const U32 dtLog) -{ - BYTE* const pStart = p; - - /* up to 8 symbols at a time */ - if ((size_t)(pEnd - p) >= sizeof(bitDPtr->bitContainer)) { - if (dtLog <= 11 && MEM_64bits()) { - /* up to 10 symbols at a time */ - while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-9)) { - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); - } - } else { - /* up to 8 symbols at a time */ - while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-(sizeof(bitDPtr->bitContainer)-1))) { - HUF_DECODE_SYMBOLX2_2(p, bitDPtr); - HUF_DECODE_SYMBOLX2_1(p, bitDPtr); - HUF_DECODE_SYMBOLX2_2(p, bitDPtr); - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); - } - } - } else { - BIT_reloadDStream(bitDPtr); - } - - /* closer to end : up to 2 symbols at a time */ - if ((size_t)(pEnd - p) >= 2) { - while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p <= pEnd-2)) - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); - - while (p <= pEnd-2) - HUF_DECODE_SYMBOLX2_0(p, bitDPtr); /* no need to reload : reached the end of DStream */ - } - - if (p < pEnd) - p += HUF_decodeLastSymbolX2(p, bitDPtr, dt, dtLog); - - return p-pStart; -} - -FORCE_INLINE_TEMPLATE size_t -HUF_decompress1X2_usingDTable_internal_body( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - BIT_DStream_t bitD; - - /* Init */ - CHECK_F( BIT_initDStream(&bitD, cSrc, cSrcSize) ); - - /* decode */ - { BYTE* const ostart = (BYTE*) dst; - BYTE* const oend = ostart + dstSize; - const void* const dtPtr = DTable+1; /* force compiler to not use strict-aliasing */ - const HUF_DEltX2* const dt = (const HUF_DEltX2*)dtPtr; - DTableDesc const dtd = HUF_getDTableDesc(DTable); - HUF_decodeStreamX2(ostart, &bitD, oend, dt, dtd.tableLog); - } - - /* check */ - if (!BIT_endOfDStream(&bitD)) return ERROR(corruption_detected); - - /* decoded size */ - return dstSize; -} -FORCE_INLINE_TEMPLATE size_t -HUF_decompress4X2_usingDTable_internal_body( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */ - - { const BYTE* const istart = (const BYTE*) cSrc; - BYTE* const ostart = (BYTE*) dst; - BYTE* const oend = ostart + dstSize; - BYTE* const olimit = oend - (sizeof(size_t)-1); - const void* const dtPtr = DTable+1; - const HUF_DEltX2* const dt = (const HUF_DEltX2*)dtPtr; - - /* Init */ - BIT_DStream_t bitD1; - BIT_DStream_t bitD2; - BIT_DStream_t bitD3; - BIT_DStream_t bitD4; - size_t const length1 = MEM_readLE16(istart); - size_t const length2 = MEM_readLE16(istart+2); - size_t const length3 = MEM_readLE16(istart+4); - size_t const length4 = cSrcSize - (length1 + length2 + length3 + 6); - const BYTE* const istart1 = istart + 6; /* jumpTable */ - const BYTE* const istart2 = istart1 + length1; - const BYTE* const istart3 = istart2 + length2; - const BYTE* const istart4 = istart3 + length3; - size_t const segmentSize = (dstSize+3) / 4; - BYTE* const opStart2 = ostart + segmentSize; - BYTE* const opStart3 = opStart2 + segmentSize; - BYTE* const opStart4 = opStart3 + segmentSize; - BYTE* op1 = ostart; - BYTE* op2 = opStart2; - BYTE* op3 = opStart3; - BYTE* op4 = opStart4; - U32 endSignal = 1; - DTableDesc const dtd = HUF_getDTableDesc(DTable); - U32 const dtLog = dtd.tableLog; - - if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */ - if (opStart4 > oend) return ERROR(corruption_detected); /* overflow */ - CHECK_F( BIT_initDStream(&bitD1, istart1, length1) ); - CHECK_F( BIT_initDStream(&bitD2, istart2, length2) ); - CHECK_F( BIT_initDStream(&bitD3, istart3, length3) ); - CHECK_F( BIT_initDStream(&bitD4, istart4, length4) ); - - /* 16-32 symbols per loop (4-8 symbols per stream) */ - if ((size_t)(oend - op4) >= sizeof(size_t)) { - for ( ; (endSignal) & (op4 < olimit); ) { -#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) - HUF_DECODE_SYMBOLX2_2(op1, &bitD1); - HUF_DECODE_SYMBOLX2_1(op1, &bitD1); - HUF_DECODE_SYMBOLX2_2(op1, &bitD1); - HUF_DECODE_SYMBOLX2_0(op1, &bitD1); - HUF_DECODE_SYMBOLX2_2(op2, &bitD2); - HUF_DECODE_SYMBOLX2_1(op2, &bitD2); - HUF_DECODE_SYMBOLX2_2(op2, &bitD2); - HUF_DECODE_SYMBOLX2_0(op2, &bitD2); - endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished; - endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished; - HUF_DECODE_SYMBOLX2_2(op3, &bitD3); - HUF_DECODE_SYMBOLX2_1(op3, &bitD3); - HUF_DECODE_SYMBOLX2_2(op3, &bitD3); - HUF_DECODE_SYMBOLX2_0(op3, &bitD3); - HUF_DECODE_SYMBOLX2_2(op4, &bitD4); - HUF_DECODE_SYMBOLX2_1(op4, &bitD4); - HUF_DECODE_SYMBOLX2_2(op4, &bitD4); - HUF_DECODE_SYMBOLX2_0(op4, &bitD4); - endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished; - endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished; -#else - HUF_DECODE_SYMBOLX2_2(op1, &bitD1); - HUF_DECODE_SYMBOLX2_2(op2, &bitD2); - HUF_DECODE_SYMBOLX2_2(op3, &bitD3); - HUF_DECODE_SYMBOLX2_2(op4, &bitD4); - HUF_DECODE_SYMBOLX2_1(op1, &bitD1); - HUF_DECODE_SYMBOLX2_1(op2, &bitD2); - HUF_DECODE_SYMBOLX2_1(op3, &bitD3); - HUF_DECODE_SYMBOLX2_1(op4, &bitD4); - HUF_DECODE_SYMBOLX2_2(op1, &bitD1); - HUF_DECODE_SYMBOLX2_2(op2, &bitD2); - HUF_DECODE_SYMBOLX2_2(op3, &bitD3); - HUF_DECODE_SYMBOLX2_2(op4, &bitD4); - HUF_DECODE_SYMBOLX2_0(op1, &bitD1); - HUF_DECODE_SYMBOLX2_0(op2, &bitD2); - HUF_DECODE_SYMBOLX2_0(op3, &bitD3); - HUF_DECODE_SYMBOLX2_0(op4, &bitD4); - endSignal = (U32)LIKELY((U32) - (BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished) - & (BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished) - & (BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished) - & (BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished)); -#endif - } - } - - /* check corruption */ - if (op1 > opStart2) return ERROR(corruption_detected); - if (op2 > opStart3) return ERROR(corruption_detected); - if (op3 > opStart4) return ERROR(corruption_detected); - /* note : op4 already verified within main loop */ - - /* finish bitStreams one by one */ - HUF_decodeStreamX2(op1, &bitD1, opStart2, dt, dtLog); - HUF_decodeStreamX2(op2, &bitD2, opStart3, dt, dtLog); - HUF_decodeStreamX2(op3, &bitD3, opStart4, dt, dtLog); - HUF_decodeStreamX2(op4, &bitD4, oend, dt, dtLog); - - /* check */ - { U32 const endCheck = BIT_endOfDStream(&bitD1) & BIT_endOfDStream(&bitD2) & BIT_endOfDStream(&bitD3) & BIT_endOfDStream(&bitD4); - if (!endCheck) return ERROR(corruption_detected); } - - /* decoded size */ - return dstSize; - } -} - -#if HUF_NEED_BMI2_FUNCTION -static BMI2_TARGET_ATTRIBUTE -size_t HUF_decompress4X2_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc, - size_t cSrcSize, HUF_DTable const* DTable) { - return HUF_decompress4X2_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable); -} -#endif - -#if HUF_NEED_DEFAULT_FUNCTION -static -size_t HUF_decompress4X2_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc, - size_t cSrcSize, HUF_DTable const* DTable) { - return HUF_decompress4X2_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable); -} -#endif - -#if ZSTD_ENABLE_ASM_X86_64_BMI2 - -HUF_ASM_DECL void HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop(HUF_DecompressAsmArgs* args) ZSTDLIB_HIDDEN; - -static HUF_ASM_X86_64_BMI2_ATTRS size_t -HUF_decompress4X2_usingDTable_internal_bmi2_asm( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) { - void const* dt = DTable + 1; - const BYTE* const iend = (const BYTE*)cSrc + 6; - BYTE* const oend = (BYTE*)dst + dstSize; - HUF_DecompressAsmArgs args; - { - size_t const ret = HUF_DecompressAsmArgs_init(&args, dst, dstSize, cSrc, cSrcSize, DTable); - FORWARD_IF_ERROR(ret, "Failed to init asm args"); - if (ret != 0) - return HUF_decompress4X2_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable); - } - - assert(args.ip[0] >= args.ilimit); - HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop(&args); - - /* note : op4 already verified within main loop */ - assert(args.ip[0] >= iend); - assert(args.ip[1] >= iend); - assert(args.ip[2] >= iend); - assert(args.ip[3] >= iend); - assert(args.op[3] <= oend); - (void)iend; - - /* finish bitStreams one by one */ - { - size_t const segmentSize = (dstSize+3) / 4; - BYTE* segmentEnd = (BYTE*)dst; - int i; - for (i = 0; i < 4; ++i) { - BIT_DStream_t bit; - if (segmentSize <= (size_t)(oend - segmentEnd)) - segmentEnd += segmentSize; - else - segmentEnd = oend; - FORWARD_IF_ERROR(HUF_initRemainingDStream(&bit, &args, i, segmentEnd), "corruption"); - args.op[i] += HUF_decodeStreamX2(args.op[i], &bit, segmentEnd, (HUF_DEltX2 const*)dt, HUF_DECODER_FAST_TABLELOG); - if (args.op[i] != segmentEnd) - return ERROR(corruption_detected); - } - } - - /* decoded size */ - return dstSize; -} -#endif /* ZSTD_ENABLE_ASM_X86_64_BMI2 */ - -static size_t HUF_decompress4X2_usingDTable_internal(void* dst, size_t dstSize, void const* cSrc, - size_t cSrcSize, HUF_DTable const* DTable, int bmi2) -{ -#if DYNAMIC_BMI2 - if (bmi2) { -# if ZSTD_ENABLE_ASM_X86_64_BMI2 - return HUF_decompress4X2_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable); -# else - return HUF_decompress4X2_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable); -# endif - } -#else - (void)bmi2; -#endif - -#if ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__) - return HUF_decompress4X2_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable); -#else - return HUF_decompress4X2_usingDTable_internal_default(dst, dstSize, cSrc, cSrcSize, DTable); -#endif -} - -HUF_DGEN(HUF_decompress1X2_usingDTable_internal) - -size_t HUF_decompress1X2_usingDTable( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - DTableDesc dtd = HUF_getDTableDesc(DTable); - if (dtd.tableType != 1) return ERROR(GENERIC); - return HUF_decompress1X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -} - -size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable* DCtx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - void* workSpace, size_t wkspSize) -{ - const BYTE* ip = (const BYTE*) cSrc; - - size_t const hSize = HUF_readDTableX2_wksp(DCtx, cSrc, cSrcSize, - workSpace, wkspSize); - if (HUF_isError(hSize)) return hSize; - if (hSize >= cSrcSize) return ERROR(srcSize_wrong); - ip += hSize; cSrcSize -= hSize; - - return HUF_decompress1X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx, /* bmi2 */ 0); -} - - -size_t HUF_decompress4X2_usingDTable( - void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - DTableDesc dtd = HUF_getDTableDesc(DTable); - if (dtd.tableType != 1) return ERROR(GENERIC); - return HUF_decompress4X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -} - -static size_t HUF_decompress4X2_DCtx_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - void* workSpace, size_t wkspSize, int bmi2) -{ - const BYTE* ip = (const BYTE*) cSrc; - - size_t hSize = HUF_readDTableX2_wksp(dctx, cSrc, cSrcSize, - workSpace, wkspSize); - if (HUF_isError(hSize)) return hSize; - if (hSize >= cSrcSize) return ERROR(srcSize_wrong); - ip += hSize; cSrcSize -= hSize; - - return HUF_decompress4X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, bmi2); -} - -size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - void* workSpace, size_t wkspSize) -{ - return HUF_decompress4X2_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, /* bmi2 */ 0); -} - - -#endif /* HUF_FORCE_DECOMPRESS_X1 */ - - -/* ***********************************/ -/* Universal decompression selectors */ -/* ***********************************/ - -size_t HUF_decompress1X_usingDTable(void* dst, size_t maxDstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - DTableDesc const dtd = HUF_getDTableDesc(DTable); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)dtd; - assert(dtd.tableType == 0); - return HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)dtd; - assert(dtd.tableType == 1); - return HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -#else - return dtd.tableType ? HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0) : - HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -#endif -} - -size_t HUF_decompress4X_usingDTable(void* dst, size_t maxDstSize, - const void* cSrc, size_t cSrcSize, - const HUF_DTable* DTable) -{ - DTableDesc const dtd = HUF_getDTableDesc(DTable); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)dtd; - assert(dtd.tableType == 0); - return HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)dtd; - assert(dtd.tableType == 1); - return HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -#else - return dtd.tableType ? HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0) : - HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, /* bmi2 */ 0); -#endif -} - - -#if !defined(HUF_FORCE_DECOMPRESS_X1) && !defined(HUF_FORCE_DECOMPRESS_X2) -typedef struct { U32 tableTime; U32 decode256Time; } algo_time_t; -static const algo_time_t algoTime[16 /* Quantization */][2 /* single, double */] = -{ - /* single, double, quad */ - {{0,0}, {1,1}}, /* Q==0 : impossible */ - {{0,0}, {1,1}}, /* Q==1 : impossible */ - {{ 150,216}, { 381,119}}, /* Q == 2 : 12-18% */ - {{ 170,205}, { 514,112}}, /* Q == 3 : 18-25% */ - {{ 177,199}, { 539,110}}, /* Q == 4 : 25-32% */ - {{ 197,194}, { 644,107}}, /* Q == 5 : 32-38% */ - {{ 221,192}, { 735,107}}, /* Q == 6 : 38-44% */ - {{ 256,189}, { 881,106}}, /* Q == 7 : 44-50% */ - {{ 359,188}, {1167,109}}, /* Q == 8 : 50-56% */ - {{ 582,187}, {1570,114}}, /* Q == 9 : 56-62% */ - {{ 688,187}, {1712,122}}, /* Q ==10 : 62-69% */ - {{ 825,186}, {1965,136}}, /* Q ==11 : 69-75% */ - {{ 976,185}, {2131,150}}, /* Q ==12 : 75-81% */ - {{1180,186}, {2070,175}}, /* Q ==13 : 81-87% */ - {{1377,185}, {1731,202}}, /* Q ==14 : 87-93% */ - {{1412,185}, {1695,202}}, /* Q ==15 : 93-99% */ -}; -#endif - -/** HUF_selectDecoder() : - * Tells which decoder is likely to decode faster, - * based on a set of pre-computed metrics. - * @return : 0==HUF_decompress4X1, 1==HUF_decompress4X2 . - * Assumption : 0 < dstSize <= 128 KB */ -U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize) -{ - assert(dstSize > 0); - assert(dstSize <= 128*1024); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)dstSize; - (void)cSrcSize; - return 0; -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)dstSize; - (void)cSrcSize; - return 1; -#else - /* decoder timing evaluation */ - { U32 const Q = (cSrcSize >= dstSize) ? 15 : (U32)(cSrcSize * 16 / dstSize); /* Q < 16 */ - U32 const D256 = (U32)(dstSize >> 8); - U32 const DTime0 = algoTime[Q][0].tableTime + (algoTime[Q][0].decode256Time * D256); - U32 DTime1 = algoTime[Q][1].tableTime + (algoTime[Q][1].decode256Time * D256); - DTime1 += DTime1 >> 5; /* small advantage to algorithm using less memory, to reduce cache eviction */ - return DTime1 < DTime0; - } -#endif -} - - -size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable* dctx, void* dst, - size_t dstSize, const void* cSrc, - size_t cSrcSize, void* workSpace, - size_t wkspSize) -{ - /* validation checks */ - if (dstSize == 0) return ERROR(dstSize_tooSmall); - if (cSrcSize == 0) return ERROR(corruption_detected); - - { U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)algoNb; - assert(algoNb == 0); - return HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)algoNb; - assert(algoNb == 1); - return HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize); -#else - return algoNb ? HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, - cSrcSize, workSpace, wkspSize): - HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize); -#endif - } -} - -size_t HUF_decompress1X_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize, - void* workSpace, size_t wkspSize) -{ - /* validation checks */ - if (dstSize == 0) return ERROR(dstSize_tooSmall); - if (cSrcSize > dstSize) return ERROR(corruption_detected); /* invalid */ - if (cSrcSize == dstSize) { ZSTD_memcpy(dst, cSrc, dstSize); return dstSize; } /* not compressed */ - if (cSrcSize == 1) { ZSTD_memset(dst, *(const BYTE*)cSrc, dstSize); return dstSize; } /* RLE */ - - { U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)algoNb; - assert(algoNb == 0); - return HUF_decompress1X1_DCtx_wksp(dctx, dst, dstSize, cSrc, - cSrcSize, workSpace, wkspSize); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)algoNb; - assert(algoNb == 1); - return HUF_decompress1X2_DCtx_wksp(dctx, dst, dstSize, cSrc, - cSrcSize, workSpace, wkspSize); -#else - return algoNb ? HUF_decompress1X2_DCtx_wksp(dctx, dst, dstSize, cSrc, - cSrcSize, workSpace, wkspSize): - HUF_decompress1X1_DCtx_wksp(dctx, dst, dstSize, cSrc, - cSrcSize, workSpace, wkspSize); -#endif - } -} - - -size_t HUF_decompress1X_usingDTable_bmi2(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int bmi2) -{ - DTableDesc const dtd = HUF_getDTableDesc(DTable); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)dtd; - assert(dtd.tableType == 0); - return HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)dtd; - assert(dtd.tableType == 1); - return HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2); -#else - return dtd.tableType ? HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2) : - HUF_decompress1X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2); -#endif -} - -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_decompress1X1_DCtx_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int bmi2) -{ - const BYTE* ip = (const BYTE*) cSrc; - - size_t const hSize = HUF_readDTableX1_wksp_bmi2(dctx, cSrc, cSrcSize, workSpace, wkspSize, bmi2); - if (HUF_isError(hSize)) return hSize; - if (hSize >= cSrcSize) return ERROR(srcSize_wrong); - ip += hSize; cSrcSize -= hSize; - - return HUF_decompress1X1_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx, bmi2); -} -#endif - -size_t HUF_decompress4X_usingDTable_bmi2(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int bmi2) -{ - DTableDesc const dtd = HUF_getDTableDesc(DTable); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)dtd; - assert(dtd.tableType == 0); - return HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)dtd; - assert(dtd.tableType == 1); - return HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2); -#else - return dtd.tableType ? HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2) : - HUF_decompress4X1_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable, bmi2); -#endif -} - -size_t HUF_decompress4X_hufOnly_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int bmi2) -{ - /* validation checks */ - if (dstSize == 0) return ERROR(dstSize_tooSmall); - if (cSrcSize == 0) return ERROR(corruption_detected); - - { U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)algoNb; - assert(algoNb == 0); - return HUF_decompress4X1_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)algoNb; - assert(algoNb == 1); - return HUF_decompress4X2_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2); -#else - return algoNb ? HUF_decompress4X2_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2) : - HUF_decompress4X1_DCtx_wksp_bmi2(dctx, dst, dstSize, cSrc, cSrcSize, workSpace, wkspSize, bmi2); -#endif - } -} - -#ifndef ZSTD_NO_UNUSED_FUNCTIONS -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_readDTableX1(HUF_DTable* DTable, const void* src, size_t srcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_readDTableX1_wksp(DTable, src, srcSize, - workSpace, sizeof(workSpace)); -} - -size_t HUF_decompress1X1_DCtx(HUF_DTable* DCtx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_decompress1X1_DCtx_wksp(DCtx, dst, dstSize, cSrc, cSrcSize, - workSpace, sizeof(workSpace)); -} - -size_t HUF_decompress1X1 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ - HUF_CREATE_STATIC_DTABLEX1(DTable, HUF_TABLELOG_MAX); - return HUF_decompress1X1_DCtx (DTable, dst, dstSize, cSrc, cSrcSize); -} -#endif - -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_readDTableX2(HUF_DTable* DTable, const void* src, size_t srcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_readDTableX2_wksp(DTable, src, srcSize, - workSpace, sizeof(workSpace)); -} - -size_t HUF_decompress1X2_DCtx(HUF_DTable* DCtx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_decompress1X2_DCtx_wksp(DCtx, dst, dstSize, cSrc, cSrcSize, - workSpace, sizeof(workSpace)); -} - -size_t HUF_decompress1X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ - HUF_CREATE_STATIC_DTABLEX2(DTable, HUF_TABLELOG_MAX); - return HUF_decompress1X2_DCtx(DTable, dst, dstSize, cSrc, cSrcSize); -} -#endif - -#ifndef HUF_FORCE_DECOMPRESS_X2 -size_t HUF_decompress4X1_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_decompress4X1_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, - workSpace, sizeof(workSpace)); -} -size_t HUF_decompress4X1 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ - HUF_CREATE_STATIC_DTABLEX1(DTable, HUF_TABLELOG_MAX); - return HUF_decompress4X1_DCtx(DTable, dst, dstSize, cSrc, cSrcSize); -} -#endif - -#ifndef HUF_FORCE_DECOMPRESS_X1 -size_t HUF_decompress4X2_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, - workSpace, sizeof(workSpace)); -} - -size_t HUF_decompress4X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ - HUF_CREATE_STATIC_DTABLEX2(DTable, HUF_TABLELOG_MAX); - return HUF_decompress4X2_DCtx(DTable, dst, dstSize, cSrc, cSrcSize); -} -#endif - -typedef size_t (*decompressionAlgo)(void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); - -size_t HUF_decompress (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ -#if !defined(HUF_FORCE_DECOMPRESS_X1) && !defined(HUF_FORCE_DECOMPRESS_X2) - static const decompressionAlgo decompress[2] = { HUF_decompress4X1, HUF_decompress4X2 }; -#endif - - /* validation checks */ - if (dstSize == 0) return ERROR(dstSize_tooSmall); - if (cSrcSize > dstSize) return ERROR(corruption_detected); /* invalid */ - if (cSrcSize == dstSize) { ZSTD_memcpy(dst, cSrc, dstSize); return dstSize; } /* not compressed */ - if (cSrcSize == 1) { ZSTD_memset(dst, *(const BYTE*)cSrc, dstSize); return dstSize; } /* RLE */ - - { U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)algoNb; - assert(algoNb == 0); - return HUF_decompress4X1(dst, dstSize, cSrc, cSrcSize); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)algoNb; - assert(algoNb == 1); - return HUF_decompress4X2(dst, dstSize, cSrc, cSrcSize); -#else - return decompress[algoNb](dst, dstSize, cSrc, cSrcSize); -#endif - } -} - -size_t HUF_decompress4X_DCtx (HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ - /* validation checks */ - if (dstSize == 0) return ERROR(dstSize_tooSmall); - if (cSrcSize > dstSize) return ERROR(corruption_detected); /* invalid */ - if (cSrcSize == dstSize) { ZSTD_memcpy(dst, cSrc, dstSize); return dstSize; } /* not compressed */ - if (cSrcSize == 1) { ZSTD_memset(dst, *(const BYTE*)cSrc, dstSize); return dstSize; } /* RLE */ - - { U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize); -#if defined(HUF_FORCE_DECOMPRESS_X1) - (void)algoNb; - assert(algoNb == 0); - return HUF_decompress4X1_DCtx(dctx, dst, dstSize, cSrc, cSrcSize); -#elif defined(HUF_FORCE_DECOMPRESS_X2) - (void)algoNb; - assert(algoNb == 1); - return HUF_decompress4X2_DCtx(dctx, dst, dstSize, cSrc, cSrcSize); -#else - return algoNb ? HUF_decompress4X2_DCtx(dctx, dst, dstSize, cSrc, cSrcSize) : - HUF_decompress4X1_DCtx(dctx, dst, dstSize, cSrc, cSrcSize) ; -#endif - } -} - -size_t HUF_decompress4X_hufOnly(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_decompress4X_hufOnly_wksp(dctx, dst, dstSize, cSrc, cSrcSize, - workSpace, sizeof(workSpace)); -} - -size_t HUF_decompress1X_DCtx(HUF_DTable* dctx, void* dst, size_t dstSize, - const void* cSrc, size_t cSrcSize) -{ - U32 workSpace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; - return HUF_decompress1X_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, - workSpace, sizeof(workSpace)); -} -#endif diff --git a/stage1/zstd/lib/decompress/zstd_ddict.c b/stage1/zstd/lib/decompress/zstd_ddict.c deleted file mode 100644 index ce335477b3..0000000000 --- a/stage1/zstd/lib/decompress/zstd_ddict.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -/* zstd_ddict.c : - * concentrates all logic that needs to know the internals of ZSTD_DDict object */ - -/*-******************************************************* -* Dependencies -*********************************************************/ -#include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */ -#include "../common/cpu.h" /* bmi2 */ -#include "../common/mem.h" /* low level memory routines */ -#define FSE_STATIC_LINKING_ONLY -#include "../common/fse.h" -#define HUF_STATIC_LINKING_ONLY -#include "../common/huf.h" -#include "zstd_decompress_internal.h" -#include "zstd_ddict.h" - -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) -# include "../legacy/zstd_legacy.h" -#endif - - - -/*-******************************************************* -* Types -*********************************************************/ -struct ZSTD_DDict_s { - void* dictBuffer; - const void* dictContent; - size_t dictSize; - ZSTD_entropyDTables_t entropy; - U32 dictID; - U32 entropyPresent; - ZSTD_customMem cMem; -}; /* typedef'd to ZSTD_DDict within "zstd.h" */ - -const void* ZSTD_DDict_dictContent(const ZSTD_DDict* ddict) -{ - assert(ddict != NULL); - return ddict->dictContent; -} - -size_t ZSTD_DDict_dictSize(const ZSTD_DDict* ddict) -{ - assert(ddict != NULL); - return ddict->dictSize; -} - -void ZSTD_copyDDictParameters(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict) -{ - DEBUGLOG(4, "ZSTD_copyDDictParameters"); - assert(dctx != NULL); - assert(ddict != NULL); - dctx->dictID = ddict->dictID; - dctx->prefixStart = ddict->dictContent; - dctx->virtualStart = ddict->dictContent; - dctx->dictEnd = (const BYTE*)ddict->dictContent + ddict->dictSize; - dctx->previousDstEnd = dctx->dictEnd; -#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION - dctx->dictContentBeginForFuzzing = dctx->prefixStart; - dctx->dictContentEndForFuzzing = dctx->previousDstEnd; -#endif - if (ddict->entropyPresent) { - dctx->litEntropy = 1; - dctx->fseEntropy = 1; - dctx->LLTptr = ddict->entropy.LLTable; - dctx->MLTptr = ddict->entropy.MLTable; - dctx->OFTptr = ddict->entropy.OFTable; - dctx->HUFptr = ddict->entropy.hufTable; - dctx->entropy.rep[0] = ddict->entropy.rep[0]; - dctx->entropy.rep[1] = ddict->entropy.rep[1]; - dctx->entropy.rep[2] = ddict->entropy.rep[2]; - } else { - dctx->litEntropy = 0; - dctx->fseEntropy = 0; - } -} - - -static size_t -ZSTD_loadEntropy_intoDDict(ZSTD_DDict* ddict, - ZSTD_dictContentType_e dictContentType) -{ - ddict->dictID = 0; - ddict->entropyPresent = 0; - if (dictContentType == ZSTD_dct_rawContent) return 0; - - if (ddict->dictSize < 8) { - if (dictContentType == ZSTD_dct_fullDict) - return ERROR(dictionary_corrupted); /* only accept specified dictionaries */ - return 0; /* pure content mode */ - } - { U32 const magic = MEM_readLE32(ddict->dictContent); - if (magic != ZSTD_MAGIC_DICTIONARY) { - if (dictContentType == ZSTD_dct_fullDict) - return ERROR(dictionary_corrupted); /* only accept specified dictionaries */ - return 0; /* pure content mode */ - } - } - ddict->dictID = MEM_readLE32((const char*)ddict->dictContent + ZSTD_FRAMEIDSIZE); - - /* load entropy tables */ - RETURN_ERROR_IF(ZSTD_isError(ZSTD_loadDEntropy( - &ddict->entropy, ddict->dictContent, ddict->dictSize)), - dictionary_corrupted, ""); - ddict->entropyPresent = 1; - return 0; -} - - -static size_t ZSTD_initDDict_internal(ZSTD_DDict* ddict, - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType) -{ - if ((dictLoadMethod == ZSTD_dlm_byRef) || (!dict) || (!dictSize)) { - ddict->dictBuffer = NULL; - ddict->dictContent = dict; - if (!dict) dictSize = 0; - } else { - void* const internalBuffer = ZSTD_customMalloc(dictSize, ddict->cMem); - ddict->dictBuffer = internalBuffer; - ddict->dictContent = internalBuffer; - if (!internalBuffer) return ERROR(memory_allocation); - ZSTD_memcpy(internalBuffer, dict, dictSize); - } - ddict->dictSize = dictSize; - ddict->entropy.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001); /* cover both little and big endian */ - - /* parse dictionary content */ - FORWARD_IF_ERROR( ZSTD_loadEntropy_intoDDict(ddict, dictContentType) , ""); - - return 0; -} - -ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_customMem customMem) -{ - if ((!customMem.customAlloc) ^ (!customMem.customFree)) return NULL; - - { ZSTD_DDict* const ddict = (ZSTD_DDict*) ZSTD_customMalloc(sizeof(ZSTD_DDict), customMem); - if (ddict == NULL) return NULL; - ddict->cMem = customMem; - { size_t const initResult = ZSTD_initDDict_internal(ddict, - dict, dictSize, - dictLoadMethod, dictContentType); - if (ZSTD_isError(initResult)) { - ZSTD_freeDDict(ddict); - return NULL; - } } - return ddict; - } -} - -/*! ZSTD_createDDict() : -* Create a digested dictionary, to start decompression without startup delay. -* `dict` content is copied inside DDict. -* Consequently, `dict` can be released after `ZSTD_DDict` creation */ -ZSTD_DDict* ZSTD_createDDict(const void* dict, size_t dictSize) -{ - ZSTD_customMem const allocator = { NULL, NULL, NULL }; - return ZSTD_createDDict_advanced(dict, dictSize, ZSTD_dlm_byCopy, ZSTD_dct_auto, allocator); -} - -/*! ZSTD_createDDict_byReference() : - * Create a digested dictionary, to start decompression without startup delay. - * Dictionary content is simply referenced, it will be accessed during decompression. - * Warning : dictBuffer must outlive DDict (DDict must be freed before dictBuffer) */ -ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, size_t dictSize) -{ - ZSTD_customMem const allocator = { NULL, NULL, NULL }; - return ZSTD_createDDict_advanced(dictBuffer, dictSize, ZSTD_dlm_byRef, ZSTD_dct_auto, allocator); -} - - -const ZSTD_DDict* ZSTD_initStaticDDict( - void* sBuffer, size_t sBufferSize, - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType) -{ - size_t const neededSpace = sizeof(ZSTD_DDict) - + (dictLoadMethod == ZSTD_dlm_byRef ? 0 : dictSize); - ZSTD_DDict* const ddict = (ZSTD_DDict*)sBuffer; - assert(sBuffer != NULL); - assert(dict != NULL); - if ((size_t)sBuffer & 7) return NULL; /* 8-aligned */ - if (sBufferSize < neededSpace) return NULL; - if (dictLoadMethod == ZSTD_dlm_byCopy) { - ZSTD_memcpy(ddict+1, dict, dictSize); /* local copy */ - dict = ddict+1; - } - if (ZSTD_isError( ZSTD_initDDict_internal(ddict, - dict, dictSize, - ZSTD_dlm_byRef, dictContentType) )) - return NULL; - return ddict; -} - - -size_t ZSTD_freeDDict(ZSTD_DDict* ddict) -{ - if (ddict==NULL) return 0; /* support free on NULL */ - { ZSTD_customMem const cMem = ddict->cMem; - ZSTD_customFree(ddict->dictBuffer, cMem); - ZSTD_customFree(ddict, cMem); - return 0; - } -} - -/*! ZSTD_estimateDDictSize() : - * Estimate amount of memory that will be needed to create a dictionary for decompression. - * Note : dictionary created by reference using ZSTD_dlm_byRef are smaller */ -size_t ZSTD_estimateDDictSize(size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod) -{ - return sizeof(ZSTD_DDict) + (dictLoadMethod == ZSTD_dlm_byRef ? 0 : dictSize); -} - -size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict) -{ - if (ddict==NULL) return 0; /* support sizeof on NULL */ - return sizeof(*ddict) + (ddict->dictBuffer ? ddict->dictSize : 0) ; -} - -/*! ZSTD_getDictID_fromDDict() : - * Provides the dictID of the dictionary loaded into `ddict`. - * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. - * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ -unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict) -{ - if (ddict==NULL) return 0; - return ZSTD_getDictID_fromDict(ddict->dictContent, ddict->dictSize); -} diff --git a/stage1/zstd/lib/decompress/zstd_ddict.h b/stage1/zstd/lib/decompress/zstd_ddict.h deleted file mode 100644 index bd03268b50..0000000000 --- a/stage1/zstd/lib/decompress/zstd_ddict.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - - -#ifndef ZSTD_DDICT_H -#define ZSTD_DDICT_H - -/*-******************************************************* - * Dependencies - *********************************************************/ -#include "../common/zstd_deps.h" /* size_t */ -#include "../zstd.h" /* ZSTD_DDict, and several public functions */ - - -/*-******************************************************* - * Interface - *********************************************************/ - -/* note: several prototypes are already published in `zstd.h` : - * ZSTD_createDDict() - * ZSTD_createDDict_byReference() - * ZSTD_createDDict_advanced() - * ZSTD_freeDDict() - * ZSTD_initStaticDDict() - * ZSTD_sizeof_DDict() - * ZSTD_estimateDDictSize() - * ZSTD_getDictID_fromDict() - */ - -const void* ZSTD_DDict_dictContent(const ZSTD_DDict* ddict); -size_t ZSTD_DDict_dictSize(const ZSTD_DDict* ddict); - -void ZSTD_copyDDictParameters(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); - - - -#endif /* ZSTD_DDICT_H */ diff --git a/stage1/zstd/lib/decompress/zstd_decompress.c b/stage1/zstd/lib/decompress/zstd_decompress.c deleted file mode 100644 index 0031e98cfb..0000000000 --- a/stage1/zstd/lib/decompress/zstd_decompress.c +++ /dev/null @@ -1,2230 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - - -/* *************************************************************** -* Tuning parameters -*****************************************************************/ -/*! - * HEAPMODE : - * Select how default decompression function ZSTD_decompress() allocates its context, - * on stack (0), or into heap (1, default; requires malloc()). - * Note that functions with explicit context such as ZSTD_decompressDCtx() are unaffected. - */ -#ifndef ZSTD_HEAPMODE -# define ZSTD_HEAPMODE 1 -#endif - -/*! -* LEGACY_SUPPORT : -* if set to 1+, ZSTD_decompress() can decode older formats (v0.1+) -*/ -#ifndef ZSTD_LEGACY_SUPPORT -# define ZSTD_LEGACY_SUPPORT 0 -#endif - -/*! - * MAXWINDOWSIZE_DEFAULT : - * maximum window size accepted by DStream __by default__. - * Frames requiring more memory will be rejected. - * It's possible to set a different limit using ZSTD_DCtx_setMaxWindowSize(). - */ -#ifndef ZSTD_MAXWINDOWSIZE_DEFAULT -# define ZSTD_MAXWINDOWSIZE_DEFAULT (((U32)1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT) + 1) -#endif - -/*! - * NO_FORWARD_PROGRESS_MAX : - * maximum allowed nb of calls to ZSTD_decompressStream() - * without any forward progress - * (defined as: no byte read from input, and no byte flushed to output) - * before triggering an error. - */ -#ifndef ZSTD_NO_FORWARD_PROGRESS_MAX -# define ZSTD_NO_FORWARD_PROGRESS_MAX 16 -#endif - - -/*-******************************************************* -* Dependencies -*********************************************************/ -#include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */ -#include "../common/mem.h" /* low level memory routines */ -#define FSE_STATIC_LINKING_ONLY -#include "../common/fse.h" -#define HUF_STATIC_LINKING_ONLY -#include "../common/huf.h" -#include "../common/xxhash.h" /* XXH64_reset, XXH64_update, XXH64_digest, XXH64 */ -#include "../common/zstd_internal.h" /* blockProperties_t */ -#include "zstd_decompress_internal.h" /* ZSTD_DCtx */ -#include "zstd_ddict.h" /* ZSTD_DDictDictContent */ -#include "zstd_decompress_block.h" /* ZSTD_decompressBlock_internal */ - -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) -# include "../legacy/zstd_legacy.h" -#endif - - - -/************************************* - * Multiple DDicts Hashset internals * - *************************************/ - -#define DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT 4 -#define DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT 3 /* These two constants represent SIZE_MULT/COUNT_MULT load factor without using a float. - * Currently, that means a 0.75 load factor. - * So, if count * COUNT_MULT / size * SIZE_MULT != 0, then we've exceeded - * the load factor of the ddict hash set. - */ - -#define DDICT_HASHSET_TABLE_BASE_SIZE 64 -#define DDICT_HASHSET_RESIZE_FACTOR 2 - -/* Hash function to determine starting position of dict insertion within the table - * Returns an index between [0, hashSet->ddictPtrTableSize] - */ -static size_t ZSTD_DDictHashSet_getIndex(const ZSTD_DDictHashSet* hashSet, U32 dictID) { - const U64 hash = XXH64(&dictID, sizeof(U32), 0); - /* DDict ptr table size is a multiple of 2, use size - 1 as mask to get index within [0, hashSet->ddictPtrTableSize) */ - return hash & (hashSet->ddictPtrTableSize - 1); -} - -/* Adds DDict to a hashset without resizing it. - * If inserting a DDict with a dictID that already exists in the set, replaces the one in the set. - * Returns 0 if successful, or a zstd error code if something went wrong. - */ -static size_t ZSTD_DDictHashSet_emplaceDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict) { - const U32 dictID = ZSTD_getDictID_fromDDict(ddict); - size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID); - const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1; - RETURN_ERROR_IF(hashSet->ddictPtrCount == hashSet->ddictPtrTableSize, GENERIC, "Hash set is full!"); - DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx); - while (hashSet->ddictPtrTable[idx] != NULL) { - /* Replace existing ddict if inserting ddict with same dictID */ - if (ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]) == dictID) { - DEBUGLOG(4, "DictID already exists, replacing rather than adding"); - hashSet->ddictPtrTable[idx] = ddict; - return 0; - } - idx &= idxRangeMask; - idx++; - } - DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx); - hashSet->ddictPtrTable[idx] = ddict; - hashSet->ddictPtrCount++; - return 0; -} - -/* Expands hash table by factor of DDICT_HASHSET_RESIZE_FACTOR and - * rehashes all values, allocates new table, frees old table. - * Returns 0 on success, otherwise a zstd error code. - */ -static size_t ZSTD_DDictHashSet_expand(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) { - size_t newTableSize = hashSet->ddictPtrTableSize * DDICT_HASHSET_RESIZE_FACTOR; - const ZSTD_DDict** newTable = (const ZSTD_DDict**)ZSTD_customCalloc(sizeof(ZSTD_DDict*) * newTableSize, customMem); - const ZSTD_DDict** oldTable = hashSet->ddictPtrTable; - size_t oldTableSize = hashSet->ddictPtrTableSize; - size_t i; - - DEBUGLOG(4, "Expanding DDict hash table! Old size: %zu new size: %zu", oldTableSize, newTableSize); - RETURN_ERROR_IF(!newTable, memory_allocation, "Expanded hashset allocation failed!"); - hashSet->ddictPtrTable = newTable; - hashSet->ddictPtrTableSize = newTableSize; - hashSet->ddictPtrCount = 0; - for (i = 0; i < oldTableSize; ++i) { - if (oldTable[i] != NULL) { - FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, oldTable[i]), ""); - } - } - ZSTD_customFree((void*)oldTable, customMem); - DEBUGLOG(4, "Finished re-hash"); - return 0; -} - -/* Fetches a DDict with the given dictID - * Returns the ZSTD_DDict* with the requested dictID. If it doesn't exist, then returns NULL. - */ -static const ZSTD_DDict* ZSTD_DDictHashSet_getDDict(ZSTD_DDictHashSet* hashSet, U32 dictID) { - size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID); - const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1; - DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx); - for (;;) { - size_t currDictID = ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]); - if (currDictID == dictID || currDictID == 0) { - /* currDictID == 0 implies a NULL ddict entry */ - break; - } else { - idx &= idxRangeMask; /* Goes to start of table when we reach the end */ - idx++; - } - } - DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx); - return hashSet->ddictPtrTable[idx]; -} - -/* Allocates space for and returns a ddict hash set - * The hash set's ZSTD_DDict* table has all values automatically set to NULL to begin with. - * Returns NULL if allocation failed. - */ -static ZSTD_DDictHashSet* ZSTD_createDDictHashSet(ZSTD_customMem customMem) { - ZSTD_DDictHashSet* ret = (ZSTD_DDictHashSet*)ZSTD_customMalloc(sizeof(ZSTD_DDictHashSet), customMem); - DEBUGLOG(4, "Allocating new hash set"); - if (!ret) - return NULL; - ret->ddictPtrTable = (const ZSTD_DDict**)ZSTD_customCalloc(DDICT_HASHSET_TABLE_BASE_SIZE * sizeof(ZSTD_DDict*), customMem); - if (!ret->ddictPtrTable) { - ZSTD_customFree(ret, customMem); - return NULL; - } - ret->ddictPtrTableSize = DDICT_HASHSET_TABLE_BASE_SIZE; - ret->ddictPtrCount = 0; - return ret; -} - -/* Frees the table of ZSTD_DDict* within a hashset, then frees the hashset itself. - * Note: The ZSTD_DDict* within the table are NOT freed. - */ -static void ZSTD_freeDDictHashSet(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) { - DEBUGLOG(4, "Freeing ddict hash set"); - if (hashSet && hashSet->ddictPtrTable) { - ZSTD_customFree((void*)hashSet->ddictPtrTable, customMem); - } - if (hashSet) { - ZSTD_customFree(hashSet, customMem); - } -} - -/* Public function: Adds a DDict into the ZSTD_DDictHashSet, possibly triggering a resize of the hash set. - * Returns 0 on success, or a ZSTD error. - */ -static size_t ZSTD_DDictHashSet_addDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict, ZSTD_customMem customMem) { - DEBUGLOG(4, "Adding dict ID: %u to hashset with - Count: %zu Tablesize: %zu", ZSTD_getDictID_fromDDict(ddict), hashSet->ddictPtrCount, hashSet->ddictPtrTableSize); - if (hashSet->ddictPtrCount * DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT / hashSet->ddictPtrTableSize * DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT != 0) { - FORWARD_IF_ERROR(ZSTD_DDictHashSet_expand(hashSet, customMem), ""); - } - FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, ddict), ""); - return 0; -} - -/*-************************************************************* -* Context management -***************************************************************/ -size_t ZSTD_sizeof_DCtx (const ZSTD_DCtx* dctx) -{ - if (dctx==NULL) return 0; /* support sizeof NULL */ - return sizeof(*dctx) - + ZSTD_sizeof_DDict(dctx->ddictLocal) - + dctx->inBuffSize + dctx->outBuffSize; -} - -size_t ZSTD_estimateDCtxSize(void) { return sizeof(ZSTD_DCtx); } - - -static size_t ZSTD_startingInputLength(ZSTD_format_e format) -{ - size_t const startingInputLength = ZSTD_FRAMEHEADERSIZE_PREFIX(format); - /* only supports formats ZSTD_f_zstd1 and ZSTD_f_zstd1_magicless */ - assert( (format == ZSTD_f_zstd1) || (format == ZSTD_f_zstd1_magicless) ); - return startingInputLength; -} - -static void ZSTD_DCtx_resetParameters(ZSTD_DCtx* dctx) -{ - assert(dctx->streamStage == zdss_init); - dctx->format = ZSTD_f_zstd1; - dctx->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT; - dctx->outBufferMode = ZSTD_bm_buffered; - dctx->forceIgnoreChecksum = ZSTD_d_validateChecksum; - dctx->refMultipleDDicts = ZSTD_rmd_refSingleDDict; -} - -static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx) -{ - dctx->staticSize = 0; - dctx->ddict = NULL; - dctx->ddictLocal = NULL; - dctx->dictEnd = NULL; - dctx->ddictIsCold = 0; - dctx->dictUses = ZSTD_dont_use; - dctx->inBuff = NULL; - dctx->inBuffSize = 0; - dctx->outBuffSize = 0; - dctx->streamStage = zdss_init; -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) - dctx->legacyContext = NULL; - dctx->previousLegacyVersion = 0; -#endif - dctx->noForwardProgress = 0; - dctx->oversizedDuration = 0; -#if DYNAMIC_BMI2 - dctx->bmi2 = ZSTD_cpuSupportsBmi2(); -#endif - dctx->ddictSet = NULL; - ZSTD_DCtx_resetParameters(dctx); -#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION - dctx->dictContentEndForFuzzing = NULL; -#endif -} - -ZSTD_DCtx* ZSTD_initStaticDCtx(void *workspace, size_t workspaceSize) -{ - ZSTD_DCtx* const dctx = (ZSTD_DCtx*) workspace; - - if ((size_t)workspace & 7) return NULL; /* 8-aligned */ - if (workspaceSize < sizeof(ZSTD_DCtx)) return NULL; /* minimum size */ - - ZSTD_initDCtx_internal(dctx); - dctx->staticSize = workspaceSize; - dctx->inBuff = (char*)(dctx+1); - return dctx; -} - -static ZSTD_DCtx* ZSTD_createDCtx_internal(ZSTD_customMem customMem) { - if ((!customMem.customAlloc) ^ (!customMem.customFree)) return NULL; - - { ZSTD_DCtx* const dctx = (ZSTD_DCtx*)ZSTD_customMalloc(sizeof(*dctx), customMem); - if (!dctx) return NULL; - dctx->customMem = customMem; - ZSTD_initDCtx_internal(dctx); - return dctx; - } -} - -ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem) -{ - return ZSTD_createDCtx_internal(customMem); -} - -ZSTD_DCtx* ZSTD_createDCtx(void) -{ - DEBUGLOG(3, "ZSTD_createDCtx"); - return ZSTD_createDCtx_internal(ZSTD_defaultCMem); -} - -static void ZSTD_clearDict(ZSTD_DCtx* dctx) -{ - ZSTD_freeDDict(dctx->ddictLocal); - dctx->ddictLocal = NULL; - dctx->ddict = NULL; - dctx->dictUses = ZSTD_dont_use; -} - -size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx) -{ - if (dctx==NULL) return 0; /* support free on NULL */ - RETURN_ERROR_IF(dctx->staticSize, memory_allocation, "not compatible with static DCtx"); - { ZSTD_customMem const cMem = dctx->customMem; - ZSTD_clearDict(dctx); - ZSTD_customFree(dctx->inBuff, cMem); - dctx->inBuff = NULL; -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1) - if (dctx->legacyContext) - ZSTD_freeLegacyStreamContext(dctx->legacyContext, dctx->previousLegacyVersion); -#endif - if (dctx->ddictSet) { - ZSTD_freeDDictHashSet(dctx->ddictSet, cMem); - dctx->ddictSet = NULL; - } - ZSTD_customFree(dctx, cMem); - return 0; - } -} - -/* no longer useful */ -void ZSTD_copyDCtx(ZSTD_DCtx* dstDCtx, const ZSTD_DCtx* srcDCtx) -{ - size_t const toCopy = (size_t)((char*)(&dstDCtx->inBuff) - (char*)dstDCtx); - ZSTD_memcpy(dstDCtx, srcDCtx, toCopy); /* no need to copy workspace */ -} - -/* Given a dctx with a digested frame params, re-selects the correct ZSTD_DDict based on - * the requested dict ID from the frame. If there exists a reference to the correct ZSTD_DDict, then - * accordingly sets the ddict to be used to decompress the frame. - * - * If no DDict is found, then no action is taken, and the ZSTD_DCtx::ddict remains as-is. - * - * ZSTD_d_refMultipleDDicts must be enabled for this function to be called. - */ -static void ZSTD_DCtx_selectFrameDDict(ZSTD_DCtx* dctx) { - assert(dctx->refMultipleDDicts && dctx->ddictSet); - DEBUGLOG(4, "Adjusting DDict based on requested dict ID from frame"); - if (dctx->ddict) { - const ZSTD_DDict* frameDDict = ZSTD_DDictHashSet_getDDict(dctx->ddictSet, dctx->fParams.dictID); - if (frameDDict) { - DEBUGLOG(4, "DDict found!"); - ZSTD_clearDict(dctx); - dctx->dictID = dctx->fParams.dictID; - dctx->ddict = frameDDict; - dctx->dictUses = ZSTD_use_indefinitely; - } - } -} - - -/*-************************************************************* - * Frame header decoding - ***************************************************************/ - -/*! ZSTD_isFrame() : - * Tells if the content of `buffer` starts with a valid Frame Identifier. - * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0. - * Note 2 : Legacy Frame Identifiers are considered valid only if Legacy Support is enabled. - * Note 3 : Skippable Frame Identifiers are considered valid. */ -unsigned ZSTD_isFrame(const void* buffer, size_t size) -{ - if (size < ZSTD_FRAMEIDSIZE) return 0; - { U32 const magic = MEM_readLE32(buffer); - if (magic == ZSTD_MAGICNUMBER) return 1; - if ((magic & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) return 1; - } -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1) - if (ZSTD_isLegacy(buffer, size)) return 1; -#endif - return 0; -} - -/*! ZSTD_isSkippableFrame() : - * Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame. - * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0. - */ -unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size) -{ - if (size < ZSTD_FRAMEIDSIZE) return 0; - { U32 const magic = MEM_readLE32(buffer); - if ((magic & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) return 1; - } - return 0; -} - -/** ZSTD_frameHeaderSize_internal() : - * srcSize must be large enough to reach header size fields. - * note : only works for formats ZSTD_f_zstd1 and ZSTD_f_zstd1_magicless. - * @return : size of the Frame Header - * or an error code, which can be tested with ZSTD_isError() */ -static size_t ZSTD_frameHeaderSize_internal(const void* src, size_t srcSize, ZSTD_format_e format) -{ - size_t const minInputSize = ZSTD_startingInputLength(format); - RETURN_ERROR_IF(srcSize < minInputSize, srcSize_wrong, ""); - - { BYTE const fhd = ((const BYTE*)src)[minInputSize-1]; - U32 const dictID= fhd & 3; - U32 const singleSegment = (fhd >> 5) & 1; - U32 const fcsId = fhd >> 6; - return minInputSize + !singleSegment - + ZSTD_did_fieldSize[dictID] + ZSTD_fcs_fieldSize[fcsId] - + (singleSegment && !fcsId); - } -} - -/** ZSTD_frameHeaderSize() : - * srcSize must be >= ZSTD_frameHeaderSize_prefix. - * @return : size of the Frame Header, - * or an error code (if srcSize is too small) */ -size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize) -{ - return ZSTD_frameHeaderSize_internal(src, srcSize, ZSTD_f_zstd1); -} - - -/** ZSTD_getFrameHeader_advanced() : - * decode Frame Header, or require larger `srcSize`. - * note : only works for formats ZSTD_f_zstd1 and ZSTD_f_zstd1_magicless - * @return : 0, `zfhPtr` is correctly filled, - * >0, `srcSize` is too small, value is wanted `srcSize` amount, - * or an error code, which can be tested using ZSTD_isError() */ -size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format) -{ - const BYTE* ip = (const BYTE*)src; - size_t const minInputSize = ZSTD_startingInputLength(format); - - ZSTD_memset(zfhPtr, 0, sizeof(*zfhPtr)); /* not strictly necessary, but static analyzer do not understand that zfhPtr is only going to be read only if return value is zero, since they are 2 different signals */ - if (srcSize < minInputSize) return minInputSize; - RETURN_ERROR_IF(src==NULL, GENERIC, "invalid parameter"); - - if ( (format != ZSTD_f_zstd1_magicless) - && (MEM_readLE32(src) != ZSTD_MAGICNUMBER) ) { - if ((MEM_readLE32(src) & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) { - /* skippable frame */ - if (srcSize < ZSTD_SKIPPABLEHEADERSIZE) - return ZSTD_SKIPPABLEHEADERSIZE; /* magic number + frame length */ - ZSTD_memset(zfhPtr, 0, sizeof(*zfhPtr)); - zfhPtr->frameContentSize = MEM_readLE32((const char *)src + ZSTD_FRAMEIDSIZE); - zfhPtr->frameType = ZSTD_skippableFrame; - return 0; - } - RETURN_ERROR(prefix_unknown, ""); - } - - /* ensure there is enough `srcSize` to fully read/decode frame header */ - { size_t const fhsize = ZSTD_frameHeaderSize_internal(src, srcSize, format); - if (srcSize < fhsize) return fhsize; - zfhPtr->headerSize = (U32)fhsize; - } - - { BYTE const fhdByte = ip[minInputSize-1]; - size_t pos = minInputSize; - U32 const dictIDSizeCode = fhdByte&3; - U32 const checksumFlag = (fhdByte>>2)&1; - U32 const singleSegment = (fhdByte>>5)&1; - U32 const fcsID = fhdByte>>6; - U64 windowSize = 0; - U32 dictID = 0; - U64 frameContentSize = ZSTD_CONTENTSIZE_UNKNOWN; - RETURN_ERROR_IF((fhdByte & 0x08) != 0, frameParameter_unsupported, - "reserved bits, must be zero"); - - if (!singleSegment) { - BYTE const wlByte = ip[pos++]; - U32 const windowLog = (wlByte >> 3) + ZSTD_WINDOWLOG_ABSOLUTEMIN; - RETURN_ERROR_IF(windowLog > ZSTD_WINDOWLOG_MAX, frameParameter_windowTooLarge, ""); - windowSize = (1ULL << windowLog); - windowSize += (windowSize >> 3) * (wlByte&7); - } - switch(dictIDSizeCode) - { - default: - assert(0); /* impossible */ - ZSTD_FALLTHROUGH; - case 0 : break; - case 1 : dictID = ip[pos]; pos++; break; - case 2 : dictID = MEM_readLE16(ip+pos); pos+=2; break; - case 3 : dictID = MEM_readLE32(ip+pos); pos+=4; break; - } - switch(fcsID) - { - default: - assert(0); /* impossible */ - ZSTD_FALLTHROUGH; - case 0 : if (singleSegment) frameContentSize = ip[pos]; break; - case 1 : frameContentSize = MEM_readLE16(ip+pos)+256; break; - case 2 : frameContentSize = MEM_readLE32(ip+pos); break; - case 3 : frameContentSize = MEM_readLE64(ip+pos); break; - } - if (singleSegment) windowSize = frameContentSize; - - zfhPtr->frameType = ZSTD_frame; - zfhPtr->frameContentSize = frameContentSize; - zfhPtr->windowSize = windowSize; - zfhPtr->blockSizeMax = (unsigned) MIN(windowSize, ZSTD_BLOCKSIZE_MAX); - zfhPtr->dictID = dictID; - zfhPtr->checksumFlag = checksumFlag; - } - return 0; -} - -/** ZSTD_getFrameHeader() : - * decode Frame Header, or require larger `srcSize`. - * note : this function does not consume input, it only reads it. - * @return : 0, `zfhPtr` is correctly filled, - * >0, `srcSize` is too small, value is wanted `srcSize` amount, - * or an error code, which can be tested using ZSTD_isError() */ -size_t ZSTD_getFrameHeader(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize) -{ - return ZSTD_getFrameHeader_advanced(zfhPtr, src, srcSize, ZSTD_f_zstd1); -} - -/** ZSTD_getFrameContentSize() : - * compatible with legacy mode - * @return : decompressed size of the single frame pointed to be `src` if known, otherwise - * - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined - * - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */ -unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize) -{ -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1) - if (ZSTD_isLegacy(src, srcSize)) { - unsigned long long const ret = ZSTD_getDecompressedSize_legacy(src, srcSize); - return ret == 0 ? ZSTD_CONTENTSIZE_UNKNOWN : ret; - } -#endif - { ZSTD_frameHeader zfh; - if (ZSTD_getFrameHeader(&zfh, src, srcSize) != 0) - return ZSTD_CONTENTSIZE_ERROR; - if (zfh.frameType == ZSTD_skippableFrame) { - return 0; - } else { - return zfh.frameContentSize; - } } -} - -static size_t readSkippableFrameSize(void const* src, size_t srcSize) -{ - size_t const skippableHeaderSize = ZSTD_SKIPPABLEHEADERSIZE; - U32 sizeU32; - - RETURN_ERROR_IF(srcSize < ZSTD_SKIPPABLEHEADERSIZE, srcSize_wrong, ""); - - sizeU32 = MEM_readLE32((BYTE const*)src + ZSTD_FRAMEIDSIZE); - RETURN_ERROR_IF((U32)(sizeU32 + ZSTD_SKIPPABLEHEADERSIZE) < sizeU32, - frameParameter_unsupported, ""); - { - size_t const skippableSize = skippableHeaderSize + sizeU32; - RETURN_ERROR_IF(skippableSize > srcSize, srcSize_wrong, ""); - return skippableSize; - } -} - -/*! ZSTD_readSkippableFrame() : - * Retrieves a zstd skippable frame containing data given by src, and writes it to dst buffer. - * - * The parameter magicVariant will receive the magicVariant that was supplied when the frame was written, - * i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START. This can be NULL if the caller is not interested - * in the magicVariant. - * - * Returns an error if destination buffer is not large enough, or if the frame is not skippable. - * - * @return : number of bytes written or a ZSTD error. - */ -ZSTDLIB_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, unsigned* magicVariant, - const void* src, size_t srcSize) -{ - U32 const magicNumber = MEM_readLE32(src); - size_t skippableFrameSize = readSkippableFrameSize(src, srcSize); - size_t skippableContentSize = skippableFrameSize - ZSTD_SKIPPABLEHEADERSIZE; - - /* check input validity */ - RETURN_ERROR_IF(!ZSTD_isSkippableFrame(src, srcSize), frameParameter_unsupported, ""); - RETURN_ERROR_IF(skippableFrameSize < ZSTD_SKIPPABLEHEADERSIZE || skippableFrameSize > srcSize, srcSize_wrong, ""); - RETURN_ERROR_IF(skippableContentSize > dstCapacity, dstSize_tooSmall, ""); - - /* deliver payload */ - if (skippableContentSize > 0 && dst != NULL) - ZSTD_memcpy(dst, (const BYTE *)src + ZSTD_SKIPPABLEHEADERSIZE, skippableContentSize); - if (magicVariant != NULL) - *magicVariant = magicNumber - ZSTD_MAGIC_SKIPPABLE_START; - return skippableContentSize; -} - -/** ZSTD_findDecompressedSize() : - * compatible with legacy mode - * `srcSize` must be the exact length of some number of ZSTD compressed and/or - * skippable frames - * @return : decompressed size of the frames contained */ -unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize) -{ - unsigned long long totalDstSize = 0; - - while (srcSize >= ZSTD_startingInputLength(ZSTD_f_zstd1)) { - U32 const magicNumber = MEM_readLE32(src); - - if ((magicNumber & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) { - size_t const skippableSize = readSkippableFrameSize(src, srcSize); - if (ZSTD_isError(skippableSize)) { - return ZSTD_CONTENTSIZE_ERROR; - } - assert(skippableSize <= srcSize); - - src = (const BYTE *)src + skippableSize; - srcSize -= skippableSize; - continue; - } - - { unsigned long long const ret = ZSTD_getFrameContentSize(src, srcSize); - if (ret >= ZSTD_CONTENTSIZE_ERROR) return ret; - - /* check for overflow */ - if (totalDstSize + ret < totalDstSize) return ZSTD_CONTENTSIZE_ERROR; - totalDstSize += ret; - } - { size_t const frameSrcSize = ZSTD_findFrameCompressedSize(src, srcSize); - if (ZSTD_isError(frameSrcSize)) { - return ZSTD_CONTENTSIZE_ERROR; - } - - src = (const BYTE *)src + frameSrcSize; - srcSize -= frameSrcSize; - } - } /* while (srcSize >= ZSTD_frameHeaderSize_prefix) */ - - if (srcSize) return ZSTD_CONTENTSIZE_ERROR; - - return totalDstSize; -} - -/** ZSTD_getDecompressedSize() : - * compatible with legacy mode - * @return : decompressed size if known, 0 otherwise - note : 0 can mean any of the following : - - frame content is empty - - decompressed size field is not present in frame header - - frame header unknown / not supported - - frame header not complete (`srcSize` too small) */ -unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize) -{ - unsigned long long const ret = ZSTD_getFrameContentSize(src, srcSize); - ZSTD_STATIC_ASSERT(ZSTD_CONTENTSIZE_ERROR < ZSTD_CONTENTSIZE_UNKNOWN); - return (ret >= ZSTD_CONTENTSIZE_ERROR) ? 0 : ret; -} - - -/** ZSTD_decodeFrameHeader() : - * `headerSize` must be the size provided by ZSTD_frameHeaderSize(). - * If multiple DDict references are enabled, also will choose the correct DDict to use. - * @return : 0 if success, or an error code, which can be tested using ZSTD_isError() */ -static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t headerSize) -{ - size_t const result = ZSTD_getFrameHeader_advanced(&(dctx->fParams), src, headerSize, dctx->format); - if (ZSTD_isError(result)) return result; /* invalid header */ - RETURN_ERROR_IF(result>0, srcSize_wrong, "headerSize too small"); - - /* Reference DDict requested by frame if dctx references multiple ddicts */ - if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts && dctx->ddictSet) { - ZSTD_DCtx_selectFrameDDict(dctx); - } - -#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION - /* Skip the dictID check in fuzzing mode, because it makes the search - * harder. - */ - RETURN_ERROR_IF(dctx->fParams.dictID && (dctx->dictID != dctx->fParams.dictID), - dictionary_wrong, ""); -#endif - dctx->validateChecksum = (dctx->fParams.checksumFlag && !dctx->forceIgnoreChecksum) ? 1 : 0; - if (dctx->validateChecksum) XXH64_reset(&dctx->xxhState, 0); - dctx->processedCSize += headerSize; - return 0; -} - -static ZSTD_frameSizeInfo ZSTD_errorFrameSizeInfo(size_t ret) -{ - ZSTD_frameSizeInfo frameSizeInfo; - frameSizeInfo.compressedSize = ret; - frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR; - return frameSizeInfo; -} - -static ZSTD_frameSizeInfo ZSTD_findFrameSizeInfo(const void* src, size_t srcSize) -{ - ZSTD_frameSizeInfo frameSizeInfo; - ZSTD_memset(&frameSizeInfo, 0, sizeof(ZSTD_frameSizeInfo)); - -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1) - if (ZSTD_isLegacy(src, srcSize)) - return ZSTD_findFrameSizeInfoLegacy(src, srcSize); -#endif - - if ((srcSize >= ZSTD_SKIPPABLEHEADERSIZE) - && (MEM_readLE32(src) & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) { - frameSizeInfo.compressedSize = readSkippableFrameSize(src, srcSize); - assert(ZSTD_isError(frameSizeInfo.compressedSize) || - frameSizeInfo.compressedSize <= srcSize); - return frameSizeInfo; - } else { - const BYTE* ip = (const BYTE*)src; - const BYTE* const ipstart = ip; - size_t remainingSize = srcSize; - size_t nbBlocks = 0; - ZSTD_frameHeader zfh; - - /* Extract Frame Header */ - { size_t const ret = ZSTD_getFrameHeader(&zfh, src, srcSize); - if (ZSTD_isError(ret)) - return ZSTD_errorFrameSizeInfo(ret); - if (ret > 0) - return ZSTD_errorFrameSizeInfo(ERROR(srcSize_wrong)); - } - - ip += zfh.headerSize; - remainingSize -= zfh.headerSize; - - /* Iterate over each block */ - while (1) { - blockProperties_t blockProperties; - size_t const cBlockSize = ZSTD_getcBlockSize(ip, remainingSize, &blockProperties); - if (ZSTD_isError(cBlockSize)) - return ZSTD_errorFrameSizeInfo(cBlockSize); - - if (ZSTD_blockHeaderSize + cBlockSize > remainingSize) - return ZSTD_errorFrameSizeInfo(ERROR(srcSize_wrong)); - - ip += ZSTD_blockHeaderSize + cBlockSize; - remainingSize -= ZSTD_blockHeaderSize + cBlockSize; - nbBlocks++; - - if (blockProperties.lastBlock) break; - } - - /* Final frame content checksum */ - if (zfh.checksumFlag) { - if (remainingSize < 4) - return ZSTD_errorFrameSizeInfo(ERROR(srcSize_wrong)); - ip += 4; - } - - frameSizeInfo.compressedSize = (size_t)(ip - ipstart); - frameSizeInfo.decompressedBound = (zfh.frameContentSize != ZSTD_CONTENTSIZE_UNKNOWN) - ? zfh.frameContentSize - : nbBlocks * zfh.blockSizeMax; - return frameSizeInfo; - } -} - -/** ZSTD_findFrameCompressedSize() : - * compatible with legacy mode - * `src` must point to the start of a ZSTD frame, ZSTD legacy frame, or skippable frame - * `srcSize` must be at least as large as the frame contained - * @return : the compressed size of the frame starting at `src` */ -size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize) -{ - ZSTD_frameSizeInfo const frameSizeInfo = ZSTD_findFrameSizeInfo(src, srcSize); - return frameSizeInfo.compressedSize; -} - -/** ZSTD_decompressBound() : - * compatible with legacy mode - * `src` must point to the start of a ZSTD frame or a skippeable frame - * `srcSize` must be at least as large as the frame contained - * @return : the maximum decompressed size of the compressed source - */ -unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize) -{ - unsigned long long bound = 0; - /* Iterate over each frame */ - while (srcSize > 0) { - ZSTD_frameSizeInfo const frameSizeInfo = ZSTD_findFrameSizeInfo(src, srcSize); - size_t const compressedSize = frameSizeInfo.compressedSize; - unsigned long long const decompressedBound = frameSizeInfo.decompressedBound; - if (ZSTD_isError(compressedSize) || decompressedBound == ZSTD_CONTENTSIZE_ERROR) - return ZSTD_CONTENTSIZE_ERROR; - assert(srcSize >= compressedSize); - src = (const BYTE*)src + compressedSize; - srcSize -= compressedSize; - bound += decompressedBound; - } - return bound; -} - - -/*-************************************************************* - * Frame decoding - ***************************************************************/ - -/** ZSTD_insertBlock() : - * insert `src` block into `dctx` history. Useful to track uncompressed blocks. */ -size_t ZSTD_insertBlock(ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize) -{ - DEBUGLOG(5, "ZSTD_insertBlock: %u bytes", (unsigned)blockSize); - ZSTD_checkContinuity(dctx, blockStart, blockSize); - dctx->previousDstEnd = (const char*)blockStart + blockSize; - return blockSize; -} - - -static size_t ZSTD_copyRawBlock(void* dst, size_t dstCapacity, - const void* src, size_t srcSize) -{ - DEBUGLOG(5, "ZSTD_copyRawBlock"); - RETURN_ERROR_IF(srcSize > dstCapacity, dstSize_tooSmall, ""); - if (dst == NULL) { - if (srcSize == 0) return 0; - RETURN_ERROR(dstBuffer_null, ""); - } - ZSTD_memcpy(dst, src, srcSize); - return srcSize; -} - -static size_t ZSTD_setRleBlock(void* dst, size_t dstCapacity, - BYTE b, - size_t regenSize) -{ - RETURN_ERROR_IF(regenSize > dstCapacity, dstSize_tooSmall, ""); - if (dst == NULL) { - if (regenSize == 0) return 0; - RETURN_ERROR(dstBuffer_null, ""); - } - ZSTD_memset(dst, b, regenSize); - return regenSize; -} - -static void ZSTD_DCtx_trace_end(ZSTD_DCtx const* dctx, U64 uncompressedSize, U64 compressedSize, unsigned streaming) -{ -#if ZSTD_TRACE - if (dctx->traceCtx && ZSTD_trace_decompress_end != NULL) { - ZSTD_Trace trace; - ZSTD_memset(&trace, 0, sizeof(trace)); - trace.version = ZSTD_VERSION_NUMBER; - trace.streaming = streaming; - if (dctx->ddict) { - trace.dictionaryID = ZSTD_getDictID_fromDDict(dctx->ddict); - trace.dictionarySize = ZSTD_DDict_dictSize(dctx->ddict); - trace.dictionaryIsCold = dctx->ddictIsCold; - } - trace.uncompressedSize = (size_t)uncompressedSize; - trace.compressedSize = (size_t)compressedSize; - trace.dctx = dctx; - ZSTD_trace_decompress_end(dctx->traceCtx, &trace); - } -#else - (void)dctx; - (void)uncompressedSize; - (void)compressedSize; - (void)streaming; -#endif -} - - -/*! ZSTD_decompressFrame() : - * @dctx must be properly initialized - * will update *srcPtr and *srcSizePtr, - * to make *srcPtr progress by one frame. */ -static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void** srcPtr, size_t *srcSizePtr) -{ - const BYTE* const istart = (const BYTE*)(*srcPtr); - const BYTE* ip = istart; - BYTE* const ostart = (BYTE*)dst; - BYTE* const oend = dstCapacity != 0 ? ostart + dstCapacity : ostart; - BYTE* op = ostart; - size_t remainingSrcSize = *srcSizePtr; - - DEBUGLOG(4, "ZSTD_decompressFrame (srcSize:%i)", (int)*srcSizePtr); - - /* check */ - RETURN_ERROR_IF( - remainingSrcSize < ZSTD_FRAMEHEADERSIZE_MIN(dctx->format)+ZSTD_blockHeaderSize, - srcSize_wrong, ""); - - /* Frame Header */ - { size_t const frameHeaderSize = ZSTD_frameHeaderSize_internal( - ip, ZSTD_FRAMEHEADERSIZE_PREFIX(dctx->format), dctx->format); - if (ZSTD_isError(frameHeaderSize)) return frameHeaderSize; - RETURN_ERROR_IF(remainingSrcSize < frameHeaderSize+ZSTD_blockHeaderSize, - srcSize_wrong, ""); - FORWARD_IF_ERROR( ZSTD_decodeFrameHeader(dctx, ip, frameHeaderSize) , ""); - ip += frameHeaderSize; remainingSrcSize -= frameHeaderSize; - } - - /* Loop on each block */ - while (1) { - size_t decodedSize; - blockProperties_t blockProperties; - size_t const cBlockSize = ZSTD_getcBlockSize(ip, remainingSrcSize, &blockProperties); - if (ZSTD_isError(cBlockSize)) return cBlockSize; - - ip += ZSTD_blockHeaderSize; - remainingSrcSize -= ZSTD_blockHeaderSize; - RETURN_ERROR_IF(cBlockSize > remainingSrcSize, srcSize_wrong, ""); - - switch(blockProperties.blockType) - { - case bt_compressed: - decodedSize = ZSTD_decompressBlock_internal(dctx, op, (size_t)(oend-op), ip, cBlockSize, /* frame */ 1, not_streaming); - break; - case bt_raw : - decodedSize = ZSTD_copyRawBlock(op, (size_t)(oend-op), ip, cBlockSize); - break; - case bt_rle : - decodedSize = ZSTD_setRleBlock(op, (size_t)(oend-op), *ip, blockProperties.origSize); - break; - case bt_reserved : - default: - RETURN_ERROR(corruption_detected, "invalid block type"); - } - - if (ZSTD_isError(decodedSize)) return decodedSize; - if (dctx->validateChecksum) - XXH64_update(&dctx->xxhState, op, decodedSize); - if (decodedSize != 0) - op += decodedSize; - assert(ip != NULL); - ip += cBlockSize; - remainingSrcSize -= cBlockSize; - if (blockProperties.lastBlock) break; - } - - if (dctx->fParams.frameContentSize != ZSTD_CONTENTSIZE_UNKNOWN) { - RETURN_ERROR_IF((U64)(op-ostart) != dctx->fParams.frameContentSize, - corruption_detected, ""); - } - if (dctx->fParams.checksumFlag) { /* Frame content checksum verification */ - RETURN_ERROR_IF(remainingSrcSize<4, checksum_wrong, ""); - if (!dctx->forceIgnoreChecksum) { - U32 const checkCalc = (U32)XXH64_digest(&dctx->xxhState); - U32 checkRead; - checkRead = MEM_readLE32(ip); - RETURN_ERROR_IF(checkRead != checkCalc, checksum_wrong, ""); - } - ip += 4; - remainingSrcSize -= 4; - } - ZSTD_DCtx_trace_end(dctx, (U64)(op-ostart), (U64)(ip-istart), /* streaming */ 0); - /* Allow caller to get size read */ - *srcPtr = ip; - *srcSizePtr = remainingSrcSize; - return (size_t)(op-ostart); -} - -static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict, size_t dictSize, - const ZSTD_DDict* ddict) -{ - void* const dststart = dst; - int moreThan1Frame = 0; - - DEBUGLOG(5, "ZSTD_decompressMultiFrame"); - assert(dict==NULL || ddict==NULL); /* either dict or ddict set, not both */ - - if (ddict) { - dict = ZSTD_DDict_dictContent(ddict); - dictSize = ZSTD_DDict_dictSize(ddict); - } - - while (srcSize >= ZSTD_startingInputLength(dctx->format)) { - -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1) - if (ZSTD_isLegacy(src, srcSize)) { - size_t decodedSize; - size_t const frameSize = ZSTD_findFrameCompressedSizeLegacy(src, srcSize); - if (ZSTD_isError(frameSize)) return frameSize; - RETURN_ERROR_IF(dctx->staticSize, memory_allocation, - "legacy support is not compatible with static dctx"); - - decodedSize = ZSTD_decompressLegacy(dst, dstCapacity, src, frameSize, dict, dictSize); - if (ZSTD_isError(decodedSize)) return decodedSize; - - assert(decodedSize <= dstCapacity); - dst = (BYTE*)dst + decodedSize; - dstCapacity -= decodedSize; - - src = (const BYTE*)src + frameSize; - srcSize -= frameSize; - - continue; - } -#endif - - { U32 const magicNumber = MEM_readLE32(src); - DEBUGLOG(4, "reading magic number %08X (expecting %08X)", - (unsigned)magicNumber, ZSTD_MAGICNUMBER); - if ((magicNumber & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) { - size_t const skippableSize = readSkippableFrameSize(src, srcSize); - FORWARD_IF_ERROR(skippableSize, "readSkippableFrameSize failed"); - assert(skippableSize <= srcSize); - - src = (const BYTE *)src + skippableSize; - srcSize -= skippableSize; - continue; - } } - - if (ddict) { - /* we were called from ZSTD_decompress_usingDDict */ - FORWARD_IF_ERROR(ZSTD_decompressBegin_usingDDict(dctx, ddict), ""); - } else { - /* this will initialize correctly with no dict if dict == NULL, so - * use this in all cases but ddict */ - FORWARD_IF_ERROR(ZSTD_decompressBegin_usingDict(dctx, dict, dictSize), ""); - } - ZSTD_checkContinuity(dctx, dst, dstCapacity); - - { const size_t res = ZSTD_decompressFrame(dctx, dst, dstCapacity, - &src, &srcSize); - RETURN_ERROR_IF( - (ZSTD_getErrorCode(res) == ZSTD_error_prefix_unknown) - && (moreThan1Frame==1), - srcSize_wrong, - "At least one frame successfully completed, " - "but following bytes are garbage: " - "it's more likely to be a srcSize error, " - "specifying more input bytes than size of frame(s). " - "Note: one could be unlucky, it might be a corruption error instead, " - "happening right at the place where we expect zstd magic bytes. " - "But this is _much_ less likely than a srcSize field error."); - if (ZSTD_isError(res)) return res; - assert(res <= dstCapacity); - if (res != 0) - dst = (BYTE*)dst + res; - dstCapacity -= res; - } - moreThan1Frame = 1; - } /* while (srcSize >= ZSTD_frameHeaderSize_prefix) */ - - RETURN_ERROR_IF(srcSize, srcSize_wrong, "input not entirely consumed"); - - return (size_t)((BYTE*)dst - (BYTE*)dststart); -} - -size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict, size_t dictSize) -{ - return ZSTD_decompressMultiFrame(dctx, dst, dstCapacity, src, srcSize, dict, dictSize, NULL); -} - - -static ZSTD_DDict const* ZSTD_getDDict(ZSTD_DCtx* dctx) -{ - switch (dctx->dictUses) { - default: - assert(0 /* Impossible */); - ZSTD_FALLTHROUGH; - case ZSTD_dont_use: - ZSTD_clearDict(dctx); - return NULL; - case ZSTD_use_indefinitely: - return dctx->ddict; - case ZSTD_use_once: - dctx->dictUses = ZSTD_dont_use; - return dctx->ddict; - } -} - -size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize) -{ - return ZSTD_decompress_usingDDict(dctx, dst, dstCapacity, src, srcSize, ZSTD_getDDict(dctx)); -} - - -size_t ZSTD_decompress(void* dst, size_t dstCapacity, const void* src, size_t srcSize) -{ -#if defined(ZSTD_HEAPMODE) && (ZSTD_HEAPMODE>=1) - size_t regenSize; - ZSTD_DCtx* const dctx = ZSTD_createDCtx_internal(ZSTD_defaultCMem); - RETURN_ERROR_IF(dctx==NULL, memory_allocation, "NULL pointer!"); - regenSize = ZSTD_decompressDCtx(dctx, dst, dstCapacity, src, srcSize); - ZSTD_freeDCtx(dctx); - return regenSize; -#else /* stack mode */ - ZSTD_DCtx dctx; - ZSTD_initDCtx_internal(&dctx); - return ZSTD_decompressDCtx(&dctx, dst, dstCapacity, src, srcSize); -#endif -} - - -/*-************************************** -* Advanced Streaming Decompression API -* Bufferless and synchronous -****************************************/ -size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx* dctx) { return dctx->expected; } - -/** - * Similar to ZSTD_nextSrcSizeToDecompress(), but when when a block input can be streamed, - * we allow taking a partial block as the input. Currently only raw uncompressed blocks can - * be streamed. - * - * For blocks that can be streamed, this allows us to reduce the latency until we produce - * output, and avoid copying the input. - * - * @param inputSize - The total amount of input that the caller currently has. - */ -static size_t ZSTD_nextSrcSizeToDecompressWithInputSize(ZSTD_DCtx* dctx, size_t inputSize) { - if (!(dctx->stage == ZSTDds_decompressBlock || dctx->stage == ZSTDds_decompressLastBlock)) - return dctx->expected; - if (dctx->bType != bt_raw) - return dctx->expected; - return BOUNDED(1, inputSize, dctx->expected); -} - -ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) { - switch(dctx->stage) - { - default: /* should not happen */ - assert(0); - ZSTD_FALLTHROUGH; - case ZSTDds_getFrameHeaderSize: - ZSTD_FALLTHROUGH; - case ZSTDds_decodeFrameHeader: - return ZSTDnit_frameHeader; - case ZSTDds_decodeBlockHeader: - return ZSTDnit_blockHeader; - case ZSTDds_decompressBlock: - return ZSTDnit_block; - case ZSTDds_decompressLastBlock: - return ZSTDnit_lastBlock; - case ZSTDds_checkChecksum: - return ZSTDnit_checksum; - case ZSTDds_decodeSkippableHeader: - ZSTD_FALLTHROUGH; - case ZSTDds_skipFrame: - return ZSTDnit_skippableFrame; - } -} - -static int ZSTD_isSkipFrame(ZSTD_DCtx* dctx) { return dctx->stage == ZSTDds_skipFrame; } - -/** ZSTD_decompressContinue() : - * srcSize : must be the exact nb of bytes expected (see ZSTD_nextSrcSizeToDecompress()) - * @return : nb of bytes generated into `dst` (necessarily <= `dstCapacity) - * or an error code, which can be tested using ZSTD_isError() */ -size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize) -{ - DEBUGLOG(5, "ZSTD_decompressContinue (srcSize:%u)", (unsigned)srcSize); - /* Sanity check */ - RETURN_ERROR_IF(srcSize != ZSTD_nextSrcSizeToDecompressWithInputSize(dctx, srcSize), srcSize_wrong, "not allowed"); - ZSTD_checkContinuity(dctx, dst, dstCapacity); - - dctx->processedCSize += srcSize; - - switch (dctx->stage) - { - case ZSTDds_getFrameHeaderSize : - assert(src != NULL); - if (dctx->format == ZSTD_f_zstd1) { /* allows header */ - assert(srcSize >= ZSTD_FRAMEIDSIZE); /* to read skippable magic number */ - if ((MEM_readLE32(src) & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) { /* skippable frame */ - ZSTD_memcpy(dctx->headerBuffer, src, srcSize); - dctx->expected = ZSTD_SKIPPABLEHEADERSIZE - srcSize; /* remaining to load to get full skippable frame header */ - dctx->stage = ZSTDds_decodeSkippableHeader; - return 0; - } } - dctx->headerSize = ZSTD_frameHeaderSize_internal(src, srcSize, dctx->format); - if (ZSTD_isError(dctx->headerSize)) return dctx->headerSize; - ZSTD_memcpy(dctx->headerBuffer, src, srcSize); - dctx->expected = dctx->headerSize - srcSize; - dctx->stage = ZSTDds_decodeFrameHeader; - return 0; - - case ZSTDds_decodeFrameHeader: - assert(src != NULL); - ZSTD_memcpy(dctx->headerBuffer + (dctx->headerSize - srcSize), src, srcSize); - FORWARD_IF_ERROR(ZSTD_decodeFrameHeader(dctx, dctx->headerBuffer, dctx->headerSize), ""); - dctx->expected = ZSTD_blockHeaderSize; - dctx->stage = ZSTDds_decodeBlockHeader; - return 0; - - case ZSTDds_decodeBlockHeader: - { blockProperties_t bp; - size_t const cBlockSize = ZSTD_getcBlockSize(src, ZSTD_blockHeaderSize, &bp); - if (ZSTD_isError(cBlockSize)) return cBlockSize; - RETURN_ERROR_IF(cBlockSize > dctx->fParams.blockSizeMax, corruption_detected, "Block Size Exceeds Maximum"); - dctx->expected = cBlockSize; - dctx->bType = bp.blockType; - dctx->rleSize = bp.origSize; - if (cBlockSize) { - dctx->stage = bp.lastBlock ? ZSTDds_decompressLastBlock : ZSTDds_decompressBlock; - return 0; - } - /* empty block */ - if (bp.lastBlock) { - if (dctx->fParams.checksumFlag) { - dctx->expected = 4; - dctx->stage = ZSTDds_checkChecksum; - } else { - dctx->expected = 0; /* end of frame */ - dctx->stage = ZSTDds_getFrameHeaderSize; - } - } else { - dctx->expected = ZSTD_blockHeaderSize; /* jump to next header */ - dctx->stage = ZSTDds_decodeBlockHeader; - } - return 0; - } - - case ZSTDds_decompressLastBlock: - case ZSTDds_decompressBlock: - DEBUGLOG(5, "ZSTD_decompressContinue: case ZSTDds_decompressBlock"); - { size_t rSize; - switch(dctx->bType) - { - case bt_compressed: - DEBUGLOG(5, "ZSTD_decompressContinue: case bt_compressed"); - rSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 1, is_streaming); - dctx->expected = 0; /* Streaming not supported */ - break; - case bt_raw : - assert(srcSize <= dctx->expected); - rSize = ZSTD_copyRawBlock(dst, dstCapacity, src, srcSize); - FORWARD_IF_ERROR(rSize, "ZSTD_copyRawBlock failed"); - assert(rSize == srcSize); - dctx->expected -= rSize; - break; - case bt_rle : - rSize = ZSTD_setRleBlock(dst, dstCapacity, *(const BYTE*)src, dctx->rleSize); - dctx->expected = 0; /* Streaming not supported */ - break; - case bt_reserved : /* should never happen */ - default: - RETURN_ERROR(corruption_detected, "invalid block type"); - } - FORWARD_IF_ERROR(rSize, ""); - RETURN_ERROR_IF(rSize > dctx->fParams.blockSizeMax, corruption_detected, "Decompressed Block Size Exceeds Maximum"); - DEBUGLOG(5, "ZSTD_decompressContinue: decoded size from block : %u", (unsigned)rSize); - dctx->decodedSize += rSize; - if (dctx->validateChecksum) XXH64_update(&dctx->xxhState, dst, rSize); - dctx->previousDstEnd = (char*)dst + rSize; - - /* Stay on the same stage until we are finished streaming the block. */ - if (dctx->expected > 0) { - return rSize; - } - - if (dctx->stage == ZSTDds_decompressLastBlock) { /* end of frame */ - DEBUGLOG(4, "ZSTD_decompressContinue: decoded size from frame : %u", (unsigned)dctx->decodedSize); - RETURN_ERROR_IF( - dctx->fParams.frameContentSize != ZSTD_CONTENTSIZE_UNKNOWN - && dctx->decodedSize != dctx->fParams.frameContentSize, - corruption_detected, ""); - if (dctx->fParams.checksumFlag) { /* another round for frame checksum */ - dctx->expected = 4; - dctx->stage = ZSTDds_checkChecksum; - } else { - ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1); - dctx->expected = 0; /* ends here */ - dctx->stage = ZSTDds_getFrameHeaderSize; - } - } else { - dctx->stage = ZSTDds_decodeBlockHeader; - dctx->expected = ZSTD_blockHeaderSize; - } - return rSize; - } - - case ZSTDds_checkChecksum: - assert(srcSize == 4); /* guaranteed by dctx->expected */ - { - if (dctx->validateChecksum) { - U32 const h32 = (U32)XXH64_digest(&dctx->xxhState); - U32 const check32 = MEM_readLE32(src); - DEBUGLOG(4, "ZSTD_decompressContinue: checksum : calculated %08X :: %08X read", (unsigned)h32, (unsigned)check32); - RETURN_ERROR_IF(check32 != h32, checksum_wrong, ""); - } - ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1); - dctx->expected = 0; - dctx->stage = ZSTDds_getFrameHeaderSize; - return 0; - } - - case ZSTDds_decodeSkippableHeader: - assert(src != NULL); - assert(srcSize <= ZSTD_SKIPPABLEHEADERSIZE); - ZSTD_memcpy(dctx->headerBuffer + (ZSTD_SKIPPABLEHEADERSIZE - srcSize), src, srcSize); /* complete skippable header */ - dctx->expected = MEM_readLE32(dctx->headerBuffer + ZSTD_FRAMEIDSIZE); /* note : dctx->expected can grow seriously large, beyond local buffer size */ - dctx->stage = ZSTDds_skipFrame; - return 0; - - case ZSTDds_skipFrame: - dctx->expected = 0; - dctx->stage = ZSTDds_getFrameHeaderSize; - return 0; - - default: - assert(0); /* impossible */ - RETURN_ERROR(GENERIC, "impossible to reach"); /* some compiler require default to do something */ - } -} - - -static size_t ZSTD_refDictContent(ZSTD_DCtx* dctx, const void* dict, size_t dictSize) -{ - dctx->dictEnd = dctx->previousDstEnd; - dctx->virtualStart = (const char*)dict - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart)); - dctx->prefixStart = dict; - dctx->previousDstEnd = (const char*)dict + dictSize; -#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION - dctx->dictContentBeginForFuzzing = dctx->prefixStart; - dctx->dictContentEndForFuzzing = dctx->previousDstEnd; -#endif - return 0; -} - -/*! ZSTD_loadDEntropy() : - * dict : must point at beginning of a valid zstd dictionary. - * @return : size of entropy tables read */ -size_t -ZSTD_loadDEntropy(ZSTD_entropyDTables_t* entropy, - const void* const dict, size_t const dictSize) -{ - const BYTE* dictPtr = (const BYTE*)dict; - const BYTE* const dictEnd = dictPtr + dictSize; - - RETURN_ERROR_IF(dictSize <= 8, dictionary_corrupted, "dict is too small"); - assert(MEM_readLE32(dict) == ZSTD_MAGIC_DICTIONARY); /* dict must be valid */ - dictPtr += 8; /* skip header = magic + dictID */ - - ZSTD_STATIC_ASSERT(offsetof(ZSTD_entropyDTables_t, OFTable) == offsetof(ZSTD_entropyDTables_t, LLTable) + sizeof(entropy->LLTable)); - ZSTD_STATIC_ASSERT(offsetof(ZSTD_entropyDTables_t, MLTable) == offsetof(ZSTD_entropyDTables_t, OFTable) + sizeof(entropy->OFTable)); - ZSTD_STATIC_ASSERT(sizeof(entropy->LLTable) + sizeof(entropy->OFTable) + sizeof(entropy->MLTable) >= HUF_DECOMPRESS_WORKSPACE_SIZE); - { void* const workspace = &entropy->LLTable; /* use fse tables as temporary workspace; implies fse tables are grouped together */ - size_t const workspaceSize = sizeof(entropy->LLTable) + sizeof(entropy->OFTable) + sizeof(entropy->MLTable); -#ifdef HUF_FORCE_DECOMPRESS_X1 - /* in minimal huffman, we always use X1 variants */ - size_t const hSize = HUF_readDTableX1_wksp(entropy->hufTable, - dictPtr, dictEnd - dictPtr, - workspace, workspaceSize); -#else - size_t const hSize = HUF_readDTableX2_wksp(entropy->hufTable, - dictPtr, (size_t)(dictEnd - dictPtr), - workspace, workspaceSize); -#endif - RETURN_ERROR_IF(HUF_isError(hSize), dictionary_corrupted, ""); - dictPtr += hSize; - } - - { short offcodeNCount[MaxOff+1]; - unsigned offcodeMaxValue = MaxOff, offcodeLog; - size_t const offcodeHeaderSize = FSE_readNCount(offcodeNCount, &offcodeMaxValue, &offcodeLog, dictPtr, (size_t)(dictEnd-dictPtr)); - RETURN_ERROR_IF(FSE_isError(offcodeHeaderSize), dictionary_corrupted, ""); - RETURN_ERROR_IF(offcodeMaxValue > MaxOff, dictionary_corrupted, ""); - RETURN_ERROR_IF(offcodeLog > OffFSELog, dictionary_corrupted, ""); - ZSTD_buildFSETable( entropy->OFTable, - offcodeNCount, offcodeMaxValue, - OF_base, OF_bits, - offcodeLog, - entropy->workspace, sizeof(entropy->workspace), - /* bmi2 */0); - dictPtr += offcodeHeaderSize; - } - - { short matchlengthNCount[MaxML+1]; - unsigned matchlengthMaxValue = MaxML, matchlengthLog; - size_t const matchlengthHeaderSize = FSE_readNCount(matchlengthNCount, &matchlengthMaxValue, &matchlengthLog, dictPtr, (size_t)(dictEnd-dictPtr)); - RETURN_ERROR_IF(FSE_isError(matchlengthHeaderSize), dictionary_corrupted, ""); - RETURN_ERROR_IF(matchlengthMaxValue > MaxML, dictionary_corrupted, ""); - RETURN_ERROR_IF(matchlengthLog > MLFSELog, dictionary_corrupted, ""); - ZSTD_buildFSETable( entropy->MLTable, - matchlengthNCount, matchlengthMaxValue, - ML_base, ML_bits, - matchlengthLog, - entropy->workspace, sizeof(entropy->workspace), - /* bmi2 */ 0); - dictPtr += matchlengthHeaderSize; - } - - { short litlengthNCount[MaxLL+1]; - unsigned litlengthMaxValue = MaxLL, litlengthLog; - size_t const litlengthHeaderSize = FSE_readNCount(litlengthNCount, &litlengthMaxValue, &litlengthLog, dictPtr, (size_t)(dictEnd-dictPtr)); - RETURN_ERROR_IF(FSE_isError(litlengthHeaderSize), dictionary_corrupted, ""); - RETURN_ERROR_IF(litlengthMaxValue > MaxLL, dictionary_corrupted, ""); - RETURN_ERROR_IF(litlengthLog > LLFSELog, dictionary_corrupted, ""); - ZSTD_buildFSETable( entropy->LLTable, - litlengthNCount, litlengthMaxValue, - LL_base, LL_bits, - litlengthLog, - entropy->workspace, sizeof(entropy->workspace), - /* bmi2 */ 0); - dictPtr += litlengthHeaderSize; - } - - RETURN_ERROR_IF(dictPtr+12 > dictEnd, dictionary_corrupted, ""); - { int i; - size_t const dictContentSize = (size_t)(dictEnd - (dictPtr+12)); - for (i=0; i<3; i++) { - U32 const rep = MEM_readLE32(dictPtr); dictPtr += 4; - RETURN_ERROR_IF(rep==0 || rep > dictContentSize, - dictionary_corrupted, ""); - entropy->rep[i] = rep; - } } - - return (size_t)(dictPtr - (const BYTE*)dict); -} - -static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize) -{ - if (dictSize < 8) return ZSTD_refDictContent(dctx, dict, dictSize); - { U32 const magic = MEM_readLE32(dict); - if (magic != ZSTD_MAGIC_DICTIONARY) { - return ZSTD_refDictContent(dctx, dict, dictSize); /* pure content mode */ - } } - dctx->dictID = MEM_readLE32((const char*)dict + ZSTD_FRAMEIDSIZE); - - /* load entropy tables */ - { size_t const eSize = ZSTD_loadDEntropy(&dctx->entropy, dict, dictSize); - RETURN_ERROR_IF(ZSTD_isError(eSize), dictionary_corrupted, ""); - dict = (const char*)dict + eSize; - dictSize -= eSize; - } - dctx->litEntropy = dctx->fseEntropy = 1; - - /* reference dictionary content */ - return ZSTD_refDictContent(dctx, dict, dictSize); -} - -size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx) -{ - assert(dctx != NULL); -#if ZSTD_TRACE - dctx->traceCtx = (ZSTD_trace_decompress_begin != NULL) ? ZSTD_trace_decompress_begin(dctx) : 0; -#endif - dctx->expected = ZSTD_startingInputLength(dctx->format); /* dctx->format must be properly set */ - dctx->stage = ZSTDds_getFrameHeaderSize; - dctx->processedCSize = 0; - dctx->decodedSize = 0; - dctx->previousDstEnd = NULL; - dctx->prefixStart = NULL; - dctx->virtualStart = NULL; - dctx->dictEnd = NULL; - dctx->entropy.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001); /* cover both little and big endian */ - dctx->litEntropy = dctx->fseEntropy = 0; - dctx->dictID = 0; - dctx->bType = bt_reserved; - ZSTD_STATIC_ASSERT(sizeof(dctx->entropy.rep) == sizeof(repStartValue)); - ZSTD_memcpy(dctx->entropy.rep, repStartValue, sizeof(repStartValue)); /* initial repcodes */ - dctx->LLTptr = dctx->entropy.LLTable; - dctx->MLTptr = dctx->entropy.MLTable; - dctx->OFTptr = dctx->entropy.OFTable; - dctx->HUFptr = dctx->entropy.hufTable; - return 0; -} - -size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize) -{ - FORWARD_IF_ERROR( ZSTD_decompressBegin(dctx) , ""); - if (dict && dictSize) - RETURN_ERROR_IF( - ZSTD_isError(ZSTD_decompress_insertDictionary(dctx, dict, dictSize)), - dictionary_corrupted, ""); - return 0; -} - - -/* ====== ZSTD_DDict ====== */ - -size_t ZSTD_decompressBegin_usingDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict) -{ - DEBUGLOG(4, "ZSTD_decompressBegin_usingDDict"); - assert(dctx != NULL); - if (ddict) { - const char* const dictStart = (const char*)ZSTD_DDict_dictContent(ddict); - size_t const dictSize = ZSTD_DDict_dictSize(ddict); - const void* const dictEnd = dictStart + dictSize; - dctx->ddictIsCold = (dctx->dictEnd != dictEnd); - DEBUGLOG(4, "DDict is %s", - dctx->ddictIsCold ? "~cold~" : "hot!"); - } - FORWARD_IF_ERROR( ZSTD_decompressBegin(dctx) , ""); - if (ddict) { /* NULL ddict is equivalent to no dictionary */ - ZSTD_copyDDictParameters(dctx, ddict); - } - return 0; -} - -/*! ZSTD_getDictID_fromDict() : - * Provides the dictID stored within dictionary. - * if @return == 0, the dictionary is not conformant with Zstandard specification. - * It can still be loaded, but as a content-only dictionary. */ -unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize) -{ - if (dictSize < 8) return 0; - if (MEM_readLE32(dict) != ZSTD_MAGIC_DICTIONARY) return 0; - return MEM_readLE32((const char*)dict + ZSTD_FRAMEIDSIZE); -} - -/*! ZSTD_getDictID_fromFrame() : - * Provides the dictID required to decompress frame stored within `src`. - * If @return == 0, the dictID could not be decoded. - * This could for one of the following reasons : - * - The frame does not require a dictionary (most common case). - * - The frame was built with dictID intentionally removed. - * Needed dictionary is a hidden information. - * Note : this use case also happens when using a non-conformant dictionary. - * - `srcSize` is too small, and as a result, frame header could not be decoded. - * Note : possible if `srcSize < ZSTD_FRAMEHEADERSIZE_MAX`. - * - This is not a Zstandard frame. - * When identifying the exact failure cause, it's possible to use - * ZSTD_getFrameHeader(), which will provide a more precise error code. */ -unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize) -{ - ZSTD_frameHeader zfp = { 0, 0, 0, ZSTD_frame, 0, 0, 0 }; - size_t const hError = ZSTD_getFrameHeader(&zfp, src, srcSize); - if (ZSTD_isError(hError)) return 0; - return zfp.dictID; -} - - -/*! ZSTD_decompress_usingDDict() : -* Decompression using a pre-digested Dictionary -* Use dictionary without significant overhead. */ -size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const ZSTD_DDict* ddict) -{ - /* pass content and size in case legacy frames are encountered */ - return ZSTD_decompressMultiFrame(dctx, dst, dstCapacity, src, srcSize, - NULL, 0, - ddict); -} - - -/*===================================== -* Streaming decompression -*====================================*/ - -ZSTD_DStream* ZSTD_createDStream(void) -{ - DEBUGLOG(3, "ZSTD_createDStream"); - return ZSTD_createDCtx_internal(ZSTD_defaultCMem); -} - -ZSTD_DStream* ZSTD_initStaticDStream(void *workspace, size_t workspaceSize) -{ - return ZSTD_initStaticDCtx(workspace, workspaceSize); -} - -ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem) -{ - return ZSTD_createDCtx_internal(customMem); -} - -size_t ZSTD_freeDStream(ZSTD_DStream* zds) -{ - return ZSTD_freeDCtx(zds); -} - - -/* *** Initialization *** */ - -size_t ZSTD_DStreamInSize(void) { return ZSTD_BLOCKSIZE_MAX + ZSTD_blockHeaderSize; } -size_t ZSTD_DStreamOutSize(void) { return ZSTD_BLOCKSIZE_MAX; } - -size_t ZSTD_DCtx_loadDictionary_advanced(ZSTD_DCtx* dctx, - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType) -{ - RETURN_ERROR_IF(dctx->streamStage != zdss_init, stage_wrong, ""); - ZSTD_clearDict(dctx); - if (dict && dictSize != 0) { - dctx->ddictLocal = ZSTD_createDDict_advanced(dict, dictSize, dictLoadMethod, dictContentType, dctx->customMem); - RETURN_ERROR_IF(dctx->ddictLocal == NULL, memory_allocation, "NULL pointer!"); - dctx->ddict = dctx->ddictLocal; - dctx->dictUses = ZSTD_use_indefinitely; - } - return 0; -} - -size_t ZSTD_DCtx_loadDictionary_byReference(ZSTD_DCtx* dctx, const void* dict, size_t dictSize) -{ - return ZSTD_DCtx_loadDictionary_advanced(dctx, dict, dictSize, ZSTD_dlm_byRef, ZSTD_dct_auto); -} - -size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize) -{ - return ZSTD_DCtx_loadDictionary_advanced(dctx, dict, dictSize, ZSTD_dlm_byCopy, ZSTD_dct_auto); -} - -size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType) -{ - FORWARD_IF_ERROR(ZSTD_DCtx_loadDictionary_advanced(dctx, prefix, prefixSize, ZSTD_dlm_byRef, dictContentType), ""); - dctx->dictUses = ZSTD_use_once; - return 0; -} - -size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, const void* prefix, size_t prefixSize) -{ - return ZSTD_DCtx_refPrefix_advanced(dctx, prefix, prefixSize, ZSTD_dct_rawContent); -} - - -/* ZSTD_initDStream_usingDict() : - * return : expected size, aka ZSTD_startingInputLength(). - * this function cannot fail */ -size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize) -{ - DEBUGLOG(4, "ZSTD_initDStream_usingDict"); - FORWARD_IF_ERROR( ZSTD_DCtx_reset(zds, ZSTD_reset_session_only) , ""); - FORWARD_IF_ERROR( ZSTD_DCtx_loadDictionary(zds, dict, dictSize) , ""); - return ZSTD_startingInputLength(zds->format); -} - -/* note : this variant can't fail */ -size_t ZSTD_initDStream(ZSTD_DStream* zds) -{ - DEBUGLOG(4, "ZSTD_initDStream"); - return ZSTD_initDStream_usingDDict(zds, NULL); -} - -/* ZSTD_initDStream_usingDDict() : - * ddict will just be referenced, and must outlive decompression session - * this function cannot fail */ -size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* dctx, const ZSTD_DDict* ddict) -{ - FORWARD_IF_ERROR( ZSTD_DCtx_reset(dctx, ZSTD_reset_session_only) , ""); - FORWARD_IF_ERROR( ZSTD_DCtx_refDDict(dctx, ddict) , ""); - return ZSTD_startingInputLength(dctx->format); -} - -/* ZSTD_resetDStream() : - * return : expected size, aka ZSTD_startingInputLength(). - * this function cannot fail */ -size_t ZSTD_resetDStream(ZSTD_DStream* dctx) -{ - FORWARD_IF_ERROR(ZSTD_DCtx_reset(dctx, ZSTD_reset_session_only), ""); - return ZSTD_startingInputLength(dctx->format); -} - - -size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict) -{ - RETURN_ERROR_IF(dctx->streamStage != zdss_init, stage_wrong, ""); - ZSTD_clearDict(dctx); - if (ddict) { - dctx->ddict = ddict; - dctx->dictUses = ZSTD_use_indefinitely; - if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts) { - if (dctx->ddictSet == NULL) { - dctx->ddictSet = ZSTD_createDDictHashSet(dctx->customMem); - if (!dctx->ddictSet) { - RETURN_ERROR(memory_allocation, "Failed to allocate memory for hash set!"); - } - } - assert(!dctx->staticSize); /* Impossible: ddictSet cannot have been allocated if static dctx */ - FORWARD_IF_ERROR(ZSTD_DDictHashSet_addDDict(dctx->ddictSet, ddict, dctx->customMem), ""); - } - } - return 0; -} - -/* ZSTD_DCtx_setMaxWindowSize() : - * note : no direct equivalence in ZSTD_DCtx_setParameter, - * since this version sets windowSize, and the other sets windowLog */ -size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowSize) -{ - ZSTD_bounds const bounds = ZSTD_dParam_getBounds(ZSTD_d_windowLogMax); - size_t const min = (size_t)1 << bounds.lowerBound; - size_t const max = (size_t)1 << bounds.upperBound; - RETURN_ERROR_IF(dctx->streamStage != zdss_init, stage_wrong, ""); - RETURN_ERROR_IF(maxWindowSize < min, parameter_outOfBound, ""); - RETURN_ERROR_IF(maxWindowSize > max, parameter_outOfBound, ""); - dctx->maxWindowSize = maxWindowSize; - return 0; -} - -size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format) -{ - return ZSTD_DCtx_setParameter(dctx, ZSTD_d_format, (int)format); -} - -ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam) -{ - ZSTD_bounds bounds = { 0, 0, 0 }; - switch(dParam) { - case ZSTD_d_windowLogMax: - bounds.lowerBound = ZSTD_WINDOWLOG_ABSOLUTEMIN; - bounds.upperBound = ZSTD_WINDOWLOG_MAX; - return bounds; - case ZSTD_d_format: - bounds.lowerBound = (int)ZSTD_f_zstd1; - bounds.upperBound = (int)ZSTD_f_zstd1_magicless; - ZSTD_STATIC_ASSERT(ZSTD_f_zstd1 < ZSTD_f_zstd1_magicless); - return bounds; - case ZSTD_d_stableOutBuffer: - bounds.lowerBound = (int)ZSTD_bm_buffered; - bounds.upperBound = (int)ZSTD_bm_stable; - return bounds; - case ZSTD_d_forceIgnoreChecksum: - bounds.lowerBound = (int)ZSTD_d_validateChecksum; - bounds.upperBound = (int)ZSTD_d_ignoreChecksum; - return bounds; - case ZSTD_d_refMultipleDDicts: - bounds.lowerBound = (int)ZSTD_rmd_refSingleDDict; - bounds.upperBound = (int)ZSTD_rmd_refMultipleDDicts; - return bounds; - default:; - } - bounds.error = ERROR(parameter_unsupported); - return bounds; -} - -/* ZSTD_dParam_withinBounds: - * @return 1 if value is within dParam bounds, - * 0 otherwise */ -static int ZSTD_dParam_withinBounds(ZSTD_dParameter dParam, int value) -{ - ZSTD_bounds const bounds = ZSTD_dParam_getBounds(dParam); - if (ZSTD_isError(bounds.error)) return 0; - if (value < bounds.lowerBound) return 0; - if (value > bounds.upperBound) return 0; - return 1; -} - -#define CHECK_DBOUNDS(p,v) { \ - RETURN_ERROR_IF(!ZSTD_dParam_withinBounds(p, v), parameter_outOfBound, ""); \ -} - -size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value) -{ - switch (param) { - case ZSTD_d_windowLogMax: - *value = (int)ZSTD_highbit32((U32)dctx->maxWindowSize); - return 0; - case ZSTD_d_format: - *value = (int)dctx->format; - return 0; - case ZSTD_d_stableOutBuffer: - *value = (int)dctx->outBufferMode; - return 0; - case ZSTD_d_forceIgnoreChecksum: - *value = (int)dctx->forceIgnoreChecksum; - return 0; - case ZSTD_d_refMultipleDDicts: - *value = (int)dctx->refMultipleDDicts; - return 0; - default:; - } - RETURN_ERROR(parameter_unsupported, ""); -} - -size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter dParam, int value) -{ - RETURN_ERROR_IF(dctx->streamStage != zdss_init, stage_wrong, ""); - switch(dParam) { - case ZSTD_d_windowLogMax: - if (value == 0) value = ZSTD_WINDOWLOG_LIMIT_DEFAULT; - CHECK_DBOUNDS(ZSTD_d_windowLogMax, value); - dctx->maxWindowSize = ((size_t)1) << value; - return 0; - case ZSTD_d_format: - CHECK_DBOUNDS(ZSTD_d_format, value); - dctx->format = (ZSTD_format_e)value; - return 0; - case ZSTD_d_stableOutBuffer: - CHECK_DBOUNDS(ZSTD_d_stableOutBuffer, value); - dctx->outBufferMode = (ZSTD_bufferMode_e)value; - return 0; - case ZSTD_d_forceIgnoreChecksum: - CHECK_DBOUNDS(ZSTD_d_forceIgnoreChecksum, value); - dctx->forceIgnoreChecksum = (ZSTD_forceIgnoreChecksum_e)value; - return 0; - case ZSTD_d_refMultipleDDicts: - CHECK_DBOUNDS(ZSTD_d_refMultipleDDicts, value); - if (dctx->staticSize != 0) { - RETURN_ERROR(parameter_unsupported, "Static dctx does not support multiple DDicts!"); - } - dctx->refMultipleDDicts = (ZSTD_refMultipleDDicts_e)value; - return 0; - default:; - } - RETURN_ERROR(parameter_unsupported, ""); -} - -size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset) -{ - if ( (reset == ZSTD_reset_session_only) - || (reset == ZSTD_reset_session_and_parameters) ) { - dctx->streamStage = zdss_init; - dctx->noForwardProgress = 0; - } - if ( (reset == ZSTD_reset_parameters) - || (reset == ZSTD_reset_session_and_parameters) ) { - RETURN_ERROR_IF(dctx->streamStage != zdss_init, stage_wrong, ""); - ZSTD_clearDict(dctx); - ZSTD_DCtx_resetParameters(dctx); - } - return 0; -} - - -size_t ZSTD_sizeof_DStream(const ZSTD_DStream* dctx) -{ - return ZSTD_sizeof_DCtx(dctx); -} - -size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize) -{ - size_t const blockSize = (size_t) MIN(windowSize, ZSTD_BLOCKSIZE_MAX); - /* space is needed to store the litbuffer after the output of a given block without stomping the extDict of a previous run, as well as to cover both windows against wildcopy*/ - unsigned long long const neededRBSize = windowSize + blockSize + ZSTD_BLOCKSIZE_MAX + (WILDCOPY_OVERLENGTH * 2); - unsigned long long const neededSize = MIN(frameContentSize, neededRBSize); - size_t const minRBSize = (size_t) neededSize; - RETURN_ERROR_IF((unsigned long long)minRBSize != neededSize, - frameParameter_windowTooLarge, ""); - return minRBSize; -} - -size_t ZSTD_estimateDStreamSize(size_t windowSize) -{ - size_t const blockSize = MIN(windowSize, ZSTD_BLOCKSIZE_MAX); - size_t const inBuffSize = blockSize; /* no block can be larger */ - size_t const outBuffSize = ZSTD_decodingBufferSize_min(windowSize, ZSTD_CONTENTSIZE_UNKNOWN); - return ZSTD_estimateDCtxSize() + inBuffSize + outBuffSize; -} - -size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize) -{ - U32 const windowSizeMax = 1U << ZSTD_WINDOWLOG_MAX; /* note : should be user-selectable, but requires an additional parameter (or a dctx) */ - ZSTD_frameHeader zfh; - size_t const err = ZSTD_getFrameHeader(&zfh, src, srcSize); - if (ZSTD_isError(err)) return err; - RETURN_ERROR_IF(err>0, srcSize_wrong, ""); - RETURN_ERROR_IF(zfh.windowSize > windowSizeMax, - frameParameter_windowTooLarge, ""); - return ZSTD_estimateDStreamSize((size_t)zfh.windowSize); -} - - -/* ***** Decompression ***** */ - -static int ZSTD_DCtx_isOverflow(ZSTD_DStream* zds, size_t const neededInBuffSize, size_t const neededOutBuffSize) -{ - return (zds->inBuffSize + zds->outBuffSize) >= (neededInBuffSize + neededOutBuffSize) * ZSTD_WORKSPACETOOLARGE_FACTOR; -} - -static void ZSTD_DCtx_updateOversizedDuration(ZSTD_DStream* zds, size_t const neededInBuffSize, size_t const neededOutBuffSize) -{ - if (ZSTD_DCtx_isOverflow(zds, neededInBuffSize, neededOutBuffSize)) - zds->oversizedDuration++; - else - zds->oversizedDuration = 0; -} - -static int ZSTD_DCtx_isOversizedTooLong(ZSTD_DStream* zds) -{ - return zds->oversizedDuration >= ZSTD_WORKSPACETOOLARGE_MAXDURATION; -} - -/* Checks that the output buffer hasn't changed if ZSTD_obm_stable is used. */ -static size_t ZSTD_checkOutBuffer(ZSTD_DStream const* zds, ZSTD_outBuffer const* output) -{ - ZSTD_outBuffer const expect = zds->expectedOutBuffer; - /* No requirement when ZSTD_obm_stable is not enabled. */ - if (zds->outBufferMode != ZSTD_bm_stable) - return 0; - /* Any buffer is allowed in zdss_init, this must be the same for every other call until - * the context is reset. - */ - if (zds->streamStage == zdss_init) - return 0; - /* The buffer must match our expectation exactly. */ - if (expect.dst == output->dst && expect.pos == output->pos && expect.size == output->size) - return 0; - RETURN_ERROR(dstBuffer_wrong, "ZSTD_d_stableOutBuffer enabled but output differs!"); -} - -/* Calls ZSTD_decompressContinue() with the right parameters for ZSTD_decompressStream() - * and updates the stage and the output buffer state. This call is extracted so it can be - * used both when reading directly from the ZSTD_inBuffer, and in buffered input mode. - * NOTE: You must break after calling this function since the streamStage is modified. - */ -static size_t ZSTD_decompressContinueStream( - ZSTD_DStream* zds, char** op, char* oend, - void const* src, size_t srcSize) { - int const isSkipFrame = ZSTD_isSkipFrame(zds); - if (zds->outBufferMode == ZSTD_bm_buffered) { - size_t const dstSize = isSkipFrame ? 0 : zds->outBuffSize - zds->outStart; - size_t const decodedSize = ZSTD_decompressContinue(zds, - zds->outBuff + zds->outStart, dstSize, src, srcSize); - FORWARD_IF_ERROR(decodedSize, ""); - if (!decodedSize && !isSkipFrame) { - zds->streamStage = zdss_read; - } else { - zds->outEnd = zds->outStart + decodedSize; - zds->streamStage = zdss_flush; - } - } else { - /* Write directly into the output buffer */ - size_t const dstSize = isSkipFrame ? 0 : (size_t)(oend - *op); - size_t const decodedSize = ZSTD_decompressContinue(zds, *op, dstSize, src, srcSize); - FORWARD_IF_ERROR(decodedSize, ""); - *op += decodedSize; - /* Flushing is not needed. */ - zds->streamStage = zdss_read; - assert(*op <= oend); - assert(zds->outBufferMode == ZSTD_bm_stable); - } - return 0; -} - -size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input) -{ - const char* const src = (const char*)input->src; - const char* const istart = input->pos != 0 ? src + input->pos : src; - const char* const iend = input->size != 0 ? src + input->size : src; - const char* ip = istart; - char* const dst = (char*)output->dst; - char* const ostart = output->pos != 0 ? dst + output->pos : dst; - char* const oend = output->size != 0 ? dst + output->size : dst; - char* op = ostart; - U32 someMoreWork = 1; - - DEBUGLOG(5, "ZSTD_decompressStream"); - RETURN_ERROR_IF( - input->pos > input->size, - srcSize_wrong, - "forbidden. in: pos: %u vs size: %u", - (U32)input->pos, (U32)input->size); - RETURN_ERROR_IF( - output->pos > output->size, - dstSize_tooSmall, - "forbidden. out: pos: %u vs size: %u", - (U32)output->pos, (U32)output->size); - DEBUGLOG(5, "input size : %u", (U32)(input->size - input->pos)); - FORWARD_IF_ERROR(ZSTD_checkOutBuffer(zds, output), ""); - - while (someMoreWork) { - switch(zds->streamStage) - { - case zdss_init : - DEBUGLOG(5, "stage zdss_init => transparent reset "); - zds->streamStage = zdss_loadHeader; - zds->lhSize = zds->inPos = zds->outStart = zds->outEnd = 0; -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) - zds->legacyVersion = 0; -#endif - zds->hostageByte = 0; - zds->expectedOutBuffer = *output; - ZSTD_FALLTHROUGH; - - case zdss_loadHeader : - DEBUGLOG(5, "stage zdss_loadHeader (srcSize : %u)", (U32)(iend - ip)); -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) - if (zds->legacyVersion) { - RETURN_ERROR_IF(zds->staticSize, memory_allocation, - "legacy support is incompatible with static dctx"); - { size_t const hint = ZSTD_decompressLegacyStream(zds->legacyContext, zds->legacyVersion, output, input); - if (hint==0) zds->streamStage = zdss_init; - return hint; - } } -#endif - { size_t const hSize = ZSTD_getFrameHeader_advanced(&zds->fParams, zds->headerBuffer, zds->lhSize, zds->format); - if (zds->refMultipleDDicts && zds->ddictSet) { - ZSTD_DCtx_selectFrameDDict(zds); - } - DEBUGLOG(5, "header size : %u", (U32)hSize); - if (ZSTD_isError(hSize)) { -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) - U32 const legacyVersion = ZSTD_isLegacy(istart, iend-istart); - if (legacyVersion) { - ZSTD_DDict const* const ddict = ZSTD_getDDict(zds); - const void* const dict = ddict ? ZSTD_DDict_dictContent(ddict) : NULL; - size_t const dictSize = ddict ? ZSTD_DDict_dictSize(ddict) : 0; - DEBUGLOG(5, "ZSTD_decompressStream: detected legacy version v0.%u", legacyVersion); - RETURN_ERROR_IF(zds->staticSize, memory_allocation, - "legacy support is incompatible with static dctx"); - FORWARD_IF_ERROR(ZSTD_initLegacyStream(&zds->legacyContext, - zds->previousLegacyVersion, legacyVersion, - dict, dictSize), ""); - zds->legacyVersion = zds->previousLegacyVersion = legacyVersion; - { size_t const hint = ZSTD_decompressLegacyStream(zds->legacyContext, legacyVersion, output, input); - if (hint==0) zds->streamStage = zdss_init; /* or stay in stage zdss_loadHeader */ - return hint; - } } -#endif - return hSize; /* error */ - } - if (hSize != 0) { /* need more input */ - size_t const toLoad = hSize - zds->lhSize; /* if hSize!=0, hSize > zds->lhSize */ - size_t const remainingInput = (size_t)(iend-ip); - assert(iend >= ip); - if (toLoad > remainingInput) { /* not enough input to load full header */ - if (remainingInput > 0) { - ZSTD_memcpy(zds->headerBuffer + zds->lhSize, ip, remainingInput); - zds->lhSize += remainingInput; - } - input->pos = input->size; - return (MAX((size_t)ZSTD_FRAMEHEADERSIZE_MIN(zds->format), hSize) - zds->lhSize) + ZSTD_blockHeaderSize; /* remaining header bytes + next block header */ - } - assert(ip != NULL); - ZSTD_memcpy(zds->headerBuffer + zds->lhSize, ip, toLoad); zds->lhSize = hSize; ip += toLoad; - break; - } } - - /* check for single-pass mode opportunity */ - if (zds->fParams.frameContentSize != ZSTD_CONTENTSIZE_UNKNOWN - && zds->fParams.frameType != ZSTD_skippableFrame - && (U64)(size_t)(oend-op) >= zds->fParams.frameContentSize) { - size_t const cSize = ZSTD_findFrameCompressedSize(istart, (size_t)(iend-istart)); - if (cSize <= (size_t)(iend-istart)) { - /* shortcut : using single-pass mode */ - size_t const decompressedSize = ZSTD_decompress_usingDDict(zds, op, (size_t)(oend-op), istart, cSize, ZSTD_getDDict(zds)); - if (ZSTD_isError(decompressedSize)) return decompressedSize; - DEBUGLOG(4, "shortcut to single-pass ZSTD_decompress_usingDDict()") - ip = istart + cSize; - op += decompressedSize; - zds->expected = 0; - zds->streamStage = zdss_init; - someMoreWork = 0; - break; - } } - - /* Check output buffer is large enough for ZSTD_odm_stable. */ - if (zds->outBufferMode == ZSTD_bm_stable - && zds->fParams.frameType != ZSTD_skippableFrame - && zds->fParams.frameContentSize != ZSTD_CONTENTSIZE_UNKNOWN - && (U64)(size_t)(oend-op) < zds->fParams.frameContentSize) { - RETURN_ERROR(dstSize_tooSmall, "ZSTD_obm_stable passed but ZSTD_outBuffer is too small"); - } - - /* Consume header (see ZSTDds_decodeFrameHeader) */ - DEBUGLOG(4, "Consume header"); - FORWARD_IF_ERROR(ZSTD_decompressBegin_usingDDict(zds, ZSTD_getDDict(zds)), ""); - - if ((MEM_readLE32(zds->headerBuffer) & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) { /* skippable frame */ - zds->expected = MEM_readLE32(zds->headerBuffer + ZSTD_FRAMEIDSIZE); - zds->stage = ZSTDds_skipFrame; - } else { - FORWARD_IF_ERROR(ZSTD_decodeFrameHeader(zds, zds->headerBuffer, zds->lhSize), ""); - zds->expected = ZSTD_blockHeaderSize; - zds->stage = ZSTDds_decodeBlockHeader; - } - - /* control buffer memory usage */ - DEBUGLOG(4, "Control max memory usage (%u KB <= max %u KB)", - (U32)(zds->fParams.windowSize >>10), - (U32)(zds->maxWindowSize >> 10) ); - zds->fParams.windowSize = MAX(zds->fParams.windowSize, 1U << ZSTD_WINDOWLOG_ABSOLUTEMIN); - RETURN_ERROR_IF(zds->fParams.windowSize > zds->maxWindowSize, - frameParameter_windowTooLarge, ""); - - /* Adapt buffer sizes to frame header instructions */ - { size_t const neededInBuffSize = MAX(zds->fParams.blockSizeMax, 4 /* frame checksum */); - size_t const neededOutBuffSize = zds->outBufferMode == ZSTD_bm_buffered - ? ZSTD_decodingBufferSize_min(zds->fParams.windowSize, zds->fParams.frameContentSize) - : 0; - - ZSTD_DCtx_updateOversizedDuration(zds, neededInBuffSize, neededOutBuffSize); - - { int const tooSmall = (zds->inBuffSize < neededInBuffSize) || (zds->outBuffSize < neededOutBuffSize); - int const tooLarge = ZSTD_DCtx_isOversizedTooLong(zds); - - if (tooSmall || tooLarge) { - size_t const bufferSize = neededInBuffSize + neededOutBuffSize; - DEBUGLOG(4, "inBuff : from %u to %u", - (U32)zds->inBuffSize, (U32)neededInBuffSize); - DEBUGLOG(4, "outBuff : from %u to %u", - (U32)zds->outBuffSize, (U32)neededOutBuffSize); - if (zds->staticSize) { /* static DCtx */ - DEBUGLOG(4, "staticSize : %u", (U32)zds->staticSize); - assert(zds->staticSize >= sizeof(ZSTD_DCtx)); /* controlled at init */ - RETURN_ERROR_IF( - bufferSize > zds->staticSize - sizeof(ZSTD_DCtx), - memory_allocation, ""); - } else { - ZSTD_customFree(zds->inBuff, zds->customMem); - zds->inBuffSize = 0; - zds->outBuffSize = 0; - zds->inBuff = (char*)ZSTD_customMalloc(bufferSize, zds->customMem); - RETURN_ERROR_IF(zds->inBuff == NULL, memory_allocation, ""); - } - zds->inBuffSize = neededInBuffSize; - zds->outBuff = zds->inBuff + zds->inBuffSize; - zds->outBuffSize = neededOutBuffSize; - } } } - zds->streamStage = zdss_read; - ZSTD_FALLTHROUGH; - - case zdss_read: - DEBUGLOG(5, "stage zdss_read"); - { size_t const neededInSize = ZSTD_nextSrcSizeToDecompressWithInputSize(zds, (size_t)(iend - ip)); - DEBUGLOG(5, "neededInSize = %u", (U32)neededInSize); - if (neededInSize==0) { /* end of frame */ - zds->streamStage = zdss_init; - someMoreWork = 0; - break; - } - if ((size_t)(iend-ip) >= neededInSize) { /* decode directly from src */ - FORWARD_IF_ERROR(ZSTD_decompressContinueStream(zds, &op, oend, ip, neededInSize), ""); - ip += neededInSize; - /* Function modifies the stage so we must break */ - break; - } } - if (ip==iend) { someMoreWork = 0; break; } /* no more input */ - zds->streamStage = zdss_load; - ZSTD_FALLTHROUGH; - - case zdss_load: - { size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds); - size_t const toLoad = neededInSize - zds->inPos; - int const isSkipFrame = ZSTD_isSkipFrame(zds); - size_t loadedSize; - /* At this point we shouldn't be decompressing a block that we can stream. */ - assert(neededInSize == ZSTD_nextSrcSizeToDecompressWithInputSize(zds, iend - ip)); - if (isSkipFrame) { - loadedSize = MIN(toLoad, (size_t)(iend-ip)); - } else { - RETURN_ERROR_IF(toLoad > zds->inBuffSize - zds->inPos, - corruption_detected, - "should never happen"); - loadedSize = ZSTD_limitCopy(zds->inBuff + zds->inPos, toLoad, ip, (size_t)(iend-ip)); - } - ip += loadedSize; - zds->inPos += loadedSize; - if (loadedSize < toLoad) { someMoreWork = 0; break; } /* not enough input, wait for more */ - - /* decode loaded input */ - zds->inPos = 0; /* input is consumed */ - FORWARD_IF_ERROR(ZSTD_decompressContinueStream(zds, &op, oend, zds->inBuff, neededInSize), ""); - /* Function modifies the stage so we must break */ - break; - } - case zdss_flush: - { size_t const toFlushSize = zds->outEnd - zds->outStart; - size_t const flushedSize = ZSTD_limitCopy(op, (size_t)(oend-op), zds->outBuff + zds->outStart, toFlushSize); - op += flushedSize; - zds->outStart += flushedSize; - if (flushedSize == toFlushSize) { /* flush completed */ - zds->streamStage = zdss_read; - if ( (zds->outBuffSize < zds->fParams.frameContentSize) - && (zds->outStart + zds->fParams.blockSizeMax > zds->outBuffSize) ) { - DEBUGLOG(5, "restart filling outBuff from beginning (left:%i, needed:%u)", - (int)(zds->outBuffSize - zds->outStart), - (U32)zds->fParams.blockSizeMax); - zds->outStart = zds->outEnd = 0; - } - break; - } } - /* cannot complete flush */ - someMoreWork = 0; - break; - - default: - assert(0); /* impossible */ - RETURN_ERROR(GENERIC, "impossible to reach"); /* some compiler require default to do something */ - } } - - /* result */ - input->pos = (size_t)(ip - (const char*)(input->src)); - output->pos = (size_t)(op - (char*)(output->dst)); - - /* Update the expected output buffer for ZSTD_obm_stable. */ - zds->expectedOutBuffer = *output; - - if ((ip==istart) && (op==ostart)) { /* no forward progress */ - zds->noForwardProgress ++; - if (zds->noForwardProgress >= ZSTD_NO_FORWARD_PROGRESS_MAX) { - RETURN_ERROR_IF(op==oend, dstSize_tooSmall, ""); - RETURN_ERROR_IF(ip==iend, srcSize_wrong, ""); - assert(0); - } - } else { - zds->noForwardProgress = 0; - } - { size_t nextSrcSizeHint = ZSTD_nextSrcSizeToDecompress(zds); - if (!nextSrcSizeHint) { /* frame fully decoded */ - if (zds->outEnd == zds->outStart) { /* output fully flushed */ - if (zds->hostageByte) { - if (input->pos >= input->size) { - /* can't release hostage (not present) */ - zds->streamStage = zdss_read; - return 1; - } - input->pos++; /* release hostage */ - } /* zds->hostageByte */ - return 0; - } /* zds->outEnd == zds->outStart */ - if (!zds->hostageByte) { /* output not fully flushed; keep last byte as hostage; will be released when all output is flushed */ - input->pos--; /* note : pos > 0, otherwise, impossible to finish reading last block */ - zds->hostageByte=1; - } - return 1; - } /* nextSrcSizeHint==0 */ - nextSrcSizeHint += ZSTD_blockHeaderSize * (ZSTD_nextInputType(zds) == ZSTDnit_block); /* preload header of next block */ - assert(zds->inPos <= nextSrcSizeHint); - nextSrcSizeHint -= zds->inPos; /* part already loaded*/ - return nextSrcSizeHint; - } -} - -size_t ZSTD_decompressStream_simpleArgs ( - ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, size_t* dstPos, - const void* src, size_t srcSize, size_t* srcPos) -{ - ZSTD_outBuffer output = { dst, dstCapacity, *dstPos }; - ZSTD_inBuffer input = { src, srcSize, *srcPos }; - /* ZSTD_compress_generic() will check validity of dstPos and srcPos */ - size_t const cErr = ZSTD_decompressStream(dctx, &output, &input); - *dstPos = output.pos; - *srcPos = input.pos; - return cErr; -} diff --git a/stage1/zstd/lib/decompress/zstd_decompress_block.c b/stage1/zstd/lib/decompress/zstd_decompress_block.c deleted file mode 100644 index 2e44d30d2f..0000000000 --- a/stage1/zstd/lib/decompress/zstd_decompress_block.c +++ /dev/null @@ -1,2072 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -/* zstd_decompress_block : - * this module takes care of decompressing _compressed_ block */ - -/*-******************************************************* -* Dependencies -*********************************************************/ -#include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */ -#include "../common/compiler.h" /* prefetch */ -#include "../common/cpu.h" /* bmi2 */ -#include "../common/mem.h" /* low level memory routines */ -#define FSE_STATIC_LINKING_ONLY -#include "../common/fse.h" -#define HUF_STATIC_LINKING_ONLY -#include "../common/huf.h" -#include "../common/zstd_internal.h" -#include "zstd_decompress_internal.h" /* ZSTD_DCtx */ -#include "zstd_ddict.h" /* ZSTD_DDictDictContent */ -#include "zstd_decompress_block.h" - -/*_******************************************************* -* Macros -**********************************************************/ - -/* These two optional macros force the use one way or another of the two - * ZSTD_decompressSequences implementations. You can't force in both directions - * at the same time. - */ -#if defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT) && \ - defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG) -#error "Cannot force the use of the short and the long ZSTD_decompressSequences variants!" -#endif - - -/*_******************************************************* -* Memory operations -**********************************************************/ -static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); } - - -/*-************************************************************* - * Block decoding - ***************************************************************/ - -/*! ZSTD_getcBlockSize() : - * Provides the size of compressed block from block header `src` */ -size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, - blockProperties_t* bpPtr) -{ - RETURN_ERROR_IF(srcSize < ZSTD_blockHeaderSize, srcSize_wrong, ""); - - { U32 const cBlockHeader = MEM_readLE24(src); - U32 const cSize = cBlockHeader >> 3; - bpPtr->lastBlock = cBlockHeader & 1; - bpPtr->blockType = (blockType_e)((cBlockHeader >> 1) & 3); - bpPtr->origSize = cSize; /* only useful for RLE */ - if (bpPtr->blockType == bt_rle) return 1; - RETURN_ERROR_IF(bpPtr->blockType == bt_reserved, corruption_detected, ""); - return cSize; - } -} - -/* Allocate buffer for literals, either overlapping current dst, or split between dst and litExtraBuffer, or stored entirely within litExtraBuffer */ -static void ZSTD_allocateLiteralsBuffer(ZSTD_DCtx* dctx, void* const dst, const size_t dstCapacity, const size_t litSize, - const streaming_operation streaming, const size_t expectedWriteSize, const unsigned splitImmediately) -{ - if (streaming == not_streaming && dstCapacity > ZSTD_BLOCKSIZE_MAX + WILDCOPY_OVERLENGTH + litSize + WILDCOPY_OVERLENGTH) - { - /* room for litbuffer to fit without read faulting */ - dctx->litBuffer = (BYTE*)dst + ZSTD_BLOCKSIZE_MAX + WILDCOPY_OVERLENGTH; - dctx->litBufferEnd = dctx->litBuffer + litSize; - dctx->litBufferLocation = ZSTD_in_dst; - } - else if (litSize > ZSTD_LITBUFFEREXTRASIZE) - { - /* won't fit in litExtraBuffer, so it will be split between end of dst and extra buffer */ - if (splitImmediately) { - /* won't fit in litExtraBuffer, so it will be split between end of dst and extra buffer */ - dctx->litBuffer = (BYTE*)dst + expectedWriteSize - litSize + ZSTD_LITBUFFEREXTRASIZE - WILDCOPY_OVERLENGTH; - dctx->litBufferEnd = dctx->litBuffer + litSize - ZSTD_LITBUFFEREXTRASIZE; - } - else { - /* initially this will be stored entirely in dst during huffman decoding, it will partially shifted to litExtraBuffer after */ - dctx->litBuffer = (BYTE*)dst + expectedWriteSize - litSize; - dctx->litBufferEnd = (BYTE*)dst + expectedWriteSize; - } - dctx->litBufferLocation = ZSTD_split; - } - else - { - /* fits entirely within litExtraBuffer, so no split is necessary */ - dctx->litBuffer = dctx->litExtraBuffer; - dctx->litBufferEnd = dctx->litBuffer + litSize; - dctx->litBufferLocation = ZSTD_not_in_dst; - } -} - -/* Hidden declaration for fullbench */ -size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx, - const void* src, size_t srcSize, - void* dst, size_t dstCapacity, const streaming_operation streaming); -/*! ZSTD_decodeLiteralsBlock() : - * Where it is possible to do so without being stomped by the output during decompression, the literals block will be stored - * in the dstBuffer. If there is room to do so, it will be stored in full in the excess dst space after where the current - * block will be output. Otherwise it will be stored at the end of the current dst blockspace, with a small portion being - * stored in dctx->litExtraBuffer to help keep it "ahead" of the current output write. - * - * @return : nb of bytes read from src (< srcSize ) - * note : symbol not declared but exposed for fullbench */ -size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx, - const void* src, size_t srcSize, /* note : srcSize < BLOCKSIZE */ - void* dst, size_t dstCapacity, const streaming_operation streaming) -{ - DEBUGLOG(5, "ZSTD_decodeLiteralsBlock"); - RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, ""); - - { const BYTE* const istart = (const BYTE*) src; - symbolEncodingType_e const litEncType = (symbolEncodingType_e)(istart[0] & 3); - - switch(litEncType) - { - case set_repeat: - DEBUGLOG(5, "set_repeat flag : re-using stats from previous compressed literals block"); - RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, ""); - ZSTD_FALLTHROUGH; - - case set_compressed: - RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3"); - { size_t lhSize, litSize, litCSize; - U32 singleStream=0; - U32 const lhlCode = (istart[0] >> 2) & 3; - U32 const lhc = MEM_readLE32(istart); - size_t hufSuccess; - size_t expectedWriteSize = MIN(ZSTD_BLOCKSIZE_MAX, dstCapacity); - switch(lhlCode) - { - case 0: case 1: default: /* note : default is impossible, since lhlCode into [0..3] */ - /* 2 - 2 - 10 - 10 */ - singleStream = !lhlCode; - lhSize = 3; - litSize = (lhc >> 4) & 0x3FF; - litCSize = (lhc >> 14) & 0x3FF; - break; - case 2: - /* 2 - 2 - 14 - 14 */ - lhSize = 4; - litSize = (lhc >> 4) & 0x3FFF; - litCSize = lhc >> 18; - break; - case 3: - /* 2 - 2 - 18 - 18 */ - lhSize = 5; - litSize = (lhc >> 4) & 0x3FFFF; - litCSize = (lhc >> 22) + ((size_t)istart[4] << 10); - break; - } - RETURN_ERROR_IF(litSize > 0 && dst == NULL, dstSize_tooSmall, "NULL not handled"); - RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, ""); - RETURN_ERROR_IF(litCSize + lhSize > srcSize, corruption_detected, ""); - RETURN_ERROR_IF(expectedWriteSize < litSize , dstSize_tooSmall, ""); - ZSTD_allocateLiteralsBuffer(dctx, dst, dstCapacity, litSize, streaming, expectedWriteSize, 0); - - /* prefetch huffman table if cold */ - if (dctx->ddictIsCold && (litSize > 768 /* heuristic */)) { - PREFETCH_AREA(dctx->HUFptr, sizeof(dctx->entropy.hufTable)); - } - - if (litEncType==set_repeat) { - if (singleStream) { - hufSuccess = HUF_decompress1X_usingDTable_bmi2( - dctx->litBuffer, litSize, istart+lhSize, litCSize, - dctx->HUFptr, ZSTD_DCtx_get_bmi2(dctx)); - } else { - hufSuccess = HUF_decompress4X_usingDTable_bmi2( - dctx->litBuffer, litSize, istart+lhSize, litCSize, - dctx->HUFptr, ZSTD_DCtx_get_bmi2(dctx)); - } - } else { - if (singleStream) { -#if defined(HUF_FORCE_DECOMPRESS_X2) - hufSuccess = HUF_decompress1X_DCtx_wksp( - dctx->entropy.hufTable, dctx->litBuffer, litSize, - istart+lhSize, litCSize, dctx->workspace, - sizeof(dctx->workspace)); -#else - hufSuccess = HUF_decompress1X1_DCtx_wksp_bmi2( - dctx->entropy.hufTable, dctx->litBuffer, litSize, - istart+lhSize, litCSize, dctx->workspace, - sizeof(dctx->workspace), ZSTD_DCtx_get_bmi2(dctx)); -#endif - } else { - hufSuccess = HUF_decompress4X_hufOnly_wksp_bmi2( - dctx->entropy.hufTable, dctx->litBuffer, litSize, - istart+lhSize, litCSize, dctx->workspace, - sizeof(dctx->workspace), ZSTD_DCtx_get_bmi2(dctx)); - } - } - if (dctx->litBufferLocation == ZSTD_split) - { - ZSTD_memcpy(dctx->litExtraBuffer, dctx->litBufferEnd - ZSTD_LITBUFFEREXTRASIZE, ZSTD_LITBUFFEREXTRASIZE); - ZSTD_memmove(dctx->litBuffer + ZSTD_LITBUFFEREXTRASIZE - WILDCOPY_OVERLENGTH, dctx->litBuffer, litSize - ZSTD_LITBUFFEREXTRASIZE); - dctx->litBuffer += ZSTD_LITBUFFEREXTRASIZE - WILDCOPY_OVERLENGTH; - dctx->litBufferEnd -= WILDCOPY_OVERLENGTH; - } - - RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, ""); - - dctx->litPtr = dctx->litBuffer; - dctx->litSize = litSize; - dctx->litEntropy = 1; - if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable; - return litCSize + lhSize; - } - - case set_basic: - { size_t litSize, lhSize; - U32 const lhlCode = ((istart[0]) >> 2) & 3; - size_t expectedWriteSize = MIN(ZSTD_BLOCKSIZE_MAX, dstCapacity); - switch(lhlCode) - { - case 0: case 2: default: /* note : default is impossible, since lhlCode into [0..3] */ - lhSize = 1; - litSize = istart[0] >> 3; - break; - case 1: - lhSize = 2; - litSize = MEM_readLE16(istart) >> 4; - break; - case 3: - lhSize = 3; - litSize = MEM_readLE24(istart) >> 4; - break; - } - - RETURN_ERROR_IF(litSize > 0 && dst == NULL, dstSize_tooSmall, "NULL not handled"); - RETURN_ERROR_IF(expectedWriteSize < litSize, dstSize_tooSmall, ""); - ZSTD_allocateLiteralsBuffer(dctx, dst, dstCapacity, litSize, streaming, expectedWriteSize, 1); - if (lhSize+litSize+WILDCOPY_OVERLENGTH > srcSize) { /* risk reading beyond src buffer with wildcopy */ - RETURN_ERROR_IF(litSize+lhSize > srcSize, corruption_detected, ""); - if (dctx->litBufferLocation == ZSTD_split) - { - ZSTD_memcpy(dctx->litBuffer, istart + lhSize, litSize - ZSTD_LITBUFFEREXTRASIZE); - ZSTD_memcpy(dctx->litExtraBuffer, istart + lhSize + litSize - ZSTD_LITBUFFEREXTRASIZE, ZSTD_LITBUFFEREXTRASIZE); - } - else - { - ZSTD_memcpy(dctx->litBuffer, istart + lhSize, litSize); - } - dctx->litPtr = dctx->litBuffer; - dctx->litSize = litSize; - return lhSize+litSize; - } - /* direct reference into compressed stream */ - dctx->litPtr = istart+lhSize; - dctx->litSize = litSize; - dctx->litBufferEnd = dctx->litPtr + litSize; - dctx->litBufferLocation = ZSTD_not_in_dst; - return lhSize+litSize; - } - - case set_rle: - { U32 const lhlCode = ((istart[0]) >> 2) & 3; - size_t litSize, lhSize; - size_t expectedWriteSize = MIN(ZSTD_BLOCKSIZE_MAX, dstCapacity); - switch(lhlCode) - { - case 0: case 2: default: /* note : default is impossible, since lhlCode into [0..3] */ - lhSize = 1; - litSize = istart[0] >> 3; - break; - case 1: - lhSize = 2; - litSize = MEM_readLE16(istart) >> 4; - break; - case 3: - lhSize = 3; - litSize = MEM_readLE24(istart) >> 4; - RETURN_ERROR_IF(srcSize<4, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need lhSize+1 = 4"); - break; - } - RETURN_ERROR_IF(litSize > 0 && dst == NULL, dstSize_tooSmall, "NULL not handled"); - RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, ""); - RETURN_ERROR_IF(expectedWriteSize < litSize, dstSize_tooSmall, ""); - ZSTD_allocateLiteralsBuffer(dctx, dst, dstCapacity, litSize, streaming, expectedWriteSize, 1); - if (dctx->litBufferLocation == ZSTD_split) - { - ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize - ZSTD_LITBUFFEREXTRASIZE); - ZSTD_memset(dctx->litExtraBuffer, istart[lhSize], ZSTD_LITBUFFEREXTRASIZE); - } - else - { - ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize); - } - dctx->litPtr = dctx->litBuffer; - dctx->litSize = litSize; - return lhSize+1; - } - default: - RETURN_ERROR(corruption_detected, "impossible"); - } - } -} - -/* Default FSE distribution tables. - * These are pre-calculated FSE decoding tables using default distributions as defined in specification : - * https://github.com/facebook/zstd/blob/release/doc/zstd_compression_format.md#default-distributions - * They were generated programmatically with following method : - * - start from default distributions, present in /lib/common/zstd_internal.h - * - generate tables normally, using ZSTD_buildFSETable() - * - printout the content of tables - * - pretify output, report below, test with fuzzer to ensure it's correct */ - -/* Default FSE distribution table for Literal Lengths */ -static const ZSTD_seqSymbol LL_defaultDTable[(1<tableLog = 0; - DTableH->fastMode = 0; - - cell->nbBits = 0; - cell->nextState = 0; - assert(nbAddBits < 255); - cell->nbAdditionalBits = nbAddBits; - cell->baseValue = baseValue; -} - - -/* ZSTD_buildFSETable() : - * generate FSE decoding table for one symbol (ll, ml or off) - * cannot fail if input is valid => - * all inputs are presumed validated at this stage */ -FORCE_INLINE_TEMPLATE -void ZSTD_buildFSETable_body(ZSTD_seqSymbol* dt, - const short* normalizedCounter, unsigned maxSymbolValue, - const U32* baseValue, const U8* nbAdditionalBits, - unsigned tableLog, void* wksp, size_t wkspSize) -{ - ZSTD_seqSymbol* const tableDecode = dt+1; - U32 const maxSV1 = maxSymbolValue + 1; - U32 const tableSize = 1 << tableLog; - - U16* symbolNext = (U16*)wksp; - BYTE* spread = (BYTE*)(symbolNext + MaxSeq + 1); - U32 highThreshold = tableSize - 1; - - - /* Sanity Checks */ - assert(maxSymbolValue <= MaxSeq); - assert(tableLog <= MaxFSELog); - assert(wkspSize >= ZSTD_BUILD_FSE_TABLE_WKSP_SIZE); - (void)wkspSize; - /* Init, lay down lowprob symbols */ - { ZSTD_seqSymbol_header DTableH; - DTableH.tableLog = tableLog; - DTableH.fastMode = 1; - { S16 const largeLimit= (S16)(1 << (tableLog-1)); - U32 s; - for (s=0; s= largeLimit) DTableH.fastMode=0; - assert(normalizedCounter[s]>=0); - symbolNext[s] = (U16)normalizedCounter[s]; - } } } - ZSTD_memcpy(dt, &DTableH, sizeof(DTableH)); - } - - /* Spread symbols */ - assert(tableSize <= 512); - /* Specialized symbol spreading for the case when there are - * no low probability (-1 count) symbols. When compressing - * small blocks we avoid low probability symbols to hit this - * case, since header decoding speed matters more. - */ - if (highThreshold == tableSize - 1) { - size_t const tableMask = tableSize-1; - size_t const step = FSE_TABLESTEP(tableSize); - /* First lay down the symbols in order. - * We use a uint64_t to lay down 8 bytes at a time. This reduces branch - * misses since small blocks generally have small table logs, so nearly - * all symbols have counts <= 8. We ensure we have 8 bytes at the end of - * our buffer to handle the over-write. - */ - { - U64 const add = 0x0101010101010101ull; - size_t pos = 0; - U64 sv = 0; - U32 s; - for (s=0; s highThreshold) position = (position + step) & tableMask; /* lowprob area */ - } } - assert(position == 0); /* position must reach all cells once, otherwise normalizedCounter is incorrect */ - } - - /* Build Decoding table */ - { - U32 u; - for (u=0; u max, corruption_detected, ""); - { U32 const symbol = *(const BYTE*)src; - U32 const baseline = baseValue[symbol]; - U8 const nbBits = nbAdditionalBits[symbol]; - ZSTD_buildSeqTable_rle(DTableSpace, baseline, nbBits); - } - *DTablePtr = DTableSpace; - return 1; - case set_basic : - *DTablePtr = defaultTable; - return 0; - case set_repeat: - RETURN_ERROR_IF(!flagRepeatTable, corruption_detected, ""); - /* prefetch FSE table if used */ - if (ddictIsCold && (nbSeq > 24 /* heuristic */)) { - const void* const pStart = *DTablePtr; - size_t const pSize = sizeof(ZSTD_seqSymbol) * (SEQSYMBOL_TABLE_SIZE(maxLog)); - PREFETCH_AREA(pStart, pSize); - } - return 0; - case set_compressed : - { unsigned tableLog; - S16 norm[MaxSeq+1]; - size_t const headerSize = FSE_readNCount(norm, &max, &tableLog, src, srcSize); - RETURN_ERROR_IF(FSE_isError(headerSize), corruption_detected, ""); - RETURN_ERROR_IF(tableLog > maxLog, corruption_detected, ""); - ZSTD_buildFSETable(DTableSpace, norm, max, baseValue, nbAdditionalBits, tableLog, wksp, wkspSize, bmi2); - *DTablePtr = DTableSpace; - return headerSize; - } - default : - assert(0); - RETURN_ERROR(GENERIC, "impossible"); - } -} - -size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr, - const void* src, size_t srcSize) -{ - const BYTE* const istart = (const BYTE*)src; - const BYTE* const iend = istart + srcSize; - const BYTE* ip = istart; - int nbSeq; - DEBUGLOG(5, "ZSTD_decodeSeqHeaders"); - - /* check */ - RETURN_ERROR_IF(srcSize < MIN_SEQUENCES_SIZE, srcSize_wrong, ""); - - /* SeqHead */ - nbSeq = *ip++; - if (!nbSeq) { - *nbSeqPtr=0; - RETURN_ERROR_IF(srcSize != 1, srcSize_wrong, ""); - return 1; - } - if (nbSeq > 0x7F) { - if (nbSeq == 0xFF) { - RETURN_ERROR_IF(ip+2 > iend, srcSize_wrong, ""); - nbSeq = MEM_readLE16(ip) + LONGNBSEQ; - ip+=2; - } else { - RETURN_ERROR_IF(ip >= iend, srcSize_wrong, ""); - nbSeq = ((nbSeq-0x80)<<8) + *ip++; - } - } - *nbSeqPtr = nbSeq; - - /* FSE table descriptors */ - RETURN_ERROR_IF(ip+1 > iend, srcSize_wrong, ""); /* minimum possible size: 1 byte for symbol encoding types */ - { symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6); - symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3); - symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3); - ip++; - - /* Build DTables */ - { size_t const llhSize = ZSTD_buildSeqTable(dctx->entropy.LLTable, &dctx->LLTptr, - LLtype, MaxLL, LLFSELog, - ip, iend-ip, - LL_base, LL_bits, - LL_defaultDTable, dctx->fseEntropy, - dctx->ddictIsCold, nbSeq, - dctx->workspace, sizeof(dctx->workspace), - ZSTD_DCtx_get_bmi2(dctx)); - RETURN_ERROR_IF(ZSTD_isError(llhSize), corruption_detected, "ZSTD_buildSeqTable failed"); - ip += llhSize; - } - - { size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr, - OFtype, MaxOff, OffFSELog, - ip, iend-ip, - OF_base, OF_bits, - OF_defaultDTable, dctx->fseEntropy, - dctx->ddictIsCold, nbSeq, - dctx->workspace, sizeof(dctx->workspace), - ZSTD_DCtx_get_bmi2(dctx)); - RETURN_ERROR_IF(ZSTD_isError(ofhSize), corruption_detected, "ZSTD_buildSeqTable failed"); - ip += ofhSize; - } - - { size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr, - MLtype, MaxML, MLFSELog, - ip, iend-ip, - ML_base, ML_bits, - ML_defaultDTable, dctx->fseEntropy, - dctx->ddictIsCold, nbSeq, - dctx->workspace, sizeof(dctx->workspace), - ZSTD_DCtx_get_bmi2(dctx)); - RETURN_ERROR_IF(ZSTD_isError(mlhSize), corruption_detected, "ZSTD_buildSeqTable failed"); - ip += mlhSize; - } - } - - return ip-istart; -} - - -typedef struct { - size_t litLength; - size_t matchLength; - size_t offset; -} seq_t; - -typedef struct { - size_t state; - const ZSTD_seqSymbol* table; -} ZSTD_fseState; - -typedef struct { - BIT_DStream_t DStream; - ZSTD_fseState stateLL; - ZSTD_fseState stateOffb; - ZSTD_fseState stateML; - size_t prevOffset[ZSTD_REP_NUM]; -} seqState_t; - -/*! ZSTD_overlapCopy8() : - * Copies 8 bytes from ip to op and updates op and ip where ip <= op. - * If the offset is < 8 then the offset is spread to at least 8 bytes. - * - * Precondition: *ip <= *op - * Postcondition: *op - *op >= 8 - */ -HINT_INLINE void ZSTD_overlapCopy8(BYTE** op, BYTE const** ip, size_t offset) { - assert(*ip <= *op); - if (offset < 8) { - /* close range match, overlap */ - static const U32 dec32table[] = { 0, 1, 2, 1, 4, 4, 4, 4 }; /* added */ - static const int dec64table[] = { 8, 8, 8, 7, 8, 9,10,11 }; /* subtracted */ - int const sub2 = dec64table[offset]; - (*op)[0] = (*ip)[0]; - (*op)[1] = (*ip)[1]; - (*op)[2] = (*ip)[2]; - (*op)[3] = (*ip)[3]; - *ip += dec32table[offset]; - ZSTD_copy4(*op+4, *ip); - *ip -= sub2; - } else { - ZSTD_copy8(*op, *ip); - } - *ip += 8; - *op += 8; - assert(*op - *ip >= 8); -} - -/*! ZSTD_safecopy() : - * Specialized version of memcpy() that is allowed to READ up to WILDCOPY_OVERLENGTH past the input buffer - * and write up to 16 bytes past oend_w (op >= oend_w is allowed). - * This function is only called in the uncommon case where the sequence is near the end of the block. It - * should be fast for a single long sequence, but can be slow for several short sequences. - * - * @param ovtype controls the overlap detection - * - ZSTD_no_overlap: The source and destination are guaranteed to be at least WILDCOPY_VECLEN bytes apart. - * - ZSTD_overlap_src_before_dst: The src and dst may overlap and may be any distance apart. - * The src buffer must be before the dst buffer. - */ -static void ZSTD_safecopy(BYTE* op, const BYTE* const oend_w, BYTE const* ip, ptrdiff_t length, ZSTD_overlap_e ovtype) { - ptrdiff_t const diff = op - ip; - BYTE* const oend = op + length; - - assert((ovtype == ZSTD_no_overlap && (diff <= -8 || diff >= 8 || op >= oend_w)) || - (ovtype == ZSTD_overlap_src_before_dst && diff >= 0)); - - if (length < 8) { - /* Handle short lengths. */ - while (op < oend) *op++ = *ip++; - return; - } - if (ovtype == ZSTD_overlap_src_before_dst) { - /* Copy 8 bytes and ensure the offset >= 8 when there can be overlap. */ - assert(length >= 8); - ZSTD_overlapCopy8(&op, &ip, diff); - length -= 8; - assert(op - ip >= 8); - assert(op <= oend); - } - - if (oend <= oend_w) { - /* No risk of overwrite. */ - ZSTD_wildcopy(op, ip, length, ovtype); - return; - } - if (op <= oend_w) { - /* Wildcopy until we get close to the end. */ - assert(oend > oend_w); - ZSTD_wildcopy(op, ip, oend_w - op, ovtype); - ip += oend_w - op; - op += oend_w - op; - } - /* Handle the leftovers. */ - while (op < oend) *op++ = *ip++; -} - -/* ZSTD_safecopyDstBeforeSrc(): - * This version allows overlap with dst before src, or handles the non-overlap case with dst after src - * Kept separate from more common ZSTD_safecopy case to avoid performance impact to the safecopy common case */ -static void ZSTD_safecopyDstBeforeSrc(BYTE* op, BYTE const* ip, ptrdiff_t length) { - ptrdiff_t const diff = op - ip; - BYTE* const oend = op + length; - - if (length < 8 || diff > -8) { - /* Handle short lengths, close overlaps, and dst not before src. */ - while (op < oend) *op++ = *ip++; - return; - } - - if (op <= oend - WILDCOPY_OVERLENGTH && diff < -WILDCOPY_VECLEN) { - ZSTD_wildcopy(op, ip, oend - WILDCOPY_OVERLENGTH - op, ZSTD_no_overlap); - ip += oend - WILDCOPY_OVERLENGTH - op; - op += oend - WILDCOPY_OVERLENGTH - op; - } - - /* Handle the leftovers. */ - while (op < oend) *op++ = *ip++; -} - -/* ZSTD_execSequenceEnd(): - * This version handles cases that are near the end of the output buffer. It requires - * more careful checks to make sure there is no overflow. By separating out these hard - * and unlikely cases, we can speed up the common cases. - * - * NOTE: This function needs to be fast for a single long sequence, but doesn't need - * to be optimized for many small sequences, since those fall into ZSTD_execSequence(). - */ -FORCE_NOINLINE -size_t ZSTD_execSequenceEnd(BYTE* op, - BYTE* const oend, seq_t sequence, - const BYTE** litPtr, const BYTE* const litLimit, - const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd) -{ - BYTE* const oLitEnd = op + sequence.litLength; - size_t const sequenceLength = sequence.litLength + sequence.matchLength; - const BYTE* const iLitEnd = *litPtr + sequence.litLength; - const BYTE* match = oLitEnd - sequence.offset; - BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; - - /* bounds checks : careful of address space overflow in 32-bit mode */ - RETURN_ERROR_IF(sequenceLength > (size_t)(oend - op), dstSize_tooSmall, "last match must fit within dstBuffer"); - RETURN_ERROR_IF(sequence.litLength > (size_t)(litLimit - *litPtr), corruption_detected, "try to read beyond literal buffer"); - assert(op < op + sequenceLength); - assert(oLitEnd < op + sequenceLength); - - /* copy literals */ - ZSTD_safecopy(op, oend_w, *litPtr, sequence.litLength, ZSTD_no_overlap); - op = oLitEnd; - *litPtr = iLitEnd; - - /* copy Match */ - if (sequence.offset > (size_t)(oLitEnd - prefixStart)) { - /* offset beyond prefix */ - RETURN_ERROR_IF(sequence.offset > (size_t)(oLitEnd - virtualStart), corruption_detected, ""); - match = dictEnd - (prefixStart - match); - if (match + sequence.matchLength <= dictEnd) { - ZSTD_memmove(oLitEnd, match, sequence.matchLength); - return sequenceLength; - } - /* span extDict & currentPrefixSegment */ - { size_t const length1 = dictEnd - match; - ZSTD_memmove(oLitEnd, match, length1); - op = oLitEnd + length1; - sequence.matchLength -= length1; - match = prefixStart; - } - } - ZSTD_safecopy(op, oend_w, match, sequence.matchLength, ZSTD_overlap_src_before_dst); - return sequenceLength; -} - -/* ZSTD_execSequenceEndSplitLitBuffer(): - * This version is intended to be used during instances where the litBuffer is still split. It is kept separate to avoid performance impact for the good case. - */ -FORCE_NOINLINE -size_t ZSTD_execSequenceEndSplitLitBuffer(BYTE* op, - BYTE* const oend, const BYTE* const oend_w, seq_t sequence, - const BYTE** litPtr, const BYTE* const litLimit, - const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd) -{ - BYTE* const oLitEnd = op + sequence.litLength; - size_t const sequenceLength = sequence.litLength + sequence.matchLength; - const BYTE* const iLitEnd = *litPtr + sequence.litLength; - const BYTE* match = oLitEnd - sequence.offset; - - - /* bounds checks : careful of address space overflow in 32-bit mode */ - RETURN_ERROR_IF(sequenceLength > (size_t)(oend - op), dstSize_tooSmall, "last match must fit within dstBuffer"); - RETURN_ERROR_IF(sequence.litLength > (size_t)(litLimit - *litPtr), corruption_detected, "try to read beyond literal buffer"); - assert(op < op + sequenceLength); - assert(oLitEnd < op + sequenceLength); - - /* copy literals */ - RETURN_ERROR_IF(op > *litPtr && op < *litPtr + sequence.litLength, dstSize_tooSmall, "output should not catch up to and overwrite literal buffer"); - ZSTD_safecopyDstBeforeSrc(op, *litPtr, sequence.litLength); - op = oLitEnd; - *litPtr = iLitEnd; - - /* copy Match */ - if (sequence.offset > (size_t)(oLitEnd - prefixStart)) { - /* offset beyond prefix */ - RETURN_ERROR_IF(sequence.offset > (size_t)(oLitEnd - virtualStart), corruption_detected, ""); - match = dictEnd - (prefixStart - match); - if (match + sequence.matchLength <= dictEnd) { - ZSTD_memmove(oLitEnd, match, sequence.matchLength); - return sequenceLength; - } - /* span extDict & currentPrefixSegment */ - { size_t const length1 = dictEnd - match; - ZSTD_memmove(oLitEnd, match, length1); - op = oLitEnd + length1; - sequence.matchLength -= length1; - match = prefixStart; - } - } - ZSTD_safecopy(op, oend_w, match, sequence.matchLength, ZSTD_overlap_src_before_dst); - return sequenceLength; -} - -HINT_INLINE -size_t ZSTD_execSequence(BYTE* op, - BYTE* const oend, seq_t sequence, - const BYTE** litPtr, const BYTE* const litLimit, - const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd) -{ - BYTE* const oLitEnd = op + sequence.litLength; - size_t const sequenceLength = sequence.litLength + sequence.matchLength; - BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */ - BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */ - const BYTE* const iLitEnd = *litPtr + sequence.litLength; - const BYTE* match = oLitEnd - sequence.offset; - - assert(op != NULL /* Precondition */); - assert(oend_w < oend /* No underflow */); - /* Handle edge cases in a slow path: - * - Read beyond end of literals - * - Match end is within WILDCOPY_OVERLIMIT of oend - * - 32-bit mode and the match length overflows - */ - if (UNLIKELY( - iLitEnd > litLimit || - oMatchEnd > oend_w || - (MEM_32bits() && (size_t)(oend - op) < sequenceLength + WILDCOPY_OVERLENGTH))) - return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd); - - /* Assumptions (everything else goes into ZSTD_execSequenceEnd()) */ - assert(op <= oLitEnd /* No overflow */); - assert(oLitEnd < oMatchEnd /* Non-zero match & no overflow */); - assert(oMatchEnd <= oend /* No underflow */); - assert(iLitEnd <= litLimit /* Literal length is in bounds */); - assert(oLitEnd <= oend_w /* Can wildcopy literals */); - assert(oMatchEnd <= oend_w /* Can wildcopy matches */); - - /* Copy Literals: - * Split out litLength <= 16 since it is nearly always true. +1.6% on gcc-9. - * We likely don't need the full 32-byte wildcopy. - */ - assert(WILDCOPY_OVERLENGTH >= 16); - ZSTD_copy16(op, (*litPtr)); - if (UNLIKELY(sequence.litLength > 16)) { - ZSTD_wildcopy(op + 16, (*litPtr) + 16, sequence.litLength - 16, ZSTD_no_overlap); - } - op = oLitEnd; - *litPtr = iLitEnd; /* update for next sequence */ - - /* Copy Match */ - if (sequence.offset > (size_t)(oLitEnd - prefixStart)) { - /* offset beyond prefix -> go into extDict */ - RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, ""); - match = dictEnd + (match - prefixStart); - if (match + sequence.matchLength <= dictEnd) { - ZSTD_memmove(oLitEnd, match, sequence.matchLength); - return sequenceLength; - } - /* span extDict & currentPrefixSegment */ - { size_t const length1 = dictEnd - match; - ZSTD_memmove(oLitEnd, match, length1); - op = oLitEnd + length1; - sequence.matchLength -= length1; - match = prefixStart; - } - } - /* Match within prefix of 1 or more bytes */ - assert(op <= oMatchEnd); - assert(oMatchEnd <= oend_w); - assert(match >= prefixStart); - assert(sequence.matchLength >= 1); - - /* Nearly all offsets are >= WILDCOPY_VECLEN bytes, which means we can use wildcopy - * without overlap checking. - */ - if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) { - /* We bet on a full wildcopy for matches, since we expect matches to be - * longer than literals (in general). In silesia, ~10% of matches are longer - * than 16 bytes. - */ - ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength, ZSTD_no_overlap); - return sequenceLength; - } - assert(sequence.offset < WILDCOPY_VECLEN); - - /* Copy 8 bytes and spread the offset to be >= 8. */ - ZSTD_overlapCopy8(&op, &match, sequence.offset); - - /* If the match length is > 8 bytes, then continue with the wildcopy. */ - if (sequence.matchLength > 8) { - assert(op < oMatchEnd); - ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength - 8, ZSTD_overlap_src_before_dst); - } - return sequenceLength; -} - -HINT_INLINE -size_t ZSTD_execSequenceSplitLitBuffer(BYTE* op, - BYTE* const oend, const BYTE* const oend_w, seq_t sequence, - const BYTE** litPtr, const BYTE* const litLimit, - const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd) -{ - BYTE* const oLitEnd = op + sequence.litLength; - size_t const sequenceLength = sequence.litLength + sequence.matchLength; - BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */ - const BYTE* const iLitEnd = *litPtr + sequence.litLength; - const BYTE* match = oLitEnd - sequence.offset; - - assert(op != NULL /* Precondition */); - assert(oend_w < oend /* No underflow */); - /* Handle edge cases in a slow path: - * - Read beyond end of literals - * - Match end is within WILDCOPY_OVERLIMIT of oend - * - 32-bit mode and the match length overflows - */ - if (UNLIKELY( - iLitEnd > litLimit || - oMatchEnd > oend_w || - (MEM_32bits() && (size_t)(oend - op) < sequenceLength + WILDCOPY_OVERLENGTH))) - return ZSTD_execSequenceEndSplitLitBuffer(op, oend, oend_w, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd); - - /* Assumptions (everything else goes into ZSTD_execSequenceEnd()) */ - assert(op <= oLitEnd /* No overflow */); - assert(oLitEnd < oMatchEnd /* Non-zero match & no overflow */); - assert(oMatchEnd <= oend /* No underflow */); - assert(iLitEnd <= litLimit /* Literal length is in bounds */); - assert(oLitEnd <= oend_w /* Can wildcopy literals */); - assert(oMatchEnd <= oend_w /* Can wildcopy matches */); - - /* Copy Literals: - * Split out litLength <= 16 since it is nearly always true. +1.6% on gcc-9. - * We likely don't need the full 32-byte wildcopy. - */ - assert(WILDCOPY_OVERLENGTH >= 16); - ZSTD_copy16(op, (*litPtr)); - if (UNLIKELY(sequence.litLength > 16)) { - ZSTD_wildcopy(op+16, (*litPtr)+16, sequence.litLength-16, ZSTD_no_overlap); - } - op = oLitEnd; - *litPtr = iLitEnd; /* update for next sequence */ - - /* Copy Match */ - if (sequence.offset > (size_t)(oLitEnd - prefixStart)) { - /* offset beyond prefix -> go into extDict */ - RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, ""); - match = dictEnd + (match - prefixStart); - if (match + sequence.matchLength <= dictEnd) { - ZSTD_memmove(oLitEnd, match, sequence.matchLength); - return sequenceLength; - } - /* span extDict & currentPrefixSegment */ - { size_t const length1 = dictEnd - match; - ZSTD_memmove(oLitEnd, match, length1); - op = oLitEnd + length1; - sequence.matchLength -= length1; - match = prefixStart; - } } - /* Match within prefix of 1 or more bytes */ - assert(op <= oMatchEnd); - assert(oMatchEnd <= oend_w); - assert(match >= prefixStart); - assert(sequence.matchLength >= 1); - - /* Nearly all offsets are >= WILDCOPY_VECLEN bytes, which means we can use wildcopy - * without overlap checking. - */ - if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) { - /* We bet on a full wildcopy for matches, since we expect matches to be - * longer than literals (in general). In silesia, ~10% of matches are longer - * than 16 bytes. - */ - ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength, ZSTD_no_overlap); - return sequenceLength; - } - assert(sequence.offset < WILDCOPY_VECLEN); - - /* Copy 8 bytes and spread the offset to be >= 8. */ - ZSTD_overlapCopy8(&op, &match, sequence.offset); - - /* If the match length is > 8 bytes, then continue with the wildcopy. */ - if (sequence.matchLength > 8) { - assert(op < oMatchEnd); - ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength-8, ZSTD_overlap_src_before_dst); - } - return sequenceLength; -} - - -static void -ZSTD_initFseState(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, const ZSTD_seqSymbol* dt) -{ - const void* ptr = dt; - const ZSTD_seqSymbol_header* const DTableH = (const ZSTD_seqSymbol_header*)ptr; - DStatePtr->state = BIT_readBits(bitD, DTableH->tableLog); - DEBUGLOG(6, "ZSTD_initFseState : val=%u using %u bits", - (U32)DStatePtr->state, DTableH->tableLog); - BIT_reloadDStream(bitD); - DStatePtr->table = dt + 1; -} - -FORCE_INLINE_TEMPLATE void -ZSTD_updateFseStateWithDInfo(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, U16 nextState, U32 nbBits) -{ - size_t const lowBits = BIT_readBits(bitD, nbBits); - DStatePtr->state = nextState + lowBits; -} - -/* We need to add at most (ZSTD_WINDOWLOG_MAX_32 - 1) bits to read the maximum - * offset bits. But we can only read at most (STREAM_ACCUMULATOR_MIN_32 - 1) - * bits before reloading. This value is the maximum number of bytes we read - * after reloading when we are decoding long offsets. - */ -#define LONG_OFFSETS_MAX_EXTRA_BITS_32 \ - (ZSTD_WINDOWLOG_MAX_32 > STREAM_ACCUMULATOR_MIN_32 \ - ? ZSTD_WINDOWLOG_MAX_32 - STREAM_ACCUMULATOR_MIN_32 \ - : 0) - -typedef enum { ZSTD_lo_isRegularOffset, ZSTD_lo_isLongOffset=1 } ZSTD_longOffset_e; - -FORCE_INLINE_TEMPLATE seq_t -ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets) -{ - seq_t seq; - const ZSTD_seqSymbol* const llDInfo = seqState->stateLL.table + seqState->stateLL.state; - const ZSTD_seqSymbol* const mlDInfo = seqState->stateML.table + seqState->stateML.state; - const ZSTD_seqSymbol* const ofDInfo = seqState->stateOffb.table + seqState->stateOffb.state; - seq.matchLength = mlDInfo->baseValue; - seq.litLength = llDInfo->baseValue; - { U32 const ofBase = ofDInfo->baseValue; - BYTE const llBits = llDInfo->nbAdditionalBits; - BYTE const mlBits = mlDInfo->nbAdditionalBits; - BYTE const ofBits = ofDInfo->nbAdditionalBits; - BYTE const totalBits = llBits+mlBits+ofBits; - - U16 const llNext = llDInfo->nextState; - U16 const mlNext = mlDInfo->nextState; - U16 const ofNext = ofDInfo->nextState; - U32 const llnbBits = llDInfo->nbBits; - U32 const mlnbBits = mlDInfo->nbBits; - U32 const ofnbBits = ofDInfo->nbBits; - /* - * As gcc has better branch and block analyzers, sometimes it is only - * valuable to mark likelyness for clang, it gives around 3-4% of - * performance. - */ - - /* sequence */ - { size_t offset; - #if defined(__clang__) - if (LIKELY(ofBits > 1)) { - #else - if (ofBits > 1) { - #endif - ZSTD_STATIC_ASSERT(ZSTD_lo_isLongOffset == 1); - ZSTD_STATIC_ASSERT(LONG_OFFSETS_MAX_EXTRA_BITS_32 == 5); - assert(ofBits <= MaxOff); - if (MEM_32bits() && longOffsets && (ofBits >= STREAM_ACCUMULATOR_MIN_32)) { - U32 const extraBits = ofBits - MIN(ofBits, 32 - seqState->DStream.bitsConsumed); - offset = ofBase + (BIT_readBitsFast(&seqState->DStream, ofBits - extraBits) << extraBits); - BIT_reloadDStream(&seqState->DStream); - if (extraBits) offset += BIT_readBitsFast(&seqState->DStream, extraBits); - assert(extraBits <= LONG_OFFSETS_MAX_EXTRA_BITS_32); /* to avoid another reload */ - } else { - offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */ - if (MEM_32bits()) BIT_reloadDStream(&seqState->DStream); - } - seqState->prevOffset[2] = seqState->prevOffset[1]; - seqState->prevOffset[1] = seqState->prevOffset[0]; - seqState->prevOffset[0] = offset; - } else { - U32 const ll0 = (llDInfo->baseValue == 0); - if (LIKELY((ofBits == 0))) { - offset = seqState->prevOffset[ll0]; - seqState->prevOffset[1] = seqState->prevOffset[!ll0]; - seqState->prevOffset[0] = offset; - } else { - offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1); - { size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset]; - temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */ - if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1]; - seqState->prevOffset[1] = seqState->prevOffset[0]; - seqState->prevOffset[0] = offset = temp; - } } } - seq.offset = offset; - } - - #if defined(__clang__) - if (UNLIKELY(mlBits > 0)) - #else - if (mlBits > 0) - #endif - seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/); - - if (MEM_32bits() && (mlBits+llBits >= STREAM_ACCUMULATOR_MIN_32-LONG_OFFSETS_MAX_EXTRA_BITS_32)) - BIT_reloadDStream(&seqState->DStream); - if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog))) - BIT_reloadDStream(&seqState->DStream); - /* Ensure there are enough bits to read the rest of data in 64-bit mode. */ - ZSTD_STATIC_ASSERT(16+LLFSELog+MLFSELog+OffFSELog < STREAM_ACCUMULATOR_MIN_64); - - #if defined(__clang__) - if (UNLIKELY(llBits > 0)) - #else - if (llBits > 0) - #endif - seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/); - - if (MEM_32bits()) - BIT_reloadDStream(&seqState->DStream); - - DEBUGLOG(6, "seq: litL=%u, matchL=%u, offset=%u", - (U32)seq.litLength, (U32)seq.matchLength, (U32)seq.offset); - - ZSTD_updateFseStateWithDInfo(&seqState->stateLL, &seqState->DStream, llNext, llnbBits); /* <= 9 bits */ - ZSTD_updateFseStateWithDInfo(&seqState->stateML, &seqState->DStream, mlNext, mlnbBits); /* <= 9 bits */ - if (MEM_32bits()) BIT_reloadDStream(&seqState->DStream); /* <= 18 bits */ - ZSTD_updateFseStateWithDInfo(&seqState->stateOffb, &seqState->DStream, ofNext, ofnbBits); /* <= 8 bits */ - } - - return seq; -} - -#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -MEM_STATIC int ZSTD_dictionaryIsActive(ZSTD_DCtx const* dctx, BYTE const* prefixStart, BYTE const* oLitEnd) -{ - size_t const windowSize = dctx->fParams.windowSize; - /* No dictionary used. */ - if (dctx->dictContentEndForFuzzing == NULL) return 0; - /* Dictionary is our prefix. */ - if (prefixStart == dctx->dictContentBeginForFuzzing) return 1; - /* Dictionary is not our ext-dict. */ - if (dctx->dictEnd != dctx->dictContentEndForFuzzing) return 0; - /* Dictionary is not within our window size. */ - if ((size_t)(oLitEnd - prefixStart) >= windowSize) return 0; - /* Dictionary is active. */ - return 1; -} - -MEM_STATIC void ZSTD_assertValidSequence( - ZSTD_DCtx const* dctx, - BYTE const* op, BYTE const* oend, - seq_t const seq, - BYTE const* prefixStart, BYTE const* virtualStart) -{ -#if DEBUGLEVEL >= 1 - size_t const windowSize = dctx->fParams.windowSize; - size_t const sequenceSize = seq.litLength + seq.matchLength; - BYTE const* const oLitEnd = op + seq.litLength; - DEBUGLOG(6, "Checking sequence: litL=%u matchL=%u offset=%u", - (U32)seq.litLength, (U32)seq.matchLength, (U32)seq.offset); - assert(op <= oend); - assert((size_t)(oend - op) >= sequenceSize); - assert(sequenceSize <= ZSTD_BLOCKSIZE_MAX); - if (ZSTD_dictionaryIsActive(dctx, prefixStart, oLitEnd)) { - size_t const dictSize = (size_t)((char const*)dctx->dictContentEndForFuzzing - (char const*)dctx->dictContentBeginForFuzzing); - /* Offset must be within the dictionary. */ - assert(seq.offset <= (size_t)(oLitEnd - virtualStart)); - assert(seq.offset <= windowSize + dictSize); - } else { - /* Offset must be within our window. */ - assert(seq.offset <= windowSize); - } -#else - (void)dctx, (void)op, (void)oend, (void)seq, (void)prefixStart, (void)virtualStart; -#endif -} -#endif - -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG - - -FORCE_INLINE_TEMPLATE size_t -DONT_VECTORIZE -ZSTD_decompressSequences_bodySplitLitBuffer( ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - const BYTE* ip = (const BYTE*)seqStart; - const BYTE* const iend = ip + seqSize; - BYTE* const ostart = (BYTE*)dst; - BYTE* const oend = ostart + maxDstSize; - BYTE* op = ostart; - const BYTE* litPtr = dctx->litPtr; - const BYTE* litBufferEnd = dctx->litBufferEnd; - const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart); - const BYTE* const vBase = (const BYTE*) (dctx->virtualStart); - const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd); - DEBUGLOG(5, "ZSTD_decompressSequences_bodySplitLitBuffer"); - (void)frame; - - /* Regen sequences */ - if (nbSeq) { - seqState_t seqState; - dctx->fseEntropy = 1; - { U32 i; for (i=0; ientropy.rep[i]; } - RETURN_ERROR_IF( - ERR_isError(BIT_initDStream(&seqState.DStream, ip, iend-ip)), - corruption_detected, ""); - ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr); - ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr); - ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr); - assert(dst != NULL); - - ZSTD_STATIC_ASSERT( - BIT_DStream_unfinished < BIT_DStream_completed && - BIT_DStream_endOfBuffer < BIT_DStream_completed && - BIT_DStream_completed < BIT_DStream_overflow); - - /* decompress without overrunning litPtr begins */ - { - seq_t sequence = ZSTD_decodeSequence(&seqState, isLongOffset); - /* Align the decompression loop to 32 + 16 bytes. - * - * zstd compiled with gcc-9 on an Intel i9-9900k shows 10% decompression - * speed swings based on the alignment of the decompression loop. This - * performance swing is caused by parts of the decompression loop falling - * out of the DSB. The entire decompression loop should fit in the DSB, - * when it can't we get much worse performance. You can measure if you've - * hit the good case or the bad case with this perf command for some - * compressed file test.zst: - * - * perf stat -e cycles -e instructions -e idq.all_dsb_cycles_any_uops \ - * -e idq.all_mite_cycles_any_uops -- ./zstd -tq test.zst - * - * If you see most cycles served out of the MITE you've hit the bad case. - * If you see most cycles served out of the DSB you've hit the good case. - * If it is pretty even then you may be in an okay case. - * - * This issue has been reproduced on the following CPUs: - * - Kabylake: Macbook Pro (15-inch, 2019) 2.4 GHz Intel Core i9 - * Use Instruments->Counters to get DSB/MITE cycles. - * I never got performance swings, but I was able to - * go from the good case of mostly DSB to half of the - * cycles served from MITE. - * - Coffeelake: Intel i9-9900k - * - Coffeelake: Intel i7-9700k - * - * I haven't been able to reproduce the instability or DSB misses on any - * of the following CPUS: - * - Haswell - * - Broadwell: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GH - * - Skylake - * - * Alignment is done for each of the three major decompression loops: - * - ZSTD_decompressSequences_bodySplitLitBuffer - presplit section of the literal buffer - * - ZSTD_decompressSequences_bodySplitLitBuffer - postsplit section of the literal buffer - * - ZSTD_decompressSequences_body - * Alignment choices are made to minimize large swings on bad cases and influence on performance - * from changes external to this code, rather than to overoptimize on the current commit. - * - * If you are seeing performance stability this script can help test. - * It tests on 4 commits in zstd where I saw performance change. - * - * https://gist.github.com/terrelln/9889fc06a423fd5ca6e99351564473f4 - */ -#if defined(__GNUC__) && defined(__x86_64__) - __asm__(".p2align 6"); -# if __GNUC__ >= 7 - /* good for gcc-7, gcc-9, and gcc-11 */ - __asm__("nop"); - __asm__(".p2align 5"); - __asm__("nop"); - __asm__(".p2align 4"); -# if __GNUC__ == 8 || __GNUC__ == 10 - /* good for gcc-8 and gcc-10 */ - __asm__("nop"); - __asm__(".p2align 3"); -# endif -# endif -#endif - - /* Handle the initial state where litBuffer is currently split between dst and litExtraBuffer */ - for (; litPtr + sequence.litLength <= dctx->litBufferEnd; ) { - size_t const oneSeqSize = ZSTD_execSequenceSplitLitBuffer(op, oend, litPtr + sequence.litLength - WILDCOPY_OVERLENGTH, sequence, &litPtr, litBufferEnd, prefixStart, vBase, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequence, prefixStart, vBase); -#endif - if (UNLIKELY(ZSTD_isError(oneSeqSize))) - return oneSeqSize; - DEBUGLOG(6, "regenerated sequence size : %u", (U32)oneSeqSize); - op += oneSeqSize; - if (UNLIKELY(!--nbSeq)) - break; - BIT_reloadDStream(&(seqState.DStream)); - sequence = ZSTD_decodeSequence(&seqState, isLongOffset); - } - - /* If there are more sequences, they will need to read literals from litExtraBuffer; copy over the remainder from dst and update litPtr and litEnd */ - if (nbSeq > 0) { - const size_t leftoverLit = dctx->litBufferEnd - litPtr; - if (leftoverLit) - { - RETURN_ERROR_IF(leftoverLit > (size_t)(oend - op), dstSize_tooSmall, "remaining lit must fit within dstBuffer"); - ZSTD_safecopyDstBeforeSrc(op, litPtr, leftoverLit); - sequence.litLength -= leftoverLit; - op += leftoverLit; - } - litPtr = dctx->litExtraBuffer; - litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE; - dctx->litBufferLocation = ZSTD_not_in_dst; - { - size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litBufferEnd, prefixStart, vBase, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequence, prefixStart, vBase); -#endif - if (UNLIKELY(ZSTD_isError(oneSeqSize))) - return oneSeqSize; - DEBUGLOG(6, "regenerated sequence size : %u", (U32)oneSeqSize); - op += oneSeqSize; - if (--nbSeq) - BIT_reloadDStream(&(seqState.DStream)); - } - } - } - - if (nbSeq > 0) /* there is remaining lit from extra buffer */ - { - -#if defined(__GNUC__) && defined(__x86_64__) - __asm__(".p2align 6"); - __asm__("nop"); -# if __GNUC__ != 7 - /* worse for gcc-7 better for gcc-8, gcc-9, and gcc-10 and clang */ - __asm__(".p2align 4"); - __asm__("nop"); - __asm__(".p2align 3"); -# elif __GNUC__ >= 11 - __asm__(".p2align 3"); -# else - __asm__(".p2align 5"); - __asm__("nop"); - __asm__(".p2align 3"); -# endif -#endif - - for (; ; ) { - seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset); - size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litBufferEnd, prefixStart, vBase, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequence, prefixStart, vBase); -#endif - if (UNLIKELY(ZSTD_isError(oneSeqSize))) - return oneSeqSize; - DEBUGLOG(6, "regenerated sequence size : %u", (U32)oneSeqSize); - op += oneSeqSize; - if (UNLIKELY(!--nbSeq)) - break; - BIT_reloadDStream(&(seqState.DStream)); - } - } - - /* check if reached exact end */ - DEBUGLOG(5, "ZSTD_decompressSequences_bodySplitLitBuffer: after decode loop, remaining nbSeq : %i", nbSeq); - RETURN_ERROR_IF(nbSeq, corruption_detected, ""); - RETURN_ERROR_IF(BIT_reloadDStream(&seqState.DStream) < BIT_DStream_completed, corruption_detected, ""); - /* save reps for next block */ - { U32 i; for (i=0; ientropy.rep[i] = (U32)(seqState.prevOffset[i]); } - } - - /* last literal segment */ - if (dctx->litBufferLocation == ZSTD_split) /* split hasn't been reached yet, first get dst then copy litExtraBuffer */ - { - size_t const lastLLSize = litBufferEnd - litPtr; - RETURN_ERROR_IF(lastLLSize > (size_t)(oend - op), dstSize_tooSmall, ""); - if (op != NULL) { - ZSTD_memmove(op, litPtr, lastLLSize); - op += lastLLSize; - } - litPtr = dctx->litExtraBuffer; - litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE; - dctx->litBufferLocation = ZSTD_not_in_dst; - } - { size_t const lastLLSize = litBufferEnd - litPtr; - RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, ""); - if (op != NULL) { - ZSTD_memcpy(op, litPtr, lastLLSize); - op += lastLLSize; - } - } - - return op-ostart; -} - -FORCE_INLINE_TEMPLATE size_t -DONT_VECTORIZE -ZSTD_decompressSequences_body(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - const BYTE* ip = (const BYTE*)seqStart; - const BYTE* const iend = ip + seqSize; - BYTE* const ostart = (BYTE*)dst; - BYTE* const oend = dctx->litBufferLocation == ZSTD_not_in_dst ? ostart + maxDstSize : dctx->litBuffer; - BYTE* op = ostart; - const BYTE* litPtr = dctx->litPtr; - const BYTE* const litEnd = litPtr + dctx->litSize; - const BYTE* const prefixStart = (const BYTE*)(dctx->prefixStart); - const BYTE* const vBase = (const BYTE*)(dctx->virtualStart); - const BYTE* const dictEnd = (const BYTE*)(dctx->dictEnd); - DEBUGLOG(5, "ZSTD_decompressSequences_body"); - (void)frame; - - /* Regen sequences */ - if (nbSeq) { - seqState_t seqState; - dctx->fseEntropy = 1; - { U32 i; for (i = 0; i < ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; } - RETURN_ERROR_IF( - ERR_isError(BIT_initDStream(&seqState.DStream, ip, iend - ip)), - corruption_detected, ""); - ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr); - ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr); - ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr); - assert(dst != NULL); - - ZSTD_STATIC_ASSERT( - BIT_DStream_unfinished < BIT_DStream_completed && - BIT_DStream_endOfBuffer < BIT_DStream_completed && - BIT_DStream_completed < BIT_DStream_overflow); - -#if defined(__GNUC__) && defined(__x86_64__) - __asm__(".p2align 6"); - __asm__("nop"); -# if __GNUC__ >= 7 - __asm__(".p2align 5"); - __asm__("nop"); - __asm__(".p2align 3"); -# else - __asm__(".p2align 4"); - __asm__("nop"); - __asm__(".p2align 3"); -# endif -#endif - - for ( ; ; ) { - seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset); - size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litEnd, prefixStart, vBase, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequence, prefixStart, vBase); -#endif - if (UNLIKELY(ZSTD_isError(oneSeqSize))) - return oneSeqSize; - DEBUGLOG(6, "regenerated sequence size : %u", (U32)oneSeqSize); - op += oneSeqSize; - if (UNLIKELY(!--nbSeq)) - break; - BIT_reloadDStream(&(seqState.DStream)); - } - - /* check if reached exact end */ - DEBUGLOG(5, "ZSTD_decompressSequences_body: after decode loop, remaining nbSeq : %i", nbSeq); - RETURN_ERROR_IF(nbSeq, corruption_detected, ""); - RETURN_ERROR_IF(BIT_reloadDStream(&seqState.DStream) < BIT_DStream_completed, corruption_detected, ""); - /* save reps for next block */ - { U32 i; for (i=0; ientropy.rep[i] = (U32)(seqState.prevOffset[i]); } - } - - /* last literal segment */ - { size_t const lastLLSize = litEnd - litPtr; - RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, ""); - if (op != NULL) { - ZSTD_memcpy(op, litPtr, lastLLSize); - op += lastLLSize; - } - } - - return op-ostart; -} - -static size_t -ZSTD_decompressSequences_default(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - return ZSTD_decompressSequences_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} - -static size_t -ZSTD_decompressSequencesSplitLitBuffer_default(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - return ZSTD_decompressSequences_bodySplitLitBuffer(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */ - -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT - -FORCE_INLINE_TEMPLATE size_t -ZSTD_prefetchMatch(size_t prefetchPos, seq_t const sequence, - const BYTE* const prefixStart, const BYTE* const dictEnd) -{ - prefetchPos += sequence.litLength; - { const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart; - const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted. - * No consequence though : memory address is only used for prefetching, not for dereferencing */ - PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */ - } - return prefetchPos + sequence.matchLength; -} - -/* This decoding function employs prefetching - * to reduce latency impact of cache misses. - * It's generally employed when block contains a significant portion of long-distance matches - * or when coupled with a "cold" dictionary */ -FORCE_INLINE_TEMPLATE size_t -ZSTD_decompressSequencesLong_body( - ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - const BYTE* ip = (const BYTE*)seqStart; - const BYTE* const iend = ip + seqSize; - BYTE* const ostart = (BYTE*)dst; - BYTE* const oend = dctx->litBufferLocation == ZSTD_in_dst ? dctx->litBuffer : ostart + maxDstSize; - BYTE* op = ostart; - const BYTE* litPtr = dctx->litPtr; - const BYTE* litBufferEnd = dctx->litBufferEnd; - const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart); - const BYTE* const dictStart = (const BYTE*) (dctx->virtualStart); - const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd); - (void)frame; - - /* Regen sequences */ - if (nbSeq) { -#define STORED_SEQS 8 -#define STORED_SEQS_MASK (STORED_SEQS-1) -#define ADVANCED_SEQS STORED_SEQS - seq_t sequences[STORED_SEQS]; - int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS); - seqState_t seqState; - int seqNb; - size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */ - - dctx->fseEntropy = 1; - { int i; for (i=0; ientropy.rep[i]; } - assert(dst != NULL); - assert(iend >= ip); - RETURN_ERROR_IF( - ERR_isError(BIT_initDStream(&seqState.DStream, ip, iend-ip)), - corruption_detected, ""); - ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr); - ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr); - ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr); - - /* prepare in advance */ - for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNblitBufferLocation == ZSTD_split && litPtr + sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK].litLength > dctx->litBufferEnd) - { - /* lit buffer is reaching split point, empty out the first buffer and transition to litExtraBuffer */ - const size_t leftoverLit = dctx->litBufferEnd - litPtr; - if (leftoverLit) - { - RETURN_ERROR_IF(leftoverLit > (size_t)(oend - op), dstSize_tooSmall, "remaining lit must fit within dstBuffer"); - ZSTD_safecopyDstBeforeSrc(op, litPtr, leftoverLit); - sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK].litLength -= leftoverLit; - op += leftoverLit; - } - litPtr = dctx->litExtraBuffer; - litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE; - dctx->litBufferLocation = ZSTD_not_in_dst; - oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], prefixStart, dictStart); -#endif - if (ZSTD_isError(oneSeqSize)) return oneSeqSize; - - prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd); - sequences[seqNb & STORED_SEQS_MASK] = sequence; - op += oneSeqSize; - } - else - { - /* lit buffer is either wholly contained in first or second split, or not split at all*/ - oneSeqSize = dctx->litBufferLocation == ZSTD_split ? - ZSTD_execSequenceSplitLitBuffer(op, oend, litPtr + sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK].litLength - WILDCOPY_OVERLENGTH, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd) : - ZSTD_execSequence(op, oend, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], prefixStart, dictStart); -#endif - if (ZSTD_isError(oneSeqSize)) return oneSeqSize; - - prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd); - sequences[seqNb & STORED_SEQS_MASK] = sequence; - op += oneSeqSize; - } - } - RETURN_ERROR_IF(seqNblitBufferLocation == ZSTD_split && litPtr + sequence->litLength > dctx->litBufferEnd) - { - const size_t leftoverLit = dctx->litBufferEnd - litPtr; - if (leftoverLit) - { - RETURN_ERROR_IF(leftoverLit > (size_t)(oend - op), dstSize_tooSmall, "remaining lit must fit within dstBuffer"); - ZSTD_safecopyDstBeforeSrc(op, litPtr, leftoverLit); - sequence->litLength -= leftoverLit; - op += leftoverLit; - } - litPtr = dctx->litExtraBuffer; - litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE; - dctx->litBufferLocation = ZSTD_not_in_dst; - { - size_t const oneSeqSize = ZSTD_execSequence(op, oend, *sequence, &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[seqNb&STORED_SEQS_MASK], prefixStart, dictStart); -#endif - if (ZSTD_isError(oneSeqSize)) return oneSeqSize; - op += oneSeqSize; - } - } - else - { - size_t const oneSeqSize = dctx->litBufferLocation == ZSTD_split ? - ZSTD_execSequenceSplitLitBuffer(op, oend, litPtr + sequence->litLength - WILDCOPY_OVERLENGTH, *sequence, &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd) : - ZSTD_execSequence(op, oend, *sequence, &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd); -#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE) - assert(!ZSTD_isError(oneSeqSize)); - if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[seqNb&STORED_SEQS_MASK], prefixStart, dictStart); -#endif - if (ZSTD_isError(oneSeqSize)) return oneSeqSize; - op += oneSeqSize; - } - } - - /* save reps for next block */ - { U32 i; for (i=0; ientropy.rep[i] = (U32)(seqState.prevOffset[i]); } - } - - /* last literal segment */ - if (dctx->litBufferLocation == ZSTD_split) /* first deplete literal buffer in dst, then copy litExtraBuffer */ - { - size_t const lastLLSize = litBufferEnd - litPtr; - RETURN_ERROR_IF(lastLLSize > (size_t)(oend - op), dstSize_tooSmall, ""); - if (op != NULL) { - ZSTD_memmove(op, litPtr, lastLLSize); - op += lastLLSize; - } - litPtr = dctx->litExtraBuffer; - litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE; - } - { size_t const lastLLSize = litBufferEnd - litPtr; - RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, ""); - if (op != NULL) { - ZSTD_memmove(op, litPtr, lastLLSize); - op += lastLLSize; - } - } - - return op-ostart; -} - -static size_t -ZSTD_decompressSequencesLong_default(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - return ZSTD_decompressSequencesLong_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT */ - - - -#if DYNAMIC_BMI2 - -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG -static BMI2_TARGET_ATTRIBUTE size_t -DONT_VECTORIZE -ZSTD_decompressSequences_bmi2(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - return ZSTD_decompressSequences_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -static BMI2_TARGET_ATTRIBUTE size_t -DONT_VECTORIZE -ZSTD_decompressSequencesSplitLitBuffer_bmi2(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - return ZSTD_decompressSequences_bodySplitLitBuffer(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */ - -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT -static BMI2_TARGET_ATTRIBUTE size_t -ZSTD_decompressSequencesLong_bmi2(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - return ZSTD_decompressSequencesLong_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT */ - -#endif /* DYNAMIC_BMI2 */ - -typedef size_t (*ZSTD_decompressSequences_t)( - ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame); - -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG -static size_t -ZSTD_decompressSequences(ZSTD_DCtx* dctx, void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - DEBUGLOG(5, "ZSTD_decompressSequences"); -#if DYNAMIC_BMI2 - if (ZSTD_DCtx_get_bmi2(dctx)) { - return ZSTD_decompressSequences_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); - } -#endif - return ZSTD_decompressSequences_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -static size_t -ZSTD_decompressSequencesSplitLitBuffer(ZSTD_DCtx* dctx, void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - DEBUGLOG(5, "ZSTD_decompressSequencesSplitLitBuffer"); -#if DYNAMIC_BMI2 - if (ZSTD_DCtx_get_bmi2(dctx)) { - return ZSTD_decompressSequencesSplitLitBuffer_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); - } -#endif - return ZSTD_decompressSequencesSplitLitBuffer_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */ - - -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT -/* ZSTD_decompressSequencesLong() : - * decompression function triggered when a minimum share of offsets is considered "long", - * aka out of cache. - * note : "long" definition seems overloaded here, sometimes meaning "wider than bitstream register", and sometimes meaning "farther than memory cache distance". - * This function will try to mitigate main memory latency through the use of prefetching */ -static size_t -ZSTD_decompressSequencesLong(ZSTD_DCtx* dctx, - void* dst, size_t maxDstSize, - const void* seqStart, size_t seqSize, int nbSeq, - const ZSTD_longOffset_e isLongOffset, - const int frame) -{ - DEBUGLOG(5, "ZSTD_decompressSequencesLong"); -#if DYNAMIC_BMI2 - if (ZSTD_DCtx_get_bmi2(dctx)) { - return ZSTD_decompressSequencesLong_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); - } -#endif - return ZSTD_decompressSequencesLong_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame); -} -#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT */ - - - -#if !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT) && \ - !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG) -/* ZSTD_getLongOffsetsShare() : - * condition : offTable must be valid - * @return : "share" of long offsets (arbitrarily defined as > (1<<23)) - * compared to maximum possible of (1< 22) total += 1; - } - - assert(tableLog <= OffFSELog); - total <<= (OffFSELog - tableLog); /* scale to OffFSELog */ - - return total; -} -#endif - -size_t -ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, const int frame, const streaming_operation streaming) -{ /* blockType == blockCompressed */ - const BYTE* ip = (const BYTE*)src; - /* isLongOffset must be true if there are long offsets. - * Offsets are long if they are larger than 2^STREAM_ACCUMULATOR_MIN. - * We don't expect that to be the case in 64-bit mode. - * In block mode, window size is not known, so we have to be conservative. - * (note: but it could be evaluated from current-lowLimit) - */ - ZSTD_longOffset_e const isLongOffset = (ZSTD_longOffset_e)(MEM_32bits() && (!frame || (dctx->fParams.windowSize > (1ULL << STREAM_ACCUMULATOR_MIN)))); - DEBUGLOG(5, "ZSTD_decompressBlock_internal (size : %u)", (U32)srcSize); - - RETURN_ERROR_IF(srcSize >= ZSTD_BLOCKSIZE_MAX, srcSize_wrong, ""); - - /* Decode literals section */ - { size_t const litCSize = ZSTD_decodeLiteralsBlock(dctx, src, srcSize, dst, dstCapacity, streaming); - DEBUGLOG(5, "ZSTD_decodeLiteralsBlock : %u", (U32)litCSize); - if (ZSTD_isError(litCSize)) return litCSize; - ip += litCSize; - srcSize -= litCSize; - } - - /* Build Decoding Tables */ - { - /* These macros control at build-time which decompressor implementation - * we use. If neither is defined, we do some inspection and dispatch at - * runtime. - */ -#if !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT) && \ - !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG) - int usePrefetchDecoder = dctx->ddictIsCold; -#endif - int nbSeq; - size_t const seqHSize = ZSTD_decodeSeqHeaders(dctx, &nbSeq, ip, srcSize); - if (ZSTD_isError(seqHSize)) return seqHSize; - ip += seqHSize; - srcSize -= seqHSize; - - RETURN_ERROR_IF(dst == NULL && nbSeq > 0, dstSize_tooSmall, "NULL not handled"); - -#if !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT) && \ - !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG) - if ( !usePrefetchDecoder - && (!frame || (dctx->fParams.windowSize > (1<<24))) - && (nbSeq>ADVANCED_SEQS) ) { /* could probably use a larger nbSeq limit */ - U32 const shareLongOffsets = ZSTD_getLongOffsetsShare(dctx->OFTptr); - U32 const minShare = MEM_64bits() ? 7 : 20; /* heuristic values, correspond to 2.73% and 7.81% */ - usePrefetchDecoder = (shareLongOffsets >= minShare); - } -#endif - - dctx->ddictIsCold = 0; - -#if !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT) && \ - !defined(ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG) - if (usePrefetchDecoder) -#endif -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT - return ZSTD_decompressSequencesLong(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset, frame); -#endif - -#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG - /* else */ - if (dctx->litBufferLocation == ZSTD_split) - return ZSTD_decompressSequencesSplitLitBuffer(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset, frame); - else - return ZSTD_decompressSequences(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset, frame); -#endif - } -} - - -void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize) -{ - if (dst != dctx->previousDstEnd && dstSize > 0) { /* not contiguous */ - dctx->dictEnd = dctx->previousDstEnd; - dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart)); - dctx->prefixStart = dst; - dctx->previousDstEnd = dst; - } -} - - -size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize) -{ - size_t dSize; - ZSTD_checkContinuity(dctx, dst, dstCapacity); - dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 0, not_streaming); - dctx->previousDstEnd = (char*)dst + dSize; - return dSize; -} diff --git a/stage1/zstd/lib/decompress/zstd_decompress_block.h b/stage1/zstd/lib/decompress/zstd_decompress_block.h deleted file mode 100644 index c61a9d0c4b..0000000000 --- a/stage1/zstd/lib/decompress/zstd_decompress_block.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - - -#ifndef ZSTD_DEC_BLOCK_H -#define ZSTD_DEC_BLOCK_H - -/*-******************************************************* - * Dependencies - *********************************************************/ -#include "../common/zstd_deps.h" /* size_t */ -#include "../zstd.h" /* DCtx, and some public functions */ -#include "../common/zstd_internal.h" /* blockProperties_t, and some public functions */ -#include "zstd_decompress_internal.h" /* ZSTD_seqSymbol */ - - -/* === Prototypes === */ - -/* note: prototypes already published within `zstd.h` : - * ZSTD_decompressBlock() - */ - -/* note: prototypes already published within `zstd_internal.h` : - * ZSTD_getcBlockSize() - * ZSTD_decodeSeqHeaders() - */ - - - /* Streaming state is used to inform allocation of the literal buffer */ -typedef enum { - not_streaming = 0, - is_streaming = 1 -} streaming_operation; - -/* ZSTD_decompressBlock_internal() : - * decompress block, starting at `src`, - * into destination buffer `dst`. - * @return : decompressed block size, - * or an error code (which can be tested using ZSTD_isError()) - */ -size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, const int frame, const streaming_operation streaming); - -/* ZSTD_buildFSETable() : - * generate FSE decoding table for one symbol (ll, ml or off) - * this function must be called with valid parameters only - * (dt is large enough, normalizedCounter distribution total is a power of 2, max is within range, etc.) - * in which case it cannot fail. - * The workspace must be 4-byte aligned and at least ZSTD_BUILD_FSE_TABLE_WKSP_SIZE bytes, which is - * defined in zstd_decompress_internal.h. - * Internal use only. - */ -void ZSTD_buildFSETable(ZSTD_seqSymbol* dt, - const short* normalizedCounter, unsigned maxSymbolValue, - const U32* baseValue, const U8* nbAdditionalBits, - unsigned tableLog, void* wksp, size_t wkspSize, - int bmi2); - - -#endif /* ZSTD_DEC_BLOCK_H */ diff --git a/stage1/zstd/lib/decompress/zstd_decompress_internal.h b/stage1/zstd/lib/decompress/zstd_decompress_internal.h deleted file mode 100644 index 2b5a53850a..0000000000 --- a/stage1/zstd/lib/decompress/zstd_decompress_internal.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - - -/* zstd_decompress_internal: - * objects and definitions shared within lib/decompress modules */ - - #ifndef ZSTD_DECOMPRESS_INTERNAL_H - #define ZSTD_DECOMPRESS_INTERNAL_H - - -/*-******************************************************* - * Dependencies - *********************************************************/ -#include "../common/mem.h" /* BYTE, U16, U32 */ -#include "../common/zstd_internal.h" /* constants : MaxLL, MaxML, MaxOff, LLFSELog, etc. */ - - - -/*-******************************************************* - * Constants - *********************************************************/ -static UNUSED_ATTR const U32 LL_base[MaxLL+1] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 18, 20, 22, 24, 28, 32, 40, - 48, 64, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, - 0x2000, 0x4000, 0x8000, 0x10000 }; - -static UNUSED_ATTR const U32 OF_base[MaxOff+1] = { - 0, 1, 1, 5, 0xD, 0x1D, 0x3D, 0x7D, - 0xFD, 0x1FD, 0x3FD, 0x7FD, 0xFFD, 0x1FFD, 0x3FFD, 0x7FFD, - 0xFFFD, 0x1FFFD, 0x3FFFD, 0x7FFFD, 0xFFFFD, 0x1FFFFD, 0x3FFFFD, 0x7FFFFD, - 0xFFFFFD, 0x1FFFFFD, 0x3FFFFFD, 0x7FFFFFD, 0xFFFFFFD, 0x1FFFFFFD, 0x3FFFFFFD, 0x7FFFFFFD }; - -static UNUSED_ATTR const U8 OF_bits[MaxOff+1] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31 }; - -static UNUSED_ATTR const U32 ML_base[MaxML+1] = { - 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, - 35, 37, 39, 41, 43, 47, 51, 59, - 67, 83, 99, 0x83, 0x103, 0x203, 0x403, 0x803, - 0x1003, 0x2003, 0x4003, 0x8003, 0x10003 }; - - -/*-******************************************************* - * Decompression types - *********************************************************/ - typedef struct { - U32 fastMode; - U32 tableLog; - } ZSTD_seqSymbol_header; - - typedef struct { - U16 nextState; - BYTE nbAdditionalBits; - BYTE nbBits; - U32 baseValue; - } ZSTD_seqSymbol; - - #define SEQSYMBOL_TABLE_SIZE(log) (1 + (1 << (log))) - -#define ZSTD_BUILD_FSE_TABLE_WKSP_SIZE (sizeof(S16) * (MaxSeq + 1) + (1u << MaxFSELog) + sizeof(U64)) -#define ZSTD_BUILD_FSE_TABLE_WKSP_SIZE_U32 ((ZSTD_BUILD_FSE_TABLE_WKSP_SIZE + sizeof(U32) - 1) / sizeof(U32)) - -typedef struct { - ZSTD_seqSymbol LLTable[SEQSYMBOL_TABLE_SIZE(LLFSELog)]; /* Note : Space reserved for FSE Tables */ - ZSTD_seqSymbol OFTable[SEQSYMBOL_TABLE_SIZE(OffFSELog)]; /* is also used as temporary workspace while building hufTable during DDict creation */ - ZSTD_seqSymbol MLTable[SEQSYMBOL_TABLE_SIZE(MLFSELog)]; /* and therefore must be at least HUF_DECOMPRESS_WORKSPACE_SIZE large */ - HUF_DTable hufTable[HUF_DTABLE_SIZE(HufLog)]; /* can accommodate HUF_decompress4X */ - U32 rep[ZSTD_REP_NUM]; - U32 workspace[ZSTD_BUILD_FSE_TABLE_WKSP_SIZE_U32]; -} ZSTD_entropyDTables_t; - -typedef enum { ZSTDds_getFrameHeaderSize, ZSTDds_decodeFrameHeader, - ZSTDds_decodeBlockHeader, ZSTDds_decompressBlock, - ZSTDds_decompressLastBlock, ZSTDds_checkChecksum, - ZSTDds_decodeSkippableHeader, ZSTDds_skipFrame } ZSTD_dStage; - -typedef enum { zdss_init=0, zdss_loadHeader, - zdss_read, zdss_load, zdss_flush } ZSTD_dStreamStage; - -typedef enum { - ZSTD_use_indefinitely = -1, /* Use the dictionary indefinitely */ - ZSTD_dont_use = 0, /* Do not use the dictionary (if one exists free it) */ - ZSTD_use_once = 1 /* Use the dictionary once and set to ZSTD_dont_use */ -} ZSTD_dictUses_e; - -/* Hashset for storing references to multiple ZSTD_DDict within ZSTD_DCtx */ -typedef struct { - const ZSTD_DDict** ddictPtrTable; - size_t ddictPtrTableSize; - size_t ddictPtrCount; -} ZSTD_DDictHashSet; - -#ifndef ZSTD_DECODER_INTERNAL_BUFFER -# define ZSTD_DECODER_INTERNAL_BUFFER (1 << 16) -#endif - -#define ZSTD_LBMIN 64 -#define ZSTD_LBMAX (128 << 10) - -/* extra buffer, compensates when dst is not large enough to store litBuffer */ -#define ZSTD_LITBUFFEREXTRASIZE BOUNDED(ZSTD_LBMIN, ZSTD_DECODER_INTERNAL_BUFFER, ZSTD_LBMAX) - -typedef enum { - ZSTD_not_in_dst = 0, /* Stored entirely within litExtraBuffer */ - ZSTD_in_dst = 1, /* Stored entirely within dst (in memory after current output write) */ - ZSTD_split = 2 /* Split between litExtraBuffer and dst */ -} ZSTD_litLocation_e; - -struct ZSTD_DCtx_s -{ - const ZSTD_seqSymbol* LLTptr; - const ZSTD_seqSymbol* MLTptr; - const ZSTD_seqSymbol* OFTptr; - const HUF_DTable* HUFptr; - ZSTD_entropyDTables_t entropy; - U32 workspace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32]; /* space needed when building huffman tables */ - const void* previousDstEnd; /* detect continuity */ - const void* prefixStart; /* start of current segment */ - const void* virtualStart; /* virtual start of previous segment if it was just before current one */ - const void* dictEnd; /* end of previous segment */ - size_t expected; - ZSTD_frameHeader fParams; - U64 processedCSize; - U64 decodedSize; - blockType_e bType; /* used in ZSTD_decompressContinue(), store blockType between block header decoding and block decompression stages */ - ZSTD_dStage stage; - U32 litEntropy; - U32 fseEntropy; - XXH64_state_t xxhState; - size_t headerSize; - ZSTD_format_e format; - ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum; /* User specified: if == 1, will ignore checksums in compressed frame. Default == 0 */ - U32 validateChecksum; /* if == 1, will validate checksum. Is == 1 if (fParams.checksumFlag == 1) and (forceIgnoreChecksum == 0). */ - const BYTE* litPtr; - ZSTD_customMem customMem; - size_t litSize; - size_t rleSize; - size_t staticSize; -#if DYNAMIC_BMI2 != 0 - int bmi2; /* == 1 if the CPU supports BMI2 and 0 otherwise. CPU support is determined dynamically once per context lifetime. */ -#endif - - /* dictionary */ - ZSTD_DDict* ddictLocal; - const ZSTD_DDict* ddict; /* set by ZSTD_initDStream_usingDDict(), or ZSTD_DCtx_refDDict() */ - U32 dictID; - int ddictIsCold; /* if == 1 : dictionary is "new" for working context, and presumed "cold" (not in cpu cache) */ - ZSTD_dictUses_e dictUses; - ZSTD_DDictHashSet* ddictSet; /* Hash set for multiple ddicts */ - ZSTD_refMultipleDDicts_e refMultipleDDicts; /* User specified: if == 1, will allow references to multiple DDicts. Default == 0 (disabled) */ - - /* streaming */ - ZSTD_dStreamStage streamStage; - char* inBuff; - size_t inBuffSize; - size_t inPos; - size_t maxWindowSize; - char* outBuff; - size_t outBuffSize; - size_t outStart; - size_t outEnd; - size_t lhSize; -#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1) - void* legacyContext; - U32 previousLegacyVersion; - U32 legacyVersion; -#endif - U32 hostageByte; - int noForwardProgress; - ZSTD_bufferMode_e outBufferMode; - ZSTD_outBuffer expectedOutBuffer; - - /* workspace */ - BYTE* litBuffer; - const BYTE* litBufferEnd; - ZSTD_litLocation_e litBufferLocation; - BYTE litExtraBuffer[ZSTD_LITBUFFEREXTRASIZE + WILDCOPY_OVERLENGTH]; /* literal buffer can be split between storage within dst and within this scratch buffer */ - BYTE headerBuffer[ZSTD_FRAMEHEADERSIZE_MAX]; - - size_t oversizedDuration; - -#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION - void const* dictContentBeginForFuzzing; - void const* dictContentEndForFuzzing; -#endif - - /* Tracing */ -#if ZSTD_TRACE - ZSTD_TraceCtx traceCtx; -#endif -}; /* typedef'd to ZSTD_DCtx within "zstd.h" */ - -MEM_STATIC int ZSTD_DCtx_get_bmi2(const struct ZSTD_DCtx_s *dctx) { -#if DYNAMIC_BMI2 != 0 - return dctx->bmi2; -#else - (void)dctx; - return 0; -#endif -} - -/*-******************************************************* - * Shared internal functions - *********************************************************/ - -/*! ZSTD_loadDEntropy() : - * dict : must point at beginning of a valid zstd dictionary. - * @return : size of dictionary header (size of magic number + dict ID + entropy tables) */ -size_t ZSTD_loadDEntropy(ZSTD_entropyDTables_t* entropy, - const void* const dict, size_t const dictSize); - -/*! ZSTD_checkContinuity() : - * check if next `dst` follows previous position, where decompression ended. - * If yes, do nothing (continue on current segment). - * If not, classify previous segment as "external dictionary", and start a new segment. - * This function cannot fail. */ -void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize); - - -#endif /* ZSTD_DECOMPRESS_INTERNAL_H */ diff --git a/stage1/zstd/lib/zstd.h b/stage1/zstd/lib/zstd.h deleted file mode 100644 index a88ae7bf8e..0000000000 --- a/stage1/zstd/lib/zstd.h +++ /dev/null @@ -1,2575 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ -#if defined (__cplusplus) -extern "C" { -#endif - -#ifndef ZSTD_H_235446 -#define ZSTD_H_235446 - -/* ====== Dependency ======*/ -#include /* INT_MAX */ -#include /* size_t */ - - -/* ===== ZSTDLIB_API : control library symbols visibility ===== */ -#ifndef ZSTDLIB_VISIBLE -# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__) -# define ZSTDLIB_VISIBLE __attribute__ ((visibility ("default"))) -# define ZSTDLIB_HIDDEN __attribute__ ((visibility ("hidden"))) -# else -# define ZSTDLIB_VISIBLE -# define ZSTDLIB_HIDDEN -# endif -#endif -#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) -# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBLE -#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) -# define ZSTDLIB_API __declspec(dllimport) ZSTDLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ -#else -# define ZSTDLIB_API ZSTDLIB_VISIBLE -#endif - - -/******************************************************************************* - Introduction - - zstd, short for Zstandard, is a fast lossless compression algorithm, targeting - real-time compression scenarios at zlib-level and better compression ratios. - The zstd compression library provides in-memory compression and decompression - functions. - - The library supports regular compression levels from 1 up to ZSTD_maxCLevel(), - which is currently 22. Levels >= 20, labeled `--ultra`, should be used with - caution, as they require more memory. The library also offers negative - compression levels, which extend the range of speed vs. ratio preferences. - The lower the level, the faster the speed (at the cost of compression). - - Compression can be done in: - - a single step (described as Simple API) - - a single step, reusing a context (described as Explicit context) - - unbounded multiple steps (described as Streaming compression) - - The compression ratio achievable on small data can be highly improved using - a dictionary. Dictionary compression can be performed in: - - a single step (described as Simple dictionary API) - - a single step, reusing a dictionary (described as Bulk-processing - dictionary API) - - Advanced experimental functions can be accessed using - `#define ZSTD_STATIC_LINKING_ONLY` before including zstd.h. - - Advanced experimental APIs should never be used with a dynamically-linked - library. They are not "stable"; their definitions or signatures may change in - the future. Only static linking is allowed. -*******************************************************************************/ - -/*------ Version ------*/ -#define ZSTD_VERSION_MAJOR 1 -#define ZSTD_VERSION_MINOR 5 -#define ZSTD_VERSION_RELEASE 2 -#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE) - -/*! ZSTD_versionNumber() : - * Return runtime library version, the value is (MAJOR*100*100 + MINOR*100 + RELEASE). */ -ZSTDLIB_API unsigned ZSTD_versionNumber(void); - -#define ZSTD_LIB_VERSION ZSTD_VERSION_MAJOR.ZSTD_VERSION_MINOR.ZSTD_VERSION_RELEASE -#define ZSTD_QUOTE(str) #str -#define ZSTD_EXPAND_AND_QUOTE(str) ZSTD_QUOTE(str) -#define ZSTD_VERSION_STRING ZSTD_EXPAND_AND_QUOTE(ZSTD_LIB_VERSION) - -/*! ZSTD_versionString() : - * Return runtime library version, like "1.4.5". Requires v1.3.0+. */ -ZSTDLIB_API const char* ZSTD_versionString(void); - -/* ************************************* - * Default constant - ***************************************/ -#ifndef ZSTD_CLEVEL_DEFAULT -# define ZSTD_CLEVEL_DEFAULT 3 -#endif - -/* ************************************* - * Constants - ***************************************/ - -/* All magic numbers are supposed read/written to/from files/memory using little-endian convention */ -#define ZSTD_MAGICNUMBER 0xFD2FB528 /* valid since v0.8.0 */ -#define ZSTD_MAGIC_DICTIONARY 0xEC30A437 /* valid since v0.7.0 */ -#define ZSTD_MAGIC_SKIPPABLE_START 0x184D2A50 /* all 16 values, from 0x184D2A50 to 0x184D2A5F, signal the beginning of a skippable frame */ -#define ZSTD_MAGIC_SKIPPABLE_MASK 0xFFFFFFF0 - -#define ZSTD_BLOCKSIZELOG_MAX 17 -#define ZSTD_BLOCKSIZE_MAX (1<= `ZSTD_compressBound(srcSize)`. - * @return : compressed size written into `dst` (<= `dstCapacity), - * or an error code if it fails (which can be tested using ZSTD_isError()). */ -ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - int compressionLevel); - -/*! ZSTD_decompress() : - * `compressedSize` : must be the _exact_ size of some number of compressed and/or skippable frames. - * `dstCapacity` is an upper bound of originalSize to regenerate. - * If user cannot imply a maximum upper bound, it's better to use streaming mode to decompress data. - * @return : the number of bytes decompressed into `dst` (<= `dstCapacity`), - * or an errorCode if it fails (which can be tested using ZSTD_isError()). */ -ZSTDLIB_API size_t ZSTD_decompress( void* dst, size_t dstCapacity, - const void* src, size_t compressedSize); - -/*! ZSTD_getFrameContentSize() : requires v1.3.0+ - * `src` should point to the start of a ZSTD encoded frame. - * `srcSize` must be at least as large as the frame header. - * hint : any size >= `ZSTD_frameHeaderSize_max` is large enough. - * @return : - decompressed size of `src` frame content, if known - * - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined - * - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) - * note 1 : a 0 return value means the frame is valid but "empty". - * note 2 : decompressed size is an optional field, it may not be present, typically in streaming mode. - * When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. - * In which case, it's necessary to use streaming mode to decompress data. - * Optionally, application can rely on some implicit limit, - * as ZSTD_decompress() only needs an upper bound of decompressed size. - * (For example, data could be necessarily cut into blocks <= 16 KB). - * note 3 : decompressed size is always present when compression is completed using single-pass functions, - * such as ZSTD_compress(), ZSTD_compressCCtx() ZSTD_compress_usingDict() or ZSTD_compress_usingCDict(). - * note 4 : decompressed size can be very large (64-bits value), - * potentially larger than what local system can handle as a single memory segment. - * In which case, it's necessary to use streaming mode to decompress data. - * note 5 : If source is untrusted, decompressed size could be wrong or intentionally modified. - * Always ensure return value fits within application's authorized limits. - * Each application can set its own limits. - * note 6 : This function replaces ZSTD_getDecompressedSize() */ -#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1) -#define ZSTD_CONTENTSIZE_ERROR (0ULL - 2) -ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize); - -/*! ZSTD_getDecompressedSize() : - * NOTE: This function is now obsolete, in favor of ZSTD_getFrameContentSize(). - * Both functions work the same way, but ZSTD_getDecompressedSize() blends - * "empty", "unknown" and "error" results to the same return value (0), - * while ZSTD_getFrameContentSize() gives them separate return values. - * @return : decompressed size of `src` frame content _if known and not empty_, 0 otherwise. */ -ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize); - -/*! ZSTD_findFrameCompressedSize() : Requires v1.4.0+ - * `src` should point to the start of a ZSTD frame or skippable frame. - * `srcSize` must be >= first frame size - * @return : the compressed size of the first frame starting at `src`, - * suitable to pass as `srcSize` to `ZSTD_decompress` or similar, - * or an error code if input is invalid */ -ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize); - - -/*====== Helper functions ======*/ -#define ZSTD_COMPRESSBOUND(srcSize) ((srcSize) + ((srcSize)>>8) + (((srcSize) < (128<<10)) ? (((128<<10) - (srcSize)) >> 11) /* margin, from 64 to 0 */ : 0)) /* this formula ensures that bound(A) + bound(B) <= bound(A+B) as long as A and B >= 128 KB */ -ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size in worst case single-pass scenario */ -ZSTDLIB_API unsigned ZSTD_isError(size_t code); /*!< tells if a `size_t` function result is an error code */ -ZSTDLIB_API const char* ZSTD_getErrorName(size_t code); /*!< provides readable string from an error code */ -ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed, requires v1.4.0+ */ -ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compression level available */ -ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compression level, specified by ZSTD_CLEVEL_DEFAULT, requires v1.5.0+ */ - - -/*************************************** -* Explicit context -***************************************/ -/*= Compression context - * When compressing many times, - * it is recommended to allocate a context just once, - * and re-use it for each successive compression operation. - * This will make workload friendlier for system's memory. - * Note : re-using context is just a speed / resource optimization. - * It doesn't change the compression ratio, which remains identical. - * Note 2 : In multi-threaded environments, - * use one different context per thread for parallel execution. - */ -typedef struct ZSTD_CCtx_s ZSTD_CCtx; -ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void); -ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* accept NULL pointer */ - -/*! ZSTD_compressCCtx() : - * Same as ZSTD_compress(), using an explicit ZSTD_CCtx. - * Important : in order to behave similarly to `ZSTD_compress()`, - * this function compresses at requested compression level, - * __ignoring any other parameter__ . - * If any advanced parameter was set using the advanced API, - * they will all be reset. Only `compressionLevel` remains. - */ -ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - int compressionLevel); - -/*= Decompression context - * When decompressing many times, - * it is recommended to allocate a context only once, - * and re-use it for each successive compression operation. - * This will make workload friendlier for system's memory. - * Use one context per thread for parallel execution. */ -typedef struct ZSTD_DCtx_s ZSTD_DCtx; -ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx(void); -ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /* accept NULL pointer */ - -/*! ZSTD_decompressDCtx() : - * Same as ZSTD_decompress(), - * requires an allocated ZSTD_DCtx. - * Compatible with sticky parameters. - */ -ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize); - - -/********************************************* -* Advanced compression API (Requires v1.4.0+) -**********************************************/ - -/* API design : - * Parameters are pushed one by one into an existing context, - * using ZSTD_CCtx_set*() functions. - * Pushed parameters are sticky : they are valid for next compressed frame, and any subsequent frame. - * "sticky" parameters are applicable to `ZSTD_compress2()` and `ZSTD_compressStream*()` ! - * __They do not apply to "simple" one-shot variants such as ZSTD_compressCCtx()__ . - * - * It's possible to reset all parameters to "default" using ZSTD_CCtx_reset(). - * - * This API supersedes all other "advanced" API entry points in the experimental section. - * In the future, we expect to remove from experimental API entry points which are redundant with this API. - */ - - -/* Compression strategies, listed from fastest to strongest */ -typedef enum { ZSTD_fast=1, - ZSTD_dfast=2, - ZSTD_greedy=3, - ZSTD_lazy=4, - ZSTD_lazy2=5, - ZSTD_btlazy2=6, - ZSTD_btopt=7, - ZSTD_btultra=8, - ZSTD_btultra2=9 - /* note : new strategies _might_ be added in the future. - Only the order (from fast to strong) is guaranteed */ -} ZSTD_strategy; - -typedef enum { - - /* compression parameters - * Note: When compressing with a ZSTD_CDict these parameters are superseded - * by the parameters used to construct the ZSTD_CDict. - * See ZSTD_CCtx_refCDict() for more info (superseded-by-cdict). */ - ZSTD_c_compressionLevel=100, /* Set compression parameters according to pre-defined cLevel table. - * Note that exact compression parameters are dynamically determined, - * depending on both compression level and srcSize (when known). - * Default level is ZSTD_CLEVEL_DEFAULT==3. - * Special: value 0 means default, which is controlled by ZSTD_CLEVEL_DEFAULT. - * Note 1 : it's possible to pass a negative compression level. - * Note 2 : setting a level does not automatically set all other compression parameters - * to default. Setting this will however eventually dynamically impact the compression - * parameters which have not been manually set. The manually set - * ones will 'stick'. */ - /* Advanced compression parameters : - * It's possible to pin down compression parameters to some specific values. - * In which case, these values are no longer dynamically selected by the compressor */ - ZSTD_c_windowLog=101, /* Maximum allowed back-reference distance, expressed as power of 2. - * This will set a memory budget for streaming decompression, - * with larger values requiring more memory - * and typically compressing more. - * Must be clamped between ZSTD_WINDOWLOG_MIN and ZSTD_WINDOWLOG_MAX. - * Special: value 0 means "use default windowLog". - * Note: Using a windowLog greater than ZSTD_WINDOWLOG_LIMIT_DEFAULT - * requires explicitly allowing such size at streaming decompression stage. */ - ZSTD_c_hashLog=102, /* Size of the initial probe table, as a power of 2. - * Resulting memory usage is (1 << (hashLog+2)). - * Must be clamped between ZSTD_HASHLOG_MIN and ZSTD_HASHLOG_MAX. - * Larger tables improve compression ratio of strategies <= dFast, - * and improve speed of strategies > dFast. - * Special: value 0 means "use default hashLog". */ - ZSTD_c_chainLog=103, /* Size of the multi-probe search table, as a power of 2. - * Resulting memory usage is (1 << (chainLog+2)). - * Must be clamped between ZSTD_CHAINLOG_MIN and ZSTD_CHAINLOG_MAX. - * Larger tables result in better and slower compression. - * This parameter is useless for "fast" strategy. - * It's still useful when using "dfast" strategy, - * in which case it defines a secondary probe table. - * Special: value 0 means "use default chainLog". */ - ZSTD_c_searchLog=104, /* Number of search attempts, as a power of 2. - * More attempts result in better and slower compression. - * This parameter is useless for "fast" and "dFast" strategies. - * Special: value 0 means "use default searchLog". */ - ZSTD_c_minMatch=105, /* Minimum size of searched matches. - * Note that Zstandard can still find matches of smaller size, - * it just tweaks its search algorithm to look for this size and larger. - * Larger values increase compression and decompression speed, but decrease ratio. - * Must be clamped between ZSTD_MINMATCH_MIN and ZSTD_MINMATCH_MAX. - * Note that currently, for all strategies < btopt, effective minimum is 4. - * , for all strategies > fast, effective maximum is 6. - * Special: value 0 means "use default minMatchLength". */ - ZSTD_c_targetLength=106, /* Impact of this field depends on strategy. - * For strategies btopt, btultra & btultra2: - * Length of Match considered "good enough" to stop search. - * Larger values make compression stronger, and slower. - * For strategy fast: - * Distance between match sampling. - * Larger values make compression faster, and weaker. - * Special: value 0 means "use default targetLength". */ - ZSTD_c_strategy=107, /* See ZSTD_strategy enum definition. - * The higher the value of selected strategy, the more complex it is, - * resulting in stronger and slower compression. - * Special: value 0 means "use default strategy". */ - /* LDM mode parameters */ - ZSTD_c_enableLongDistanceMatching=160, /* Enable long distance matching. - * This parameter is designed to improve compression ratio - * for large inputs, by finding large matches at long distance. - * It increases memory usage and window size. - * Note: enabling this parameter increases default ZSTD_c_windowLog to 128 MB - * except when expressly set to a different value. - * Note: will be enabled by default if ZSTD_c_windowLog >= 128 MB and - * compression strategy >= ZSTD_btopt (== compression level 16+) */ - ZSTD_c_ldmHashLog=161, /* Size of the table for long distance matching, as a power of 2. - * Larger values increase memory usage and compression ratio, - * but decrease compression speed. - * Must be clamped between ZSTD_HASHLOG_MIN and ZSTD_HASHLOG_MAX - * default: windowlog - 7. - * Special: value 0 means "automatically determine hashlog". */ - ZSTD_c_ldmMinMatch=162, /* Minimum match size for long distance matcher. - * Larger/too small values usually decrease compression ratio. - * Must be clamped between ZSTD_LDM_MINMATCH_MIN and ZSTD_LDM_MINMATCH_MAX. - * Special: value 0 means "use default value" (default: 64). */ - ZSTD_c_ldmBucketSizeLog=163, /* Log size of each bucket in the LDM hash table for collision resolution. - * Larger values improve collision resolution but decrease compression speed. - * The maximum value is ZSTD_LDM_BUCKETSIZELOG_MAX. - * Special: value 0 means "use default value" (default: 3). */ - ZSTD_c_ldmHashRateLog=164, /* Frequency of inserting/looking up entries into the LDM hash table. - * Must be clamped between 0 and (ZSTD_WINDOWLOG_MAX - ZSTD_HASHLOG_MIN). - * Default is MAX(0, (windowLog - ldmHashLog)), optimizing hash table usage. - * Larger values improve compression speed. - * Deviating far from default value will likely result in a compression ratio decrease. - * Special: value 0 means "automatically determine hashRateLog". */ - - /* frame parameters */ - ZSTD_c_contentSizeFlag=200, /* Content size will be written into frame header _whenever known_ (default:1) - * Content size must be known at the beginning of compression. - * This is automatically the case when using ZSTD_compress2(), - * For streaming scenarios, content size must be provided with ZSTD_CCtx_setPledgedSrcSize() */ - ZSTD_c_checksumFlag=201, /* A 32-bits checksum of content is written at end of frame (default:0) */ - ZSTD_c_dictIDFlag=202, /* When applicable, dictionary's ID is written into frame header (default:1) */ - - /* multi-threading parameters */ - /* These parameters are only active if multi-threading is enabled (compiled with build macro ZSTD_MULTITHREAD). - * Otherwise, trying to set any other value than default (0) will be a no-op and return an error. - * In a situation where it's unknown if the linked library supports multi-threading or not, - * setting ZSTD_c_nbWorkers to any value >= 1 and consulting the return value provides a quick way to check this property. - */ - ZSTD_c_nbWorkers=400, /* Select how many threads will be spawned to compress in parallel. - * When nbWorkers >= 1, triggers asynchronous mode when invoking ZSTD_compressStream*() : - * ZSTD_compressStream*() consumes input and flush output if possible, but immediately gives back control to caller, - * while compression is performed in parallel, within worker thread(s). - * (note : a strong exception to this rule is when first invocation of ZSTD_compressStream2() sets ZSTD_e_end : - * in which case, ZSTD_compressStream2() delegates to ZSTD_compress2(), which is always a blocking call). - * More workers improve speed, but also increase memory usage. - * Default value is `0`, aka "single-threaded mode" : no worker is spawned, - * compression is performed inside Caller's thread, and all invocations are blocking */ - ZSTD_c_jobSize=401, /* Size of a compression job. This value is enforced only when nbWorkers >= 1. - * Each compression job is completed in parallel, so this value can indirectly impact the nb of active threads. - * 0 means default, which is dynamically determined based on compression parameters. - * Job size must be a minimum of overlap size, or ZSTDMT_JOBSIZE_MIN (= 512 KB), whichever is largest. - * The minimum size is automatically and transparently enforced. */ - ZSTD_c_overlapLog=402, /* Control the overlap size, as a fraction of window size. - * The overlap size is an amount of data reloaded from previous job at the beginning of a new job. - * It helps preserve compression ratio, while each job is compressed in parallel. - * This value is enforced only when nbWorkers >= 1. - * Larger values increase compression ratio, but decrease speed. - * Possible values range from 0 to 9 : - * - 0 means "default" : value will be determined by the library, depending on strategy - * - 1 means "no overlap" - * - 9 means "full overlap", using a full window size. - * Each intermediate rank increases/decreases load size by a factor 2 : - * 9: full window; 8: w/2; 7: w/4; 6: w/8; 5:w/16; 4: w/32; 3:w/64; 2:w/128; 1:no overlap; 0:default - * default value varies between 6 and 9, depending on strategy */ - - /* note : additional experimental parameters are also available - * within the experimental section of the API. - * At the time of this writing, they include : - * ZSTD_c_rsyncable - * ZSTD_c_format - * ZSTD_c_forceMaxWindow - * ZSTD_c_forceAttachDict - * ZSTD_c_literalCompressionMode - * ZSTD_c_targetCBlockSize - * ZSTD_c_srcSizeHint - * ZSTD_c_enableDedicatedDictSearch - * ZSTD_c_stableInBuffer - * ZSTD_c_stableOutBuffer - * ZSTD_c_blockDelimiters - * ZSTD_c_validateSequences - * ZSTD_c_useBlockSplitter - * ZSTD_c_useRowMatchFinder - * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. - * note : never ever use experimentalParam? names directly; - * also, the enums values themselves are unstable and can still change. - */ - ZSTD_c_experimentalParam1=500, - ZSTD_c_experimentalParam2=10, - ZSTD_c_experimentalParam3=1000, - ZSTD_c_experimentalParam4=1001, - ZSTD_c_experimentalParam5=1002, - ZSTD_c_experimentalParam6=1003, - ZSTD_c_experimentalParam7=1004, - ZSTD_c_experimentalParam8=1005, - ZSTD_c_experimentalParam9=1006, - ZSTD_c_experimentalParam10=1007, - ZSTD_c_experimentalParam11=1008, - ZSTD_c_experimentalParam12=1009, - ZSTD_c_experimentalParam13=1010, - ZSTD_c_experimentalParam14=1011, - ZSTD_c_experimentalParam15=1012 -} ZSTD_cParameter; - -typedef struct { - size_t error; - int lowerBound; - int upperBound; -} ZSTD_bounds; - -/*! ZSTD_cParam_getBounds() : - * All parameters must belong to an interval with lower and upper bounds, - * otherwise they will either trigger an error or be automatically clamped. - * @return : a structure, ZSTD_bounds, which contains - * - an error status field, which must be tested using ZSTD_isError() - * - lower and upper bounds, both inclusive - */ -ZSTDLIB_API ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam); - -/*! ZSTD_CCtx_setParameter() : - * Set one compression parameter, selected by enum ZSTD_cParameter. - * All parameters have valid bounds. Bounds can be queried using ZSTD_cParam_getBounds(). - * Providing a value beyond bound will either clamp it, or trigger an error (depending on parameter). - * Setting a parameter is generally only possible during frame initialization (before starting compression). - * Exception : when using multi-threading mode (nbWorkers >= 1), - * the following parameters can be updated _during_ compression (within same frame): - * => compressionLevel, hashLog, chainLog, searchLog, minMatch, targetLength and strategy. - * new parameters will be active for next job only (after a flush()). - * @return : an error code (which can be tested using ZSTD_isError()). - */ -ZSTDLIB_API size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value); - -/*! ZSTD_CCtx_setPledgedSrcSize() : - * Total input data size to be compressed as a single frame. - * Value will be written in frame header, unless if explicitly forbidden using ZSTD_c_contentSizeFlag. - * This value will also be controlled at end of frame, and trigger an error if not respected. - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - * Note 1 : pledgedSrcSize==0 actually means zero, aka an empty frame. - * In order to mean "unknown content size", pass constant ZSTD_CONTENTSIZE_UNKNOWN. - * ZSTD_CONTENTSIZE_UNKNOWN is default value for any new frame. - * Note 2 : pledgedSrcSize is only valid once, for the next frame. - * It's discarded at the end of the frame, and replaced by ZSTD_CONTENTSIZE_UNKNOWN. - * Note 3 : Whenever all input data is provided and consumed in a single round, - * for example with ZSTD_compress2(), - * or invoking immediately ZSTD_compressStream2(,,,ZSTD_e_end), - * this value is automatically overridden by srcSize instead. - */ -ZSTDLIB_API size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize); - -typedef enum { - ZSTD_reset_session_only = 1, - ZSTD_reset_parameters = 2, - ZSTD_reset_session_and_parameters = 3 -} ZSTD_ResetDirective; - -/*! ZSTD_CCtx_reset() : - * There are 2 different things that can be reset, independently or jointly : - * - The session : will stop compressing current frame, and make CCtx ready to start a new one. - * Useful after an error, or to interrupt any ongoing compression. - * Any internal data not yet flushed is cancelled. - * Compression parameters and dictionary remain unchanged. - * They will be used to compress next frame. - * Resetting session never fails. - * - The parameters : changes all parameters back to "default". - * This removes any reference to any dictionary too. - * Parameters can only be changed between 2 sessions (i.e. no compression is currently ongoing) - * otherwise the reset fails, and function returns an error value (which can be tested using ZSTD_isError()) - * - Both : similar to resetting the session, followed by resetting parameters. - */ -ZSTDLIB_API size_t ZSTD_CCtx_reset(ZSTD_CCtx* cctx, ZSTD_ResetDirective reset); - -/*! ZSTD_compress2() : - * Behave the same as ZSTD_compressCCtx(), but compression parameters are set using the advanced API. - * ZSTD_compress2() always starts a new frame. - * Should cctx hold data from a previously unfinished frame, everything about it is forgotten. - * - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*() - * - The function is always blocking, returns when compression is completed. - * Hint : compression runs faster if `dstCapacity` >= `ZSTD_compressBound(srcSize)`. - * @return : compressed size written into `dst` (<= `dstCapacity), - * or an error code if it fails (which can be tested using ZSTD_isError()). - */ -ZSTDLIB_API size_t ZSTD_compress2( ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize); - - -/*********************************************** -* Advanced decompression API (Requires v1.4.0+) -************************************************/ - -/* The advanced API pushes parameters one by one into an existing DCtx context. - * Parameters are sticky, and remain valid for all following frames - * using the same DCtx context. - * It's possible to reset parameters to default values using ZSTD_DCtx_reset(). - * Note : This API is compatible with existing ZSTD_decompressDCtx() and ZSTD_decompressStream(). - * Therefore, no new decompression function is necessary. - */ - -typedef enum { - - ZSTD_d_windowLogMax=100, /* Select a size limit (in power of 2) beyond which - * the streaming API will refuse to allocate memory buffer - * in order to protect the host from unreasonable memory requirements. - * This parameter is only useful in streaming mode, since no internal buffer is allocated in single-pass mode. - * By default, a decompression context accepts window sizes <= (1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT). - * Special: value 0 means "use default maximum windowLog". */ - - /* note : additional experimental parameters are also available - * within the experimental section of the API. - * At the time of this writing, they include : - * ZSTD_d_format - * ZSTD_d_stableOutBuffer - * ZSTD_d_forceIgnoreChecksum - * ZSTD_d_refMultipleDDicts - * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them. - * note : never ever use experimentalParam? names directly - */ - ZSTD_d_experimentalParam1=1000, - ZSTD_d_experimentalParam2=1001, - ZSTD_d_experimentalParam3=1002, - ZSTD_d_experimentalParam4=1003 - -} ZSTD_dParameter; - -/*! ZSTD_dParam_getBounds() : - * All parameters must belong to an interval with lower and upper bounds, - * otherwise they will either trigger an error or be automatically clamped. - * @return : a structure, ZSTD_bounds, which contains - * - an error status field, which must be tested using ZSTD_isError() - * - both lower and upper bounds, inclusive - */ -ZSTDLIB_API ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam); - -/*! ZSTD_DCtx_setParameter() : - * Set one compression parameter, selected by enum ZSTD_dParameter. - * All parameters have valid bounds. Bounds can be queried using ZSTD_dParam_getBounds(). - * Providing a value beyond bound will either clamp it, or trigger an error (depending on parameter). - * Setting a parameter is only possible during frame initialization (before starting decompression). - * @return : 0, or an error code (which can be tested using ZSTD_isError()). - */ -ZSTDLIB_API size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int value); - -/*! ZSTD_DCtx_reset() : - * Return a DCtx to clean state. - * Session and parameters can be reset jointly or separately. - * Parameters can only be reset when no active frame is being decompressed. - * @return : 0, or an error code, which can be tested with ZSTD_isError() - */ -ZSTDLIB_API size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset); - - -/**************************** -* Streaming -****************************/ - -typedef struct ZSTD_inBuffer_s { - const void* src; /**< start of input buffer */ - size_t size; /**< size of input buffer */ - size_t pos; /**< position where reading stopped. Will be updated. Necessarily 0 <= pos <= size */ -} ZSTD_inBuffer; - -typedef struct ZSTD_outBuffer_s { - void* dst; /**< start of output buffer */ - size_t size; /**< size of output buffer */ - size_t pos; /**< position where writing stopped. Will be updated. Necessarily 0 <= pos <= size */ -} ZSTD_outBuffer; - - - -/*-*********************************************************************** -* Streaming compression - HowTo -* -* A ZSTD_CStream object is required to track streaming operation. -* Use ZSTD_createCStream() and ZSTD_freeCStream() to create/release resources. -* ZSTD_CStream objects can be reused multiple times on consecutive compression operations. -* It is recommended to re-use ZSTD_CStream since it will play nicer with system's memory, by re-using already allocated memory. -* -* For parallel execution, use one separate ZSTD_CStream per thread. -* -* note : since v1.3.0, ZSTD_CStream and ZSTD_CCtx are the same thing. -* -* Parameters are sticky : when starting a new compression on the same context, -* it will re-use the same sticky parameters as previous compression session. -* When in doubt, it's recommended to fully initialize the context before usage. -* Use ZSTD_CCtx_reset() to reset the context and ZSTD_CCtx_setParameter(), -* ZSTD_CCtx_setPledgedSrcSize(), or ZSTD_CCtx_loadDictionary() and friends to -* set more specific parameters, the pledged source size, or load a dictionary. -* -* Use ZSTD_compressStream2() with ZSTD_e_continue as many times as necessary to -* consume input stream. The function will automatically update both `pos` -* fields within `input` and `output`. -* Note that the function may not consume the entire input, for example, because -* the output buffer is already full, in which case `input.pos < input.size`. -* The caller must check if input has been entirely consumed. -* If not, the caller must make some room to receive more compressed data, -* and then present again remaining input data. -* note: ZSTD_e_continue is guaranteed to make some forward progress when called, -* but doesn't guarantee maximal forward progress. This is especially relevant -* when compressing with multiple threads. The call won't block if it can -* consume some input, but if it can't it will wait for some, but not all, -* output to be flushed. -* @return : provides a minimum amount of data remaining to be flushed from internal buffers -* or an error code, which can be tested using ZSTD_isError(). -* -* At any moment, it's possible to flush whatever data might remain stuck within internal buffer, -* using ZSTD_compressStream2() with ZSTD_e_flush. `output->pos` will be updated. -* Note that, if `output->size` is too small, a single invocation with ZSTD_e_flush might not be enough (return code > 0). -* In which case, make some room to receive more compressed data, and call again ZSTD_compressStream2() with ZSTD_e_flush. -* You must continue calling ZSTD_compressStream2() with ZSTD_e_flush until it returns 0, at which point you can change the -* operation. -* note: ZSTD_e_flush will flush as much output as possible, meaning when compressing with multiple threads, it will -* block until the flush is complete or the output buffer is full. -* @return : 0 if internal buffers are entirely flushed, -* >0 if some data still present within internal buffer (the value is minimal estimation of remaining size), -* or an error code, which can be tested using ZSTD_isError(). -* -* Calling ZSTD_compressStream2() with ZSTD_e_end instructs to finish a frame. -* It will perform a flush and write frame epilogue. -* The epilogue is required for decoders to consider a frame completed. -* flush operation is the same, and follows same rules as calling ZSTD_compressStream2() with ZSTD_e_flush. -* You must continue calling ZSTD_compressStream2() with ZSTD_e_end until it returns 0, at which point you are free to -* start a new frame. -* note: ZSTD_e_end will flush as much output as possible, meaning when compressing with multiple threads, it will -* block until the flush is complete or the output buffer is full. -* @return : 0 if frame fully completed and fully flushed, -* >0 if some data still present within internal buffer (the value is minimal estimation of remaining size), -* or an error code, which can be tested using ZSTD_isError(). -* -* *******************************************************************/ - -typedef ZSTD_CCtx ZSTD_CStream; /**< CCtx and CStream are now effectively same object (>= v1.3.0) */ - /* Continue to distinguish them for compatibility with older versions <= v1.2.0 */ -/*===== ZSTD_CStream management functions =====*/ -ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(void); -ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); /* accept NULL pointer */ - -/*===== Streaming compression functions =====*/ -typedef enum { - ZSTD_e_continue=0, /* collect more data, encoder decides when to output compressed result, for optimal compression ratio */ - ZSTD_e_flush=1, /* flush any data provided so far, - * it creates (at least) one new block, that can be decoded immediately on reception; - * frame will continue: any future data can still reference previously compressed data, improving compression. - * note : multithreaded compression will block to flush as much output as possible. */ - ZSTD_e_end=2 /* flush any remaining data _and_ close current frame. - * note that frame is only closed after compressed data is fully flushed (return value == 0). - * After that point, any additional data starts a new frame. - * note : each frame is independent (does not reference any content from previous frame). - : note : multithreaded compression will block to flush as much output as possible. */ -} ZSTD_EndDirective; - -/*! ZSTD_compressStream2() : Requires v1.4.0+ - * Behaves about the same as ZSTD_compressStream, with additional control on end directive. - * - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*() - * - Compression parameters cannot be changed once compression is started (save a list of exceptions in multi-threading mode) - * - output->pos must be <= dstCapacity, input->pos must be <= srcSize - * - output->pos and input->pos will be updated. They are guaranteed to remain below their respective limit. - * - endOp must be a valid directive - * - When nbWorkers==0 (default), function is blocking : it completes its job before returning to caller. - * - When nbWorkers>=1, function is non-blocking : it copies a portion of input, distributes jobs to internal worker threads, flush to output whatever is available, - * and then immediately returns, just indicating that there is some data remaining to be flushed. - * The function nonetheless guarantees forward progress : it will return only after it reads or write at least 1+ byte. - * - Exception : if the first call requests a ZSTD_e_end directive and provides enough dstCapacity, the function delegates to ZSTD_compress2() which is always blocking. - * - @return provides a minimum amount of data remaining to be flushed from internal buffers - * or an error code, which can be tested using ZSTD_isError(). - * if @return != 0, flush is not fully completed, there is still some data left within internal buffers. - * This is useful for ZSTD_e_flush, since in this case more flushes are necessary to empty all buffers. - * For ZSTD_e_end, @return == 0 when internal buffers are fully flushed and frame is completed. - * - after a ZSTD_e_end directive, if internal buffer is not fully flushed (@return != 0), - * only ZSTD_e_end or ZSTD_e_flush operations are allowed. - * Before starting a new compression job, or changing compression parameters, - * it is required to fully flush internal buffers. - */ -ZSTDLIB_API size_t ZSTD_compressStream2( ZSTD_CCtx* cctx, - ZSTD_outBuffer* output, - ZSTD_inBuffer* input, - ZSTD_EndDirective endOp); - - -/* These buffer sizes are softly recommended. - * They are not required : ZSTD_compressStream*() happily accepts any buffer size, for both input and output. - * Respecting the recommended size just makes it a bit easier for ZSTD_compressStream*(), - * reducing the amount of memory shuffling and buffering, resulting in minor performance savings. - * - * However, note that these recommendations are from the perspective of a C caller program. - * If the streaming interface is invoked from some other language, - * especially managed ones such as Java or Go, through a foreign function interface such as jni or cgo, - * a major performance rule is to reduce crossing such interface to an absolute minimum. - * It's not rare that performance ends being spent more into the interface, rather than compression itself. - * In which cases, prefer using large buffers, as large as practical, - * for both input and output, to reduce the nb of roundtrips. - */ -ZSTDLIB_API size_t ZSTD_CStreamInSize(void); /**< recommended size for input buffer */ -ZSTDLIB_API size_t ZSTD_CStreamOutSize(void); /**< recommended size for output buffer. Guarantee to successfully flush at least one complete compressed block. */ - - -/* ***************************************************************************** - * This following is a legacy streaming API, available since v1.0+ . - * It can be replaced by ZSTD_CCtx_reset() and ZSTD_compressStream2(). - * It is redundant, but remains fully supported. - * Streaming in combination with advanced parameters and dictionary compression - * can only be used through the new API. - ******************************************************************************/ - -/*! - * Equivalent to: - * - * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); - * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any) - * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); - */ -ZSTDLIB_API size_t ZSTD_initCStream(ZSTD_CStream* zcs, int compressionLevel); -/*! - * Alternative for ZSTD_compressStream2(zcs, output, input, ZSTD_e_continue). - * NOTE: The return value is different. ZSTD_compressStream() returns a hint for - * the next read size (if non-zero and not an error). ZSTD_compressStream2() - * returns the minimum nb of bytes left to flush (if non-zero and not an error). - */ -ZSTDLIB_API size_t ZSTD_compressStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output, ZSTD_inBuffer* input); -/*! Equivalent to ZSTD_compressStream2(zcs, output, &emptyInput, ZSTD_e_flush). */ -ZSTDLIB_API size_t ZSTD_flushStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); -/*! Equivalent to ZSTD_compressStream2(zcs, output, &emptyInput, ZSTD_e_end). */ -ZSTDLIB_API size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output); - - -/*-*************************************************************************** -* Streaming decompression - HowTo -* -* A ZSTD_DStream object is required to track streaming operations. -* Use ZSTD_createDStream() and ZSTD_freeDStream() to create/release resources. -* ZSTD_DStream objects can be re-used multiple times. -* -* Use ZSTD_initDStream() to start a new decompression operation. -* @return : recommended first input size -* Alternatively, use advanced API to set specific properties. -* -* Use ZSTD_decompressStream() repetitively to consume your input. -* The function will update both `pos` fields. -* If `input.pos < input.size`, some input has not been consumed. -* It's up to the caller to present again remaining data. -* The function tries to flush all data decoded immediately, respecting output buffer size. -* If `output.pos < output.size`, decoder has flushed everything it could. -* But if `output.pos == output.size`, there might be some data left within internal buffers., -* In which case, call ZSTD_decompressStream() again to flush whatever remains in the buffer. -* Note : with no additional input provided, amount of data flushed is necessarily <= ZSTD_BLOCKSIZE_MAX. -* @return : 0 when a frame is completely decoded and fully flushed, -* or an error code, which can be tested using ZSTD_isError(), -* or any other value > 0, which means there is still some decoding or flushing to do to complete current frame : -* the return value is a suggested next input size (just a hint for better latency) -* that will never request more than the remaining frame size. -* *******************************************************************************/ - -typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same object (>= v1.3.0) */ - /* For compatibility with versions <= v1.2.0, prefer differentiating them. */ -/*===== ZSTD_DStream management functions =====*/ -ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream(void); -ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); /* accept NULL pointer */ - -/*===== Streaming decompression functions =====*/ - -/* This function is redundant with the advanced API and equivalent to: - * - * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); - * ZSTD_DCtx_refDDict(zds, NULL); - */ -ZSTDLIB_API size_t ZSTD_initDStream(ZSTD_DStream* zds); - -ZSTDLIB_API size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inBuffer* input); - -ZSTDLIB_API size_t ZSTD_DStreamInSize(void); /*!< recommended size for input buffer */ -ZSTDLIB_API size_t ZSTD_DStreamOutSize(void); /*!< recommended size for output buffer. Guarantee to successfully flush at least one complete block in all circumstances. */ - - -/************************** -* Simple dictionary API -***************************/ -/*! ZSTD_compress_usingDict() : - * Compression at an explicit compression level using a Dictionary. - * A dictionary can be any arbitrary data segment (also called a prefix), - * or a buffer with specified information (see zdict.h). - * Note : This function loads the dictionary, resulting in significant startup delay. - * It's intended for a dictionary used only once. - * Note 2 : When `dict == NULL || dictSize < 8` no dictionary is used. */ -ZSTDLIB_API size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict,size_t dictSize, - int compressionLevel); - -/*! ZSTD_decompress_usingDict() : - * Decompression using a known Dictionary. - * Dictionary must be identical to the one used during compression. - * Note : This function loads the dictionary, resulting in significant startup delay. - * It's intended for a dictionary used only once. - * Note : When `dict == NULL || dictSize < 8` no dictionary is used. */ -ZSTDLIB_API size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict,size_t dictSize); - - -/*********************************** - * Bulk processing dictionary API - **********************************/ -typedef struct ZSTD_CDict_s ZSTD_CDict; - -/*! ZSTD_createCDict() : - * When compressing multiple messages or blocks using the same dictionary, - * it's recommended to digest the dictionary only once, since it's a costly operation. - * ZSTD_createCDict() will create a state from digesting a dictionary. - * The resulting state can be used for future compression operations with very limited startup cost. - * ZSTD_CDict can be created once and shared by multiple threads concurrently, since its usage is read-only. - * @dictBuffer can be released after ZSTD_CDict creation, because its content is copied within CDict. - * Note 1 : Consider experimental function `ZSTD_createCDict_byReference()` if you prefer to not duplicate @dictBuffer content. - * Note 2 : A ZSTD_CDict can be created from an empty @dictBuffer, - * in which case the only thing that it transports is the @compressionLevel. - * This can be useful in a pipeline featuring ZSTD_compress_usingCDict() exclusively, - * expecting a ZSTD_CDict parameter with any data, including those without a known dictionary. */ -ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize, - int compressionLevel); - -/*! ZSTD_freeCDict() : - * Function frees memory allocated by ZSTD_createCDict(). - * If a NULL pointer is passed, no operation is performed. */ -ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict); - -/*! ZSTD_compress_usingCDict() : - * Compression using a digested Dictionary. - * Recommended when same dictionary is used multiple times. - * Note : compression level is _decided at dictionary creation time_, - * and frame parameters are hardcoded (dictID=yes, contentSize=yes, checksum=no) */ -ZSTDLIB_API size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const ZSTD_CDict* cdict); - - -typedef struct ZSTD_DDict_s ZSTD_DDict; - -/*! ZSTD_createDDict() : - * Create a digested dictionary, ready to start decompression operation without startup delay. - * dictBuffer can be released after DDict creation, as its content is copied inside DDict. */ -ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize); - -/*! ZSTD_freeDDict() : - * Function frees memory allocated with ZSTD_createDDict() - * If a NULL pointer is passed, no operation is performed. */ -ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict); - -/*! ZSTD_decompress_usingDDict() : - * Decompression using a digested Dictionary. - * Recommended when same dictionary is used multiple times. */ -ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const ZSTD_DDict* ddict); - - -/******************************** - * Dictionary helper functions - *******************************/ - -/*! ZSTD_getDictID_fromDict() : Requires v1.4.0+ - * Provides the dictID stored within dictionary. - * if @return == 0, the dictionary is not conformant with Zstandard specification. - * It can still be loaded, but as a content-only dictionary. */ -ZSTDLIB_API unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize); - -/*! ZSTD_getDictID_fromCDict() : Requires v1.5.0+ - * Provides the dictID of the dictionary loaded into `cdict`. - * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. - * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ -ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict); - -/*! ZSTD_getDictID_fromDDict() : Requires v1.4.0+ - * Provides the dictID of the dictionary loaded into `ddict`. - * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty. - * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */ -ZSTDLIB_API unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict); - -/*! ZSTD_getDictID_fromFrame() : Requires v1.4.0+ - * Provides the dictID required to decompressed the frame stored within `src`. - * If @return == 0, the dictID could not be decoded. - * This could for one of the following reasons : - * - The frame does not require a dictionary to be decoded (most common case). - * - The frame was built with dictID intentionally removed. Whatever dictionary is necessary is a hidden information. - * Note : this use case also happens when using a non-conformant dictionary. - * - `srcSize` is too small, and as a result, the frame header could not be decoded (only possible if `srcSize < ZSTD_FRAMEHEADERSIZE_MAX`). - * - This is not a Zstandard frame. - * When identifying the exact failure cause, it's possible to use ZSTD_getFrameHeader(), which will provide a more precise error code. */ -ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize); - - -/******************************************************************************* - * Advanced dictionary and prefix API (Requires v1.4.0+) - * - * This API allows dictionaries to be used with ZSTD_compress2(), - * ZSTD_compressStream2(), and ZSTD_decompressDCtx(). Dictionaries are sticky, and - * only reset with the context is reset with ZSTD_reset_parameters or - * ZSTD_reset_session_and_parameters. Prefixes are single-use. - ******************************************************************************/ - - -/*! ZSTD_CCtx_loadDictionary() : Requires v1.4.0+ - * Create an internal CDict from `dict` buffer. - * Decompression will have to use same dictionary. - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - * Special: Loading a NULL (or 0-size) dictionary invalidates previous dictionary, - * meaning "return to no-dictionary mode". - * Note 1 : Dictionary is sticky, it will be used for all future compressed frames. - * To return to "no-dictionary" situation, load a NULL dictionary (or reset parameters). - * Note 2 : Loading a dictionary involves building tables. - * It's also a CPU consuming operation, with non-negligible impact on latency. - * Tables are dependent on compression parameters, and for this reason, - * compression parameters can no longer be changed after loading a dictionary. - * Note 3 :`dict` content will be copied internally. - * Use experimental ZSTD_CCtx_loadDictionary_byReference() to reference content instead. - * In such a case, dictionary buffer must outlive its users. - * Note 4 : Use ZSTD_CCtx_loadDictionary_advanced() - * to precisely select how dictionary content must be interpreted. */ -ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); - -/*! ZSTD_CCtx_refCDict() : Requires v1.4.0+ - * Reference a prepared dictionary, to be used for all next compressed frames. - * Note that compression parameters are enforced from within CDict, - * and supersede any compression parameter previously set within CCtx. - * The parameters ignored are labelled as "superseded-by-cdict" in the ZSTD_cParameter enum docs. - * The ignored parameters will be used again if the CCtx is returned to no-dictionary mode. - * The dictionary will remain valid for future compressed frames using same CCtx. - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - * Special : Referencing a NULL CDict means "return to no-dictionary mode". - * Note 1 : Currently, only one dictionary can be managed. - * Referencing a new dictionary effectively "discards" any previous one. - * Note 2 : CDict is just referenced, its lifetime must outlive its usage within CCtx. */ -ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); - -/*! ZSTD_CCtx_refPrefix() : Requires v1.4.0+ - * Reference a prefix (single-usage dictionary) for next compressed frame. - * A prefix is **only used once**. Tables are discarded at end of frame (ZSTD_e_end). - * Decompression will need same prefix to properly regenerate data. - * Compressing with a prefix is similar in outcome as performing a diff and compressing it, - * but performs much faster, especially during decompression (compression speed is tunable with compression level). - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - * Special: Adding any prefix (including NULL) invalidates any previous prefix or dictionary - * Note 1 : Prefix buffer is referenced. It **must** outlive compression. - * Its content must remain unmodified during compression. - * Note 2 : If the intention is to diff some large src data blob with some prior version of itself, - * ensure that the window size is large enough to contain the entire source. - * See ZSTD_c_windowLog. - * Note 3 : Referencing a prefix involves building tables, which are dependent on compression parameters. - * It's a CPU consuming operation, with non-negligible impact on latency. - * If there is a need to use the same prefix multiple times, consider loadDictionary instead. - * Note 4 : By default, the prefix is interpreted as raw content (ZSTD_dct_rawContent). - * Use experimental ZSTD_CCtx_refPrefix_advanced() to alter dictionary interpretation. */ -ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx, - const void* prefix, size_t prefixSize); - -/*! ZSTD_DCtx_loadDictionary() : Requires v1.4.0+ - * Create an internal DDict from dict buffer, - * to be used to decompress next frames. - * The dictionary remains valid for all future frames, until explicitly invalidated. - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - * Special : Adding a NULL (or 0-size) dictionary invalidates any previous dictionary, - * meaning "return to no-dictionary mode". - * Note 1 : Loading a dictionary involves building tables, - * which has a non-negligible impact on CPU usage and latency. - * It's recommended to "load once, use many times", to amortize the cost - * Note 2 :`dict` content will be copied internally, so `dict` can be released after loading. - * Use ZSTD_DCtx_loadDictionary_byReference() to reference dictionary content instead. - * Note 3 : Use ZSTD_DCtx_loadDictionary_advanced() to take control of - * how dictionary content is loaded and interpreted. - */ -ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); - -/*! ZSTD_DCtx_refDDict() : Requires v1.4.0+ - * Reference a prepared dictionary, to be used to decompress next frames. - * The dictionary remains active for decompression of future frames using same DCtx. - * - * If called with ZSTD_d_refMultipleDDicts enabled, repeated calls of this function - * will store the DDict references in a table, and the DDict used for decompression - * will be determined at decompression time, as per the dict ID in the frame. - * The memory for the table is allocated on the first call to refDDict, and can be - * freed with ZSTD_freeDCtx(). - * - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - * Note 1 : Currently, only one dictionary can be managed. - * Referencing a new dictionary effectively "discards" any previous one. - * Special: referencing a NULL DDict means "return to no-dictionary mode". - * Note 2 : DDict is just referenced, its lifetime must outlive its usage from DCtx. - */ -ZSTDLIB_API size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); - -/*! ZSTD_DCtx_refPrefix() : Requires v1.4.0+ - * Reference a prefix (single-usage dictionary) to decompress next frame. - * This is the reverse operation of ZSTD_CCtx_refPrefix(), - * and must use the same prefix as the one used during compression. - * Prefix is **only used once**. Reference is discarded at end of frame. - * End of frame is reached when ZSTD_decompressStream() returns 0. - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - * Note 1 : Adding any prefix (including NULL) invalidates any previously set prefix or dictionary - * Note 2 : Prefix buffer is referenced. It **must** outlive decompression. - * Prefix buffer must remain unmodified up to the end of frame, - * reached when ZSTD_decompressStream() returns 0. - * Note 3 : By default, the prefix is treated as raw content (ZSTD_dct_rawContent). - * Use ZSTD_CCtx_refPrefix_advanced() to alter dictMode (Experimental section) - * Note 4 : Referencing a raw content prefix has almost no cpu nor memory cost. - * A full dictionary is more costly, as it requires building tables. - */ -ZSTDLIB_API size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx, - const void* prefix, size_t prefixSize); - -/* === Memory management === */ - -/*! ZSTD_sizeof_*() : Requires v1.4.0+ - * These functions give the _current_ memory usage of selected object. - * Note that object memory usage can evolve (increase or decrease) over time. */ -ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx); -ZSTDLIB_API size_t ZSTD_sizeof_DCtx(const ZSTD_DCtx* dctx); -ZSTDLIB_API size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs); -ZSTDLIB_API size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds); -ZSTDLIB_API size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict); -ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict); - -#endif /* ZSTD_H_235446 */ - - -/* ************************************************************************************** - * ADVANCED AND EXPERIMENTAL FUNCTIONS - **************************************************************************************** - * The definitions in the following section are considered experimental. - * They are provided for advanced scenarios. - * They should never be used with a dynamic library, as prototypes may change in the future. - * Use them only in association with static linking. - * ***************************************************************************************/ - -#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY) -#define ZSTD_H_ZSTD_STATIC_LINKING_ONLY - -/* This can be overridden externally to hide static symbols. */ -#ifndef ZSTDLIB_STATIC_API -# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) -# define ZSTDLIB_STATIC_API __declspec(dllexport) ZSTDLIB_VISIBLE -# elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) -# define ZSTDLIB_STATIC_API __declspec(dllimport) ZSTDLIB_VISIBLE -# else -# define ZSTDLIB_STATIC_API ZSTDLIB_VISIBLE -# endif -#endif - -/* Deprecation warnings : - * Should these warnings be a problem, it is generally possible to disable them, - * typically with -Wno-deprecated-declarations for gcc or _CRT_SECURE_NO_WARNINGS in Visual. - * Otherwise, it's also possible to define ZSTD_DISABLE_DEPRECATE_WARNINGS. - */ -#ifdef ZSTD_DISABLE_DEPRECATE_WARNINGS -# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API /* disable deprecation warnings */ -#else -# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */ -# define ZSTD_DEPRECATED(message) [[deprecated(message)]] ZSTDLIB_STATIC_API -# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__) -# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API __attribute__((deprecated(message))) -# elif defined(__GNUC__) && (__GNUC__ >= 3) -# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API __attribute__((deprecated)) -# elif defined(_MSC_VER) -# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API __declspec(deprecated(message)) -# else -# pragma message("WARNING: You need to implement ZSTD_DEPRECATED for this compiler") -# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API -# endif -#endif /* ZSTD_DISABLE_DEPRECATE_WARNINGS */ - -/**************************************************************************************** - * experimental API (static linking only) - **************************************************************************************** - * The following symbols and constants - * are not planned to join "stable API" status in the near future. - * They can still change in future versions. - * Some of them are planned to remain in the static_only section indefinitely. - * Some of them might be removed in the future (especially when redundant with existing stable functions) - * ***************************************************************************************/ - -#define ZSTD_FRAMEHEADERSIZE_PREFIX(format) ((format) == ZSTD_f_zstd1 ? 5 : 1) /* minimum input size required to query frame header size */ -#define ZSTD_FRAMEHEADERSIZE_MIN(format) ((format) == ZSTD_f_zstd1 ? 6 : 2) -#define ZSTD_FRAMEHEADERSIZE_MAX 18 /* can be useful for static allocation */ -#define ZSTD_SKIPPABLEHEADERSIZE 8 - -/* compression parameter bounds */ -#define ZSTD_WINDOWLOG_MAX_32 30 -#define ZSTD_WINDOWLOG_MAX_64 31 -#define ZSTD_WINDOWLOG_MAX ((int)(sizeof(size_t) == 4 ? ZSTD_WINDOWLOG_MAX_32 : ZSTD_WINDOWLOG_MAX_64)) -#define ZSTD_WINDOWLOG_MIN 10 -#define ZSTD_HASHLOG_MAX ((ZSTD_WINDOWLOG_MAX < 30) ? ZSTD_WINDOWLOG_MAX : 30) -#define ZSTD_HASHLOG_MIN 6 -#define ZSTD_CHAINLOG_MAX_32 29 -#define ZSTD_CHAINLOG_MAX_64 30 -#define ZSTD_CHAINLOG_MAX ((int)(sizeof(size_t) == 4 ? ZSTD_CHAINLOG_MAX_32 : ZSTD_CHAINLOG_MAX_64)) -#define ZSTD_CHAINLOG_MIN ZSTD_HASHLOG_MIN -#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1) -#define ZSTD_SEARCHLOG_MIN 1 -#define ZSTD_MINMATCH_MAX 7 /* only for ZSTD_fast, other strategies are limited to 6 */ -#define ZSTD_MINMATCH_MIN 3 /* only for ZSTD_btopt+, faster strategies are limited to 4 */ -#define ZSTD_TARGETLENGTH_MAX ZSTD_BLOCKSIZE_MAX -#define ZSTD_TARGETLENGTH_MIN 0 /* note : comparing this constant to an unsigned results in a tautological test */ -#define ZSTD_STRATEGY_MIN ZSTD_fast -#define ZSTD_STRATEGY_MAX ZSTD_btultra2 - - -#define ZSTD_OVERLAPLOG_MIN 0 -#define ZSTD_OVERLAPLOG_MAX 9 - -#define ZSTD_WINDOWLOG_LIMIT_DEFAULT 27 /* by default, the streaming decoder will refuse any frame - * requiring larger than (1< 0: - * If litLength != 0: - * rep == 1 --> offset == repeat_offset_1 - * rep == 2 --> offset == repeat_offset_2 - * rep == 3 --> offset == repeat_offset_3 - * If litLength == 0: - * rep == 1 --> offset == repeat_offset_2 - * rep == 2 --> offset == repeat_offset_3 - * rep == 3 --> offset == repeat_offset_1 - 1 - * - * Note: This field is optional. ZSTD_generateSequences() will calculate the value of - * 'rep', but repeat offsets do not necessarily need to be calculated from an external - * sequence provider's perspective. For example, ZSTD_compressSequences() does not - * use this 'rep' field at all (as of now). - */ -} ZSTD_Sequence; - -typedef struct { - unsigned windowLog; /**< largest match distance : larger == more compression, more memory needed during decompression */ - unsigned chainLog; /**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */ - unsigned hashLog; /**< dispatch table : larger == faster, more memory */ - unsigned searchLog; /**< nb of searches : larger == more compression, slower */ - unsigned minMatch; /**< match length searched : larger == faster decompression, sometimes less compression */ - unsigned targetLength; /**< acceptable match size for optimal parser (only) : larger == more compression, slower */ - ZSTD_strategy strategy; /**< see ZSTD_strategy definition above */ -} ZSTD_compressionParameters; - -typedef struct { - int contentSizeFlag; /**< 1: content size will be in frame header (when known) */ - int checksumFlag; /**< 1: generate a 32-bits checksum using XXH64 algorithm at end of frame, for error detection */ - int noDictIDFlag; /**< 1: no dictID will be saved into frame header (dictID is only useful for dictionary compression) */ -} ZSTD_frameParameters; - -typedef struct { - ZSTD_compressionParameters cParams; - ZSTD_frameParameters fParams; -} ZSTD_parameters; - -typedef enum { - ZSTD_dct_auto = 0, /* dictionary is "full" when starting with ZSTD_MAGIC_DICTIONARY, otherwise it is "rawContent" */ - ZSTD_dct_rawContent = 1, /* ensures dictionary is always loaded as rawContent, even if it starts with ZSTD_MAGIC_DICTIONARY */ - ZSTD_dct_fullDict = 2 /* refuses to load a dictionary if it does not respect Zstandard's specification, starting with ZSTD_MAGIC_DICTIONARY */ -} ZSTD_dictContentType_e; - -typedef enum { - ZSTD_dlm_byCopy = 0, /**< Copy dictionary content internally */ - ZSTD_dlm_byRef = 1 /**< Reference dictionary content -- the dictionary buffer must outlive its users. */ -} ZSTD_dictLoadMethod_e; - -typedef enum { - ZSTD_f_zstd1 = 0, /* zstd frame format, specified in zstd_compression_format.md (default) */ - ZSTD_f_zstd1_magicless = 1 /* Variant of zstd frame format, without initial 4-bytes magic number. - * Useful to save 4 bytes per generated frame. - * Decoder cannot recognise automatically this format, requiring this instruction. */ -} ZSTD_format_e; - -typedef enum { - /* Note: this enum controls ZSTD_d_forceIgnoreChecksum */ - ZSTD_d_validateChecksum = 0, - ZSTD_d_ignoreChecksum = 1 -} ZSTD_forceIgnoreChecksum_e; - -typedef enum { - /* Note: this enum controls ZSTD_d_refMultipleDDicts */ - ZSTD_rmd_refSingleDDict = 0, - ZSTD_rmd_refMultipleDDicts = 1 -} ZSTD_refMultipleDDicts_e; - -typedef enum { - /* Note: this enum and the behavior it controls are effectively internal - * implementation details of the compressor. They are expected to continue - * to evolve and should be considered only in the context of extremely - * advanced performance tuning. - * - * Zstd currently supports the use of a CDict in three ways: - * - * - The contents of the CDict can be copied into the working context. This - * means that the compression can search both the dictionary and input - * while operating on a single set of internal tables. This makes - * the compression faster per-byte of input. However, the initial copy of - * the CDict's tables incurs a fixed cost at the beginning of the - * compression. For small compressions (< 8 KB), that copy can dominate - * the cost of the compression. - * - * - The CDict's tables can be used in-place. In this model, compression is - * slower per input byte, because the compressor has to search two sets of - * tables. However, this model incurs no start-up cost (as long as the - * working context's tables can be reused). For small inputs, this can be - * faster than copying the CDict's tables. - * - * - The CDict's tables are not used at all, and instead we use the working - * context alone to reload the dictionary and use params based on the source - * size. See ZSTD_compress_insertDictionary() and ZSTD_compress_usingDict(). - * This method is effective when the dictionary sizes are very small relative - * to the input size, and the input size is fairly large to begin with. - * - * Zstd has a simple internal heuristic that selects which strategy to use - * at the beginning of a compression. However, if experimentation shows that - * Zstd is making poor choices, it is possible to override that choice with - * this enum. - */ - ZSTD_dictDefaultAttach = 0, /* Use the default heuristic. */ - ZSTD_dictForceAttach = 1, /* Never copy the dictionary. */ - ZSTD_dictForceCopy = 2, /* Always copy the dictionary. */ - ZSTD_dictForceLoad = 3 /* Always reload the dictionary */ -} ZSTD_dictAttachPref_e; - -typedef enum { - ZSTD_lcm_auto = 0, /**< Automatically determine the compression mode based on the compression level. - * Negative compression levels will be uncompressed, and positive compression - * levels will be compressed. */ - ZSTD_lcm_huffman = 1, /**< Always attempt Huffman compression. Uncompressed literals will still be - * emitted if Huffman compression is not profitable. */ - ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */ -} ZSTD_literalCompressionMode_e; - -typedef enum { - /* Note: This enum controls features which are conditionally beneficial. Zstd typically will make a final - * decision on whether or not to enable the feature (ZSTD_ps_auto), but setting the switch to ZSTD_ps_enable - * or ZSTD_ps_disable allow for a force enable/disable the feature. - */ - ZSTD_ps_auto = 0, /* Let the library automatically determine whether the feature shall be enabled */ - ZSTD_ps_enable = 1, /* Force-enable the feature */ - ZSTD_ps_disable = 2 /* Do not use the feature */ -} ZSTD_paramSwitch_e; - -/*************************************** -* Frame size functions -***************************************/ - -/*! ZSTD_findDecompressedSize() : - * `src` should point to the start of a series of ZSTD encoded and/or skippable frames - * `srcSize` must be the _exact_ size of this series - * (i.e. there should be a frame boundary at `src + srcSize`) - * @return : - decompressed size of all data in all successive frames - * - if the decompressed size cannot be determined: ZSTD_CONTENTSIZE_UNKNOWN - * - if an error occurred: ZSTD_CONTENTSIZE_ERROR - * - * note 1 : decompressed size is an optional field, that may not be present, especially in streaming mode. - * When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size. - * In which case, it's necessary to use streaming mode to decompress data. - * note 2 : decompressed size is always present when compression is done with ZSTD_compress() - * note 3 : decompressed size can be very large (64-bits value), - * potentially larger than what local system can handle as a single memory segment. - * In which case, it's necessary to use streaming mode to decompress data. - * note 4 : If source is untrusted, decompressed size could be wrong or intentionally modified. - * Always ensure result fits within application's authorized limits. - * Each application can set its own limits. - * note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to - * read each contained frame header. This is fast as most of the data is skipped, - * however it does mean that all frame data must be present and valid. */ -ZSTDLIB_STATIC_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize); - -/*! ZSTD_decompressBound() : - * `src` should point to the start of a series of ZSTD encoded and/or skippable frames - * `srcSize` must be the _exact_ size of this series - * (i.e. there should be a frame boundary at `src + srcSize`) - * @return : - upper-bound for the decompressed size of all data in all successive frames - * - if an error occurred: ZSTD_CONTENTSIZE_ERROR - * - * note 1 : an error can occur if `src` contains an invalid or incorrectly formatted frame. - * note 2 : the upper-bound is exact when the decompressed size field is available in every ZSTD encoded frame of `src`. - * in this case, `ZSTD_findDecompressedSize` and `ZSTD_decompressBound` return the same value. - * note 3 : when the decompressed size field isn't available, the upper-bound for that frame is calculated by: - * upper-bound = # blocks * min(128 KB, Window_Size) - */ -ZSTDLIB_STATIC_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize); - -/*! ZSTD_frameHeaderSize() : - * srcSize must be >= ZSTD_FRAMEHEADERSIZE_PREFIX. - * @return : size of the Frame Header, - * or an error code (if srcSize is too small) */ -ZSTDLIB_STATIC_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize); - -typedef enum { - ZSTD_sf_noBlockDelimiters = 0, /* Representation of ZSTD_Sequence has no block delimiters, sequences only */ - ZSTD_sf_explicitBlockDelimiters = 1 /* Representation of ZSTD_Sequence contains explicit block delimiters */ -} ZSTD_sequenceFormat_e; - -/*! ZSTD_generateSequences() : - * Generate sequences using ZSTD_compress2, given a source buffer. - * - * Each block will end with a dummy sequence - * with offset == 0, matchLength == 0, and litLength == length of last literals. - * litLength may be == 0, and if so, then the sequence of (of: 0 ml: 0 ll: 0) - * simply acts as a block delimiter. - * - * zc can be used to insert custom compression params. - * This function invokes ZSTD_compress2 - * - * The output of this function can be fed into ZSTD_compressSequences() with CCtx - * setting of ZSTD_c_blockDelimiters as ZSTD_sf_explicitBlockDelimiters - * @return : number of sequences generated - */ - -ZSTDLIB_STATIC_API size_t ZSTD_generateSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs, - size_t outSeqsSize, const void* src, size_t srcSize); - -/*! ZSTD_mergeBlockDelimiters() : - * Given an array of ZSTD_Sequence, remove all sequences that represent block delimiters/last literals - * by merging them into into the literals of the next sequence. - * - * As such, the final generated result has no explicit representation of block boundaries, - * and the final last literals segment is not represented in the sequences. - * - * The output of this function can be fed into ZSTD_compressSequences() with CCtx - * setting of ZSTD_c_blockDelimiters as ZSTD_sf_noBlockDelimiters - * @return : number of sequences left after merging - */ -ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, size_t seqsSize); - -/*! ZSTD_compressSequences() : - * Compress an array of ZSTD_Sequence, generated from the original source buffer, into dst. - * If a dictionary is included, then the cctx should reference the dict. (see: ZSTD_CCtx_refCDict(), ZSTD_CCtx_loadDictionary(), etc.) - * The entire source is compressed into a single frame. - * - * The compression behavior changes based on cctx params. In particular: - * If ZSTD_c_blockDelimiters == ZSTD_sf_noBlockDelimiters, the array of ZSTD_Sequence is expected to contain - * no block delimiters (defined in ZSTD_Sequence). Block boundaries are roughly determined based on - * the block size derived from the cctx, and sequences may be split. This is the default setting. - * - * If ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, the array of ZSTD_Sequence is expected to contain - * block delimiters (defined in ZSTD_Sequence). Behavior is undefined if no block delimiters are provided. - * - * If ZSTD_c_validateSequences == 0, this function will blindly accept the sequences provided. Invalid sequences cause undefined - * behavior. If ZSTD_c_validateSequences == 1, then if sequence is invalid (see doc/zstd_compression_format.md for - * specifics regarding offset/matchlength requirements) then the function will bail out and return an error. - * - * In addition to the two adjustable experimental params, there are other important cctx params. - * - ZSTD_c_minMatch MUST be set as less than or equal to the smallest match generated by the match finder. It has a minimum value of ZSTD_MINMATCH_MIN. - * - ZSTD_c_compressionLevel accordingly adjusts the strength of the entropy coder, as it would in typical compression. - * - ZSTD_c_windowLog affects offset validation: this function will return an error at higher debug levels if a provided offset - * is larger than what the spec allows for a given window log and dictionary (if present). See: doc/zstd_compression_format.md - * - * Note: Repcodes are, as of now, always re-calculated within this function, so ZSTD_Sequence::rep is unused. - * Note 2: Once we integrate ability to ingest repcodes, the explicit block delims mode must respect those repcodes exactly, - * and cannot emit an RLE block that disagrees with the repcode history - * @return : final compressed size or a ZSTD error. - */ -ZSTDLIB_STATIC_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size_t dstSize, - const ZSTD_Sequence* inSeqs, size_t inSeqsSize, - const void* src, size_t srcSize); - - -/*! ZSTD_writeSkippableFrame() : - * Generates a zstd skippable frame containing data given by src, and writes it to dst buffer. - * - * Skippable frames begin with a a 4-byte magic number. There are 16 possible choices of magic number, - * ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15. - * As such, the parameter magicVariant controls the exact skippable frame magic number variant used, so - * the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant. - * - * Returns an error if destination buffer is not large enough, if the source size is not representable - * with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid). - * - * @return : number of bytes written or a ZSTD error. - */ -ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity, - const void* src, size_t srcSize, unsigned magicVariant); - -/*! ZSTD_readSkippableFrame() : - * Retrieves a zstd skippable frame containing data given by src, and writes it to dst buffer. - * - * The parameter magicVariant will receive the magicVariant that was supplied when the frame was written, - * i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START. This can be NULL if the caller is not interested - * in the magicVariant. - * - * Returns an error if destination buffer is not large enough, or if the frame is not skippable. - * - * @return : number of bytes written or a ZSTD error. - */ -ZSTDLIB_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, unsigned* magicVariant, - const void* src, size_t srcSize); - -/*! ZSTD_isSkippableFrame() : - * Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame. - */ -ZSTDLIB_API unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size); - - - -/*************************************** -* Memory management -***************************************/ - -/*! ZSTD_estimate*() : - * These functions make it possible to estimate memory usage - * of a future {D,C}Ctx, before its creation. - * - * ZSTD_estimateCCtxSize() will provide a memory budget large enough - * for any compression level up to selected one. - * Note : Unlike ZSTD_estimateCStreamSize*(), this estimate - * does not include space for a window buffer. - * Therefore, the estimation is only guaranteed for single-shot compressions, not streaming. - * The estimate will assume the input may be arbitrarily large, - * which is the worst case. - * - * When srcSize can be bound by a known and rather "small" value, - * this fact can be used to provide a tighter estimation - * because the CCtx compression context will need less memory. - * This tighter estimation can be provided by more advanced functions - * ZSTD_estimateCCtxSize_usingCParams(), which can be used in tandem with ZSTD_getCParams(), - * and ZSTD_estimateCCtxSize_usingCCtxParams(), which can be used in tandem with ZSTD_CCtxParams_setParameter(). - * Both can be used to estimate memory using custom compression parameters and arbitrary srcSize limits. - * - * Note 2 : only single-threaded compression is supported. - * ZSTD_estimateCCtxSize_usingCCtxParams() will return an error code if ZSTD_c_nbWorkers is >= 1. - */ -ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize(int compressionLevel); -ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams); -ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params); -ZSTDLIB_STATIC_API size_t ZSTD_estimateDCtxSize(void); - -/*! ZSTD_estimateCStreamSize() : - * ZSTD_estimateCStreamSize() will provide a budget large enough for any compression level up to selected one. - * It will also consider src size to be arbitrarily "large", which is worst case. - * If srcSize is known to always be small, ZSTD_estimateCStreamSize_usingCParams() can provide a tighter estimation. - * ZSTD_estimateCStreamSize_usingCParams() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel. - * ZSTD_estimateCStreamSize_usingCCtxParams() can be used in tandem with ZSTD_CCtxParams_setParameter(). Only single-threaded compression is supported. This function will return an error code if ZSTD_c_nbWorkers is >= 1. - * Note : CStream size estimation is only correct for single-threaded compression. - * ZSTD_DStream memory budget depends on window Size. - * This information can be passed manually, using ZSTD_estimateDStreamSize, - * or deducted from a valid frame Header, using ZSTD_estimateDStreamSize_fromFrame(); - * Note : if streaming is init with function ZSTD_init?Stream_usingDict(), - * an internal ?Dict will be created, which additional size is not estimated here. - * In this case, get total size by adding ZSTD_estimate?DictSize */ -ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize(int compressionLevel); -ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams); -ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params); -ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize(size_t windowSize); -ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize); - -/*! ZSTD_estimate?DictSize() : - * ZSTD_estimateCDictSize() will bet that src size is relatively "small", and content is copied, like ZSTD_createCDict(). - * ZSTD_estimateCDictSize_advanced() makes it possible to control compression parameters precisely, like ZSTD_createCDict_advanced(). - * Note : dictionaries created by reference (`ZSTD_dlm_byRef`) are logically smaller. - */ -ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize(size_t dictSize, int compressionLevel); -ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize_advanced(size_t dictSize, ZSTD_compressionParameters cParams, ZSTD_dictLoadMethod_e dictLoadMethod); -ZSTDLIB_STATIC_API size_t ZSTD_estimateDDictSize(size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod); - -/*! ZSTD_initStatic*() : - * Initialize an object using a pre-allocated fixed-size buffer. - * workspace: The memory area to emplace the object into. - * Provided pointer *must be 8-bytes aligned*. - * Buffer must outlive object. - * workspaceSize: Use ZSTD_estimate*Size() to determine - * how large workspace must be to support target scenario. - * @return : pointer to object (same address as workspace, just different type), - * or NULL if error (size too small, incorrect alignment, etc.) - * Note : zstd will never resize nor malloc() when using a static buffer. - * If the object requires more memory than available, - * zstd will just error out (typically ZSTD_error_memory_allocation). - * Note 2 : there is no corresponding "free" function. - * Since workspace is allocated externally, it must be freed externally too. - * Note 3 : cParams : use ZSTD_getCParams() to convert a compression level - * into its associated cParams. - * Limitation 1 : currently not compatible with internal dictionary creation, triggered by - * ZSTD_CCtx_loadDictionary(), ZSTD_initCStream_usingDict() or ZSTD_initDStream_usingDict(). - * Limitation 2 : static cctx currently not compatible with multi-threading. - * Limitation 3 : static dctx is incompatible with legacy support. - */ -ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_initStaticCCtx(void* workspace, size_t workspaceSize); -ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_initStaticCStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticCCtx() */ - -ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_initStaticDCtx(void* workspace, size_t workspaceSize); -ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_initStaticDStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticDCtx() */ - -ZSTDLIB_STATIC_API const ZSTD_CDict* ZSTD_initStaticCDict( - void* workspace, size_t workspaceSize, - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_compressionParameters cParams); - -ZSTDLIB_STATIC_API const ZSTD_DDict* ZSTD_initStaticDDict( - void* workspace, size_t workspaceSize, - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType); - - -/*! Custom memory allocation : - * These prototypes make it possible to pass your own allocation/free functions. - * ZSTD_customMem is provided at creation time, using ZSTD_create*_advanced() variants listed below. - * All allocation/free operations will be completed using these custom variants instead of regular ones. - */ -typedef void* (*ZSTD_allocFunction) (void* opaque, size_t size); -typedef void (*ZSTD_freeFunction) (void* opaque, void* address); -typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem; -static -#ifdef __GNUC__ -__attribute__((__unused__)) -#endif -ZSTD_customMem const ZSTD_defaultCMem = { NULL, NULL, NULL }; /**< this constant defers to stdlib's functions */ - -ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem); -ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem); -ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem); -ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem); - -ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_compressionParameters cParams, - ZSTD_customMem customMem); - -/*! Thread pool : - * These prototypes make it possible to share a thread pool among multiple compression contexts. - * This can limit resources for applications with multiple threads where each one uses - * a threaded compression mode (via ZSTD_c_nbWorkers parameter). - * ZSTD_createThreadPool creates a new thread pool with a given number of threads. - * Note that the lifetime of such pool must exist while being used. - * ZSTD_CCtx_refThreadPool assigns a thread pool to a context (use NULL argument value - * to use an internal thread pool). - * ZSTD_freeThreadPool frees a thread pool, accepts NULL pointer. - */ -typedef struct POOL_ctx_s ZSTD_threadPool; -ZSTDLIB_STATIC_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads); -ZSTDLIB_STATIC_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); /* accept NULL pointer */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool); - - -/* - * This API is temporary and is expected to change or disappear in the future! - */ -ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced2( - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - const ZSTD_CCtx_params* cctxParams, - ZSTD_customMem customMem); - -ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_advanced( - const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_customMem customMem); - - -/*************************************** -* Advanced compression functions -***************************************/ - -/*! ZSTD_createCDict_byReference() : - * Create a digested dictionary for compression - * Dictionary content is just referenced, not duplicated. - * As a consequence, `dictBuffer` **must** outlive CDict, - * and its content must remain unmodified throughout the lifetime of CDict. - * note: equivalent to ZSTD_createCDict_advanced(), with dictLoadMethod==ZSTD_dlm_byRef */ -ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel); - -/*! ZSTD_getCParams() : - * @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize. - * `estimatedSrcSize` value is optional, select 0 if not known */ -ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize); - -/*! ZSTD_getParams() : - * same as ZSTD_getCParams(), but @return a full `ZSTD_parameters` object instead of sub-component `ZSTD_compressionParameters`. - * All fields of `ZSTD_frameParameters` are set to default : contentSize=1, checksum=0, noDictID=0 */ -ZSTDLIB_STATIC_API ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize); - -/*! ZSTD_checkCParams() : - * Ensure param values remain within authorized range. - * @return 0 on success, or an error code (can be checked with ZSTD_isError()) */ -ZSTDLIB_STATIC_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params); - -/*! ZSTD_adjustCParams() : - * optimize params for a given `srcSize` and `dictSize`. - * `srcSize` can be unknown, in which case use ZSTD_CONTENTSIZE_UNKNOWN. - * `dictSize` must be `0` when there is no dictionary. - * cPar can be invalid : all parameters will be clamped within valid range in the @return struct. - * This function never fails (wide contract) */ -ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize); - -/*! ZSTD_compress_advanced() : - * Note : this function is now DEPRECATED. - * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_setParameter() and other parameter setters. - * This prototype will generate compilation warnings. */ -ZSTD_DEPRECATED("use ZSTD_compress2") -size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const void* dict,size_t dictSize, - ZSTD_parameters params); - -/*! ZSTD_compress_usingCDict_advanced() : - * Note : this function is now DEPRECATED. - * It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_loadDictionary() and other parameter setters. - * This prototype will generate compilation warnings. */ -ZSTD_DEPRECATED("use ZSTD_compress2 with ZSTD_CCtx_loadDictionary") -size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - const ZSTD_CDict* cdict, - ZSTD_frameParameters fParams); - - -/*! ZSTD_CCtx_loadDictionary_byReference() : - * Same as ZSTD_CCtx_loadDictionary(), but dictionary content is referenced, instead of being copied into CCtx. - * It saves some memory, but also requires that `dict` outlives its usage within `cctx` */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_byReference(ZSTD_CCtx* cctx, const void* dict, size_t dictSize); - -/*! ZSTD_CCtx_loadDictionary_advanced() : - * Same as ZSTD_CCtx_loadDictionary(), but gives finer control over - * how to load the dictionary (by copy ? by reference ?) - * and how to interpret it (automatic ? force raw mode ? full mode only ?) */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType); - -/*! ZSTD_CCtx_refPrefix_advanced() : - * Same as ZSTD_CCtx_refPrefix(), but gives finer control over - * how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType); - -/* === experimental parameters === */ -/* these parameters can be used with ZSTD_setParameter() - * they are not guaranteed to remain supported in the future */ - - /* Enables rsyncable mode, - * which makes compressed files more rsync friendly - * by adding periodic synchronization points to the compressed data. - * The target average block size is ZSTD_c_jobSize / 2. - * It's possible to modify the job size to increase or decrease - * the granularity of the synchronization point. - * Once the jobSize is smaller than the window size, - * it will result in compression ratio degradation. - * NOTE 1: rsyncable mode only works when multithreading is enabled. - * NOTE 2: rsyncable performs poorly in combination with long range mode, - * since it will decrease the effectiveness of synchronization points, - * though mileage may vary. - * NOTE 3: Rsyncable mode limits maximum compression speed to ~400 MB/s. - * If the selected compression level is already running significantly slower, - * the overall speed won't be significantly impacted. - */ - #define ZSTD_c_rsyncable ZSTD_c_experimentalParam1 - -/* Select a compression format. - * The value must be of type ZSTD_format_e. - * See ZSTD_format_e enum definition for details */ -#define ZSTD_c_format ZSTD_c_experimentalParam2 - -/* Force back-reference distances to remain < windowSize, - * even when referencing into Dictionary content (default:0) */ -#define ZSTD_c_forceMaxWindow ZSTD_c_experimentalParam3 - -/* Controls whether the contents of a CDict - * are used in place, or copied into the working context. - * Accepts values from the ZSTD_dictAttachPref_e enum. - * See the comments on that enum for an explanation of the feature. */ -#define ZSTD_c_forceAttachDict ZSTD_c_experimentalParam4 - -/* Controlled with ZSTD_paramSwitch_e enum. - * Default is ZSTD_ps_auto. - * Set to ZSTD_ps_disable to never compress literals. - * Set to ZSTD_ps_enable to always compress literals. (Note: uncompressed literals - * may still be emitted if huffman is not beneficial to use.) - * - * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use - * literals compression based on the compression parameters - specifically, - * negative compression levels do not use literal compression. - */ -#define ZSTD_c_literalCompressionMode ZSTD_c_experimentalParam5 - -/* Tries to fit compressed block size to be around targetCBlockSize. - * No target when targetCBlockSize == 0. - * There is no guarantee on compressed block size (default:0) */ -#define ZSTD_c_targetCBlockSize ZSTD_c_experimentalParam6 - -/* User's best guess of source size. - * Hint is not valid when srcSizeHint == 0. - * There is no guarantee that hint is close to actual source size, - * but compression ratio may regress significantly if guess considerably underestimates */ -#define ZSTD_c_srcSizeHint ZSTD_c_experimentalParam7 - -/* Controls whether the new and experimental "dedicated dictionary search - * structure" can be used. This feature is still rough around the edges, be - * prepared for surprising behavior! - * - * How to use it: - * - * When using a CDict, whether to use this feature or not is controlled at - * CDict creation, and it must be set in a CCtxParams set passed into that - * construction (via ZSTD_createCDict_advanced2()). A compression will then - * use the feature or not based on how the CDict was constructed; the value of - * this param, set in the CCtx, will have no effect. - * - * However, when a dictionary buffer is passed into a CCtx, such as via - * ZSTD_CCtx_loadDictionary(), this param can be set on the CCtx to control - * whether the CDict that is created internally can use the feature or not. - * - * What it does: - * - * Normally, the internal data structures of the CDict are analogous to what - * would be stored in a CCtx after compressing the contents of a dictionary. - * To an approximation, a compression using a dictionary can then use those - * data structures to simply continue what is effectively a streaming - * compression where the simulated compression of the dictionary left off. - * Which is to say, the search structures in the CDict are normally the same - * format as in the CCtx. - * - * It is possible to do better, since the CDict is not like a CCtx: the search - * structures are written once during CDict creation, and then are only read - * after that, while the search structures in the CCtx are both read and - * written as the compression goes along. This means we can choose a search - * structure for the dictionary that is read-optimized. - * - * This feature enables the use of that different structure. - * - * Note that some of the members of the ZSTD_compressionParameters struct have - * different semantics and constraints in the dedicated search structure. It is - * highly recommended that you simply set a compression level in the CCtxParams - * you pass into the CDict creation call, and avoid messing with the cParams - * directly. - * - * Effects: - * - * This will only have any effect when the selected ZSTD_strategy - * implementation supports this feature. Currently, that's limited to - * ZSTD_greedy, ZSTD_lazy, and ZSTD_lazy2. - * - * Note that this means that the CDict tables can no longer be copied into the - * CCtx, so the dict attachment mode ZSTD_dictForceCopy will no longer be - * usable. The dictionary can only be attached or reloaded. - * - * In general, you should expect compression to be faster--sometimes very much - * so--and CDict creation to be slightly slower. Eventually, we will probably - * make this mode the default. - */ -#define ZSTD_c_enableDedicatedDictSearch ZSTD_c_experimentalParam8 - -/* ZSTD_c_stableInBuffer - * Experimental parameter. - * Default is 0 == disabled. Set to 1 to enable. - * - * Tells the compressor that the ZSTD_inBuffer will ALWAYS be the same - * between calls, except for the modifications that zstd makes to pos (the - * caller must not modify pos). This is checked by the compressor, and - * compression will fail if it ever changes. This means the only flush - * mode that makes sense is ZSTD_e_end, so zstd will error if ZSTD_e_end - * is not used. The data in the ZSTD_inBuffer in the range [src, src + pos) - * MUST not be modified during compression or you will get data corruption. - * - * When this flag is enabled zstd won't allocate an input window buffer, - * because the user guarantees it can reference the ZSTD_inBuffer until - * the frame is complete. But, it will still allocate an output buffer - * large enough to fit a block (see ZSTD_c_stableOutBuffer). This will also - * avoid the memcpy() from the input buffer to the input window buffer. - * - * NOTE: ZSTD_compressStream2() will error if ZSTD_e_end is not used. - * That means this flag cannot be used with ZSTD_compressStream(). - * - * NOTE: So long as the ZSTD_inBuffer always points to valid memory, using - * this flag is ALWAYS memory safe, and will never access out-of-bounds - * memory. However, compression WILL fail if you violate the preconditions. - * - * WARNING: The data in the ZSTD_inBuffer in the range [dst, dst + pos) MUST - * not be modified during compression or you will get data corruption. This - * is because zstd needs to reference data in the ZSTD_inBuffer to find - * matches. Normally zstd maintains its own window buffer for this purpose, - * but passing this flag tells zstd to use the user provided buffer. - */ -#define ZSTD_c_stableInBuffer ZSTD_c_experimentalParam9 - -/* ZSTD_c_stableOutBuffer - * Experimental parameter. - * Default is 0 == disabled. Set to 1 to enable. - * - * Tells he compressor that the ZSTD_outBuffer will not be resized between - * calls. Specifically: (out.size - out.pos) will never grow. This gives the - * compressor the freedom to say: If the compressed data doesn't fit in the - * output buffer then return ZSTD_error_dstSizeTooSmall. This allows us to - * always decompress directly into the output buffer, instead of decompressing - * into an internal buffer and copying to the output buffer. - * - * When this flag is enabled zstd won't allocate an output buffer, because - * it can write directly to the ZSTD_outBuffer. It will still allocate the - * input window buffer (see ZSTD_c_stableInBuffer). - * - * Zstd will check that (out.size - out.pos) never grows and return an error - * if it does. While not strictly necessary, this should prevent surprises. - */ -#define ZSTD_c_stableOutBuffer ZSTD_c_experimentalParam10 - -/* ZSTD_c_blockDelimiters - * Default is 0 == ZSTD_sf_noBlockDelimiters. - * - * For use with sequence compression API: ZSTD_compressSequences(). - * - * Designates whether or not the given array of ZSTD_Sequence contains block delimiters - * and last literals, which are defined as sequences with offset == 0 and matchLength == 0. - * See the definition of ZSTD_Sequence for more specifics. - */ -#define ZSTD_c_blockDelimiters ZSTD_c_experimentalParam11 - -/* ZSTD_c_validateSequences - * Default is 0 == disabled. Set to 1 to enable sequence validation. - * - * For use with sequence compression API: ZSTD_compressSequences(). - * Designates whether or not we validate sequences provided to ZSTD_compressSequences() - * during function execution. - * - * Without validation, providing a sequence that does not conform to the zstd spec will cause - * undefined behavior, and may produce a corrupted block. - * - * With validation enabled, a if sequence is invalid (see doc/zstd_compression_format.md for - * specifics regarding offset/matchlength requirements) then the function will bail out and - * return an error. - * - */ -#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12 - -/* ZSTD_c_useBlockSplitter - * Controlled with ZSTD_paramSwitch_e enum. - * Default is ZSTD_ps_auto. - * Set to ZSTD_ps_disable to never use block splitter. - * Set to ZSTD_ps_enable to always use block splitter. - * - * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use - * block splitting based on the compression parameters. - */ -#define ZSTD_c_useBlockSplitter ZSTD_c_experimentalParam13 - -/* ZSTD_c_useRowMatchFinder - * Controlled with ZSTD_paramSwitch_e enum. - * Default is ZSTD_ps_auto. - * Set to ZSTD_ps_disable to never use row-based matchfinder. - * Set to ZSTD_ps_enable to force usage of row-based matchfinder. - * - * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use - * the row-based matchfinder based on support for SIMD instructions and the window log. - * Note that this only pertains to compression strategies: greedy, lazy, and lazy2 - */ -#define ZSTD_c_useRowMatchFinder ZSTD_c_experimentalParam14 - -/* ZSTD_c_deterministicRefPrefix - * Default is 0 == disabled. Set to 1 to enable. - * - * Zstd produces different results for prefix compression when the prefix is - * directly adjacent to the data about to be compressed vs. when it isn't. - * This is because zstd detects that the two buffers are contiguous and it can - * use a more efficient match finding algorithm. However, this produces different - * results than when the two buffers are non-contiguous. This flag forces zstd - * to always load the prefix in non-contiguous mode, even if it happens to be - * adjacent to the data, to guarantee determinism. - * - * If you really care about determinism when using a dictionary or prefix, - * like when doing delta compression, you should select this option. It comes - * at a speed penalty of about ~2.5% if the dictionary and data happened to be - * contiguous, and is free if they weren't contiguous. We don't expect that - * intentionally making the dictionary and data contiguous will be worth the - * cost to memcpy() the data. - */ -#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15 - -/*! ZSTD_CCtx_getParameter() : - * Get the requested compression parameter value, selected by enum ZSTD_cParameter, - * and store it into int* value. - * @return : 0, or an error code (which can be tested with ZSTD_isError()). - */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value); - - -/*! ZSTD_CCtx_params : - * Quick howto : - * - ZSTD_createCCtxParams() : Create a ZSTD_CCtx_params structure - * - ZSTD_CCtxParams_setParameter() : Push parameters one by one into - * an existing ZSTD_CCtx_params structure. - * This is similar to - * ZSTD_CCtx_setParameter(). - * - ZSTD_CCtx_setParametersUsingCCtxParams() : Apply parameters to - * an existing CCtx. - * These parameters will be applied to - * all subsequent frames. - * - ZSTD_compressStream2() : Do compression using the CCtx. - * - ZSTD_freeCCtxParams() : Free the memory, accept NULL pointer. - * - * This can be used with ZSTD_estimateCCtxSize_advanced_usingCCtxParams() - * for static allocation of CCtx for single-threaded compression. - */ -ZSTDLIB_STATIC_API ZSTD_CCtx_params* ZSTD_createCCtxParams(void); -ZSTDLIB_STATIC_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); /* accept NULL pointer */ - -/*! ZSTD_CCtxParams_reset() : - * Reset params to default values. - */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_reset(ZSTD_CCtx_params* params); - -/*! ZSTD_CCtxParams_init() : - * Initializes the compression parameters of cctxParams according to - * compression level. All other parameters are reset to their default values. - */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel); - -/*! ZSTD_CCtxParams_init_advanced() : - * Initializes the compression and frame parameters of cctxParams according to - * params. All other parameters are reset to their default values. - */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params); - -/*! ZSTD_CCtxParams_setParameter() : Requires v1.4.0+ - * Similar to ZSTD_CCtx_setParameter. - * Set one compression parameter, selected by enum ZSTD_cParameter. - * Parameters must be applied to a ZSTD_CCtx using - * ZSTD_CCtx_setParametersUsingCCtxParams(). - * @result : a code representing success or failure (which can be tested with - * ZSTD_isError()). - */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int value); - -/*! ZSTD_CCtxParams_getParameter() : - * Similar to ZSTD_CCtx_getParameter. - * Get the requested value of one compression parameter, selected by enum ZSTD_cParameter. - * @result : 0, or an error code (which can be tested with ZSTD_isError()). - */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value); - -/*! ZSTD_CCtx_setParametersUsingCCtxParams() : - * Apply a set of ZSTD_CCtx_params to the compression context. - * This can be done even after compression is started, - * if nbWorkers==0, this will have no impact until a new compression is started. - * if nbWorkers>=1, new parameters will be picked up at next job, - * with a few restrictions (windowLog, pledgedSrcSize, nbWorkers, jobSize, and overlapLog are not updated). - */ -ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParametersUsingCCtxParams( - ZSTD_CCtx* cctx, const ZSTD_CCtx_params* params); - -/*! ZSTD_compressStream2_simpleArgs() : - * Same as ZSTD_compressStream2(), - * but using only integral types as arguments. - * This variant might be helpful for binders from dynamic languages - * which have troubles handling structures containing memory pointers. - */ -ZSTDLIB_STATIC_API size_t ZSTD_compressStream2_simpleArgs ( - ZSTD_CCtx* cctx, - void* dst, size_t dstCapacity, size_t* dstPos, - const void* src, size_t srcSize, size_t* srcPos, - ZSTD_EndDirective endOp); - - -/*************************************** -* Advanced decompression functions -***************************************/ - -/*! ZSTD_isFrame() : - * Tells if the content of `buffer` starts with a valid Frame Identifier. - * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0. - * Note 2 : Legacy Frame Identifiers are considered valid only if Legacy Support is enabled. - * Note 3 : Skippable Frame Identifiers are considered valid. */ -ZSTDLIB_STATIC_API unsigned ZSTD_isFrame(const void* buffer, size_t size); - -/*! ZSTD_createDDict_byReference() : - * Create a digested dictionary, ready to start decompression operation without startup delay. - * Dictionary content is referenced, and therefore stays in dictBuffer. - * It is important that dictBuffer outlives DDict, - * it must remain read accessible throughout the lifetime of DDict */ -ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, size_t dictSize); - -/*! ZSTD_DCtx_loadDictionary_byReference() : - * Same as ZSTD_DCtx_loadDictionary(), - * but references `dict` content instead of copying it into `dctx`. - * This saves memory if `dict` remains around., - * However, it's imperative that `dict` remains accessible (and unmodified) while being used, so it must outlive decompression. */ -ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_byReference(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); - -/*! ZSTD_DCtx_loadDictionary_advanced() : - * Same as ZSTD_DCtx_loadDictionary(), - * but gives direct control over - * how to load the dictionary (by copy ? by reference ?) - * and how to interpret it (automatic ? force raw mode ? full mode only ?). */ -ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_advanced(ZSTD_DCtx* dctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType); - -/*! ZSTD_DCtx_refPrefix_advanced() : - * Same as ZSTD_DCtx_refPrefix(), but gives finer control over - * how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */ -ZSTDLIB_STATIC_API size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType); - -/*! ZSTD_DCtx_setMaxWindowSize() : - * Refuses allocating internal buffers for frames requiring a window size larger than provided limit. - * This protects a decoder context from reserving too much memory for itself (potential attack scenario). - * This parameter is only useful in streaming mode, since no internal buffer is allocated in single-pass mode. - * By default, a decompression context accepts all window sizes <= (1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT) - * @return : 0, or an error code (which can be tested using ZSTD_isError()). - */ -ZSTDLIB_STATIC_API size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowSize); - -/*! ZSTD_DCtx_getParameter() : - * Get the requested decompression parameter value, selected by enum ZSTD_dParameter, - * and store it into int* value. - * @return : 0, or an error code (which can be tested with ZSTD_isError()). - */ -ZSTDLIB_STATIC_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value); - -/* ZSTD_d_format - * experimental parameter, - * allowing selection between ZSTD_format_e input compression formats - */ -#define ZSTD_d_format ZSTD_d_experimentalParam1 -/* ZSTD_d_stableOutBuffer - * Experimental parameter. - * Default is 0 == disabled. Set to 1 to enable. - * - * Tells the decompressor that the ZSTD_outBuffer will ALWAYS be the same - * between calls, except for the modifications that zstd makes to pos (the - * caller must not modify pos). This is checked by the decompressor, and - * decompression will fail if it ever changes. Therefore the ZSTD_outBuffer - * MUST be large enough to fit the entire decompressed frame. This will be - * checked when the frame content size is known. The data in the ZSTD_outBuffer - * in the range [dst, dst + pos) MUST not be modified during decompression - * or you will get data corruption. - * - * When this flags is enabled zstd won't allocate an output buffer, because - * it can write directly to the ZSTD_outBuffer, but it will still allocate - * an input buffer large enough to fit any compressed block. This will also - * avoid the memcpy() from the internal output buffer to the ZSTD_outBuffer. - * If you need to avoid the input buffer allocation use the buffer-less - * streaming API. - * - * NOTE: So long as the ZSTD_outBuffer always points to valid memory, using - * this flag is ALWAYS memory safe, and will never access out-of-bounds - * memory. However, decompression WILL fail if you violate the preconditions. - * - * WARNING: The data in the ZSTD_outBuffer in the range [dst, dst + pos) MUST - * not be modified during decompression or you will get data corruption. This - * is because zstd needs to reference data in the ZSTD_outBuffer to regenerate - * matches. Normally zstd maintains its own buffer for this purpose, but passing - * this flag tells zstd to use the user provided buffer. - */ -#define ZSTD_d_stableOutBuffer ZSTD_d_experimentalParam2 - -/* ZSTD_d_forceIgnoreChecksum - * Experimental parameter. - * Default is 0 == disabled. Set to 1 to enable - * - * Tells the decompressor to skip checksum validation during decompression, regardless - * of whether checksumming was specified during compression. This offers some - * slight performance benefits, and may be useful for debugging. - * Param has values of type ZSTD_forceIgnoreChecksum_e - */ -#define ZSTD_d_forceIgnoreChecksum ZSTD_d_experimentalParam3 - -/* ZSTD_d_refMultipleDDicts - * Experimental parameter. - * Default is 0 == disabled. Set to 1 to enable - * - * If enabled and dctx is allocated on the heap, then additional memory will be allocated - * to store references to multiple ZSTD_DDict. That is, multiple calls of ZSTD_refDDict() - * using a given ZSTD_DCtx, rather than overwriting the previous DDict reference, will instead - * store all references. At decompression time, the appropriate dictID is selected - * from the set of DDicts based on the dictID in the frame. - * - * Usage is simply calling ZSTD_refDDict() on multiple dict buffers. - * - * Param has values of byte ZSTD_refMultipleDDicts_e - * - * WARNING: Enabling this parameter and calling ZSTD_DCtx_refDDict(), will trigger memory - * allocation for the hash table. ZSTD_freeDCtx() also frees this memory. - * Memory is allocated as per ZSTD_DCtx::customMem. - * - * Although this function allocates memory for the table, the user is still responsible for - * memory management of the underlying ZSTD_DDict* themselves. - */ -#define ZSTD_d_refMultipleDDicts ZSTD_d_experimentalParam4 - - -/*! ZSTD_DCtx_setFormat() : - * This function is REDUNDANT. Prefer ZSTD_DCtx_setParameter(). - * Instruct the decoder context about what kind of data to decode next. - * This instruction is mandatory to decode data without a fully-formed header, - * such ZSTD_f_zstd1_magicless for example. - * @return : 0, or an error code (which can be tested using ZSTD_isError()). */ -ZSTD_DEPRECATED("use ZSTD_DCtx_setParameter() instead") -size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format); - -/*! ZSTD_decompressStream_simpleArgs() : - * Same as ZSTD_decompressStream(), - * but using only integral types as arguments. - * This can be helpful for binders from dynamic languages - * which have troubles handling structures containing memory pointers. - */ -ZSTDLIB_STATIC_API size_t ZSTD_decompressStream_simpleArgs ( - ZSTD_DCtx* dctx, - void* dst, size_t dstCapacity, size_t* dstPos, - const void* src, size_t srcSize, size_t* srcPos); - - -/******************************************************************** -* Advanced streaming functions -* Warning : most of these functions are now redundant with the Advanced API. -* Once Advanced API reaches "stable" status, -* redundant functions will be deprecated, and then at some point removed. -********************************************************************/ - -/*===== Advanced Streaming compression functions =====*/ - -/*! ZSTD_initCStream_srcSize() : - * This function is DEPRECATED, and equivalent to: - * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); - * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any) - * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); - * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); - * - * pledgedSrcSize must be correct. If it is not known at init time, use - * ZSTD_CONTENTSIZE_UNKNOWN. Note that, for compatibility with older programs, - * "0" also disables frame content size field. It may be enabled in the future. - * This prototype will generate compilation warnings. - */ -ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") -size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs, - int compressionLevel, - unsigned long long pledgedSrcSize); - -/*! ZSTD_initCStream_usingDict() : - * This function is DEPRECATED, and is equivalent to: - * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); - * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel); - * ZSTD_CCtx_loadDictionary(zcs, dict, dictSize); - * - * Creates of an internal CDict (incompatible with static CCtx), except if - * dict == NULL or dictSize < 8, in which case no dict is used. - * Note: dict is loaded with ZSTD_dct_auto (treated as a full zstd dictionary if - * it begins with ZSTD_MAGIC_DICTIONARY, else as raw content) and ZSTD_dlm_byCopy. - * This prototype will generate compilation warnings. - */ -ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") -size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, - const void* dict, size_t dictSize, - int compressionLevel); - -/*! ZSTD_initCStream_advanced() : - * This function is DEPRECATED, and is approximately equivalent to: - * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); - * // Pseudocode: Set each zstd parameter and leave the rest as-is. - * for ((param, value) : params) { - * ZSTD_CCtx_setParameter(zcs, param, value); - * } - * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); - * ZSTD_CCtx_loadDictionary(zcs, dict, dictSize); - * - * dict is loaded with ZSTD_dct_auto and ZSTD_dlm_byCopy. - * pledgedSrcSize must be correct. - * If srcSize is not known at init time, use value ZSTD_CONTENTSIZE_UNKNOWN. - * This prototype will generate compilation warnings. - */ -ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") -size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, - const void* dict, size_t dictSize, - ZSTD_parameters params, - unsigned long long pledgedSrcSize); - -/*! ZSTD_initCStream_usingCDict() : - * This function is DEPRECATED, and equivalent to: - * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); - * ZSTD_CCtx_refCDict(zcs, cdict); - * - * note : cdict will just be referenced, and must outlive compression session - * This prototype will generate compilation warnings. - */ -ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") -size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); - -/*! ZSTD_initCStream_usingCDict_advanced() : - * This function is DEPRECATED, and is approximately equivalent to: - * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); - * // Pseudocode: Set each zstd frame parameter and leave the rest as-is. - * for ((fParam, value) : fParams) { - * ZSTD_CCtx_setParameter(zcs, fParam, value); - * } - * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); - * ZSTD_CCtx_refCDict(zcs, cdict); - * - * same as ZSTD_initCStream_usingCDict(), with control over frame parameters. - * pledgedSrcSize must be correct. If srcSize is not known at init time, use - * value ZSTD_CONTENTSIZE_UNKNOWN. - * This prototype will generate compilation warnings. - */ -ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions") -size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs, - const ZSTD_CDict* cdict, - ZSTD_frameParameters fParams, - unsigned long long pledgedSrcSize); - -/*! ZSTD_resetCStream() : - * This function is DEPRECATED, and is equivalent to: - * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only); - * ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize); - * Note: ZSTD_resetCStream() interprets pledgedSrcSize == 0 as ZSTD_CONTENTSIZE_UNKNOWN, but - * ZSTD_CCtx_setPledgedSrcSize() does not do the same, so ZSTD_CONTENTSIZE_UNKNOWN must be - * explicitly specified. - * - * start a new frame, using same parameters from previous frame. - * This is typically useful to skip dictionary loading stage, since it will re-use it in-place. - * Note that zcs must be init at least once before using ZSTD_resetCStream(). - * If pledgedSrcSize is not known at reset time, use macro ZSTD_CONTENTSIZE_UNKNOWN. - * If pledgedSrcSize > 0, its value must be correct, as it will be written in header, and controlled at the end. - * For the time being, pledgedSrcSize==0 is interpreted as "srcSize unknown" for compatibility with older programs, - * but it will change to mean "empty" in future version, so use macro ZSTD_CONTENTSIZE_UNKNOWN instead. - * @return : 0, or an error code (which can be tested using ZSTD_isError()) - * This prototype will generate compilation warnings. - */ -ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions") -size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize); - - -typedef struct { - unsigned long long ingested; /* nb input bytes read and buffered */ - unsigned long long consumed; /* nb input bytes actually compressed */ - unsigned long long produced; /* nb of compressed bytes generated and buffered */ - unsigned long long flushed; /* nb of compressed bytes flushed : not provided; can be tracked from caller side */ - unsigned currentJobID; /* MT only : latest started job nb */ - unsigned nbActiveWorkers; /* MT only : nb of workers actively compressing at probe time */ -} ZSTD_frameProgression; - -/* ZSTD_getFrameProgression() : - * tells how much data has been ingested (read from input) - * consumed (input actually compressed) and produced (output) for current frame. - * Note : (ingested - consumed) is amount of input data buffered internally, not yet compressed. - * Aggregates progression inside active worker threads. - */ -ZSTDLIB_STATIC_API ZSTD_frameProgression ZSTD_getFrameProgression(const ZSTD_CCtx* cctx); - -/*! ZSTD_toFlushNow() : - * Tell how many bytes are ready to be flushed immediately. - * Useful for multithreading scenarios (nbWorkers >= 1). - * Probe the oldest active job, defined as oldest job not yet entirely flushed, - * and check its output buffer. - * @return : amount of data stored in oldest job and ready to be flushed immediately. - * if @return == 0, it means either : - * + there is no active job (could be checked with ZSTD_frameProgression()), or - * + oldest job is still actively compressing data, - * but everything it has produced has also been flushed so far, - * therefore flush speed is limited by production speed of oldest job - * irrespective of the speed of concurrent (and newer) jobs. - */ -ZSTDLIB_STATIC_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx); - - -/*===== Advanced Streaming decompression functions =====*/ - -/*! - * This function is deprecated, and is equivalent to: - * - * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); - * ZSTD_DCtx_loadDictionary(zds, dict, dictSize); - * - * note: no dictionary will be used if dict == NULL or dictSize < 8 - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x - */ -ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize); - -/*! - * This function is deprecated, and is equivalent to: - * - * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); - * ZSTD_DCtx_refDDict(zds, ddict); - * - * note : ddict is referenced, it must outlive decompression session - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x - */ -ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict); - -/*! - * This function is deprecated, and is equivalent to: - * - * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only); - * - * re-use decompression parameters from previous init; saves dictionary loading - * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x - */ -ZSTDLIB_STATIC_API size_t ZSTD_resetDStream(ZSTD_DStream* zds); - - -/********************************************************************* -* Buffer-less and synchronous inner streaming functions -* -* This is an advanced API, giving full control over buffer management, for users which need direct control over memory. -* But it's also a complex one, with several restrictions, documented below. -* Prefer normal streaming API for an easier experience. -********************************************************************* */ - -/** - Buffer-less streaming compression (synchronous mode) - - A ZSTD_CCtx object is required to track streaming operations. - Use ZSTD_createCCtx() / ZSTD_freeCCtx() to manage resource. - ZSTD_CCtx object can be re-used multiple times within successive compression operations. - - Start by initializing a context. - Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression. - It's also possible to duplicate a reference context which has already been initialized, using ZSTD_copyCCtx() - - Then, consume your input using ZSTD_compressContinue(). - There are some important considerations to keep in mind when using this advanced function : - - ZSTD_compressContinue() has no internal buffer. It uses externally provided buffers only. - - Interface is synchronous : input is consumed entirely and produces 1+ compressed blocks. - - Caller must ensure there is enough space in `dst` to store compressed data under worst case scenario. - Worst case evaluation is provided by ZSTD_compressBound(). - ZSTD_compressContinue() doesn't guarantee recover after a failed compression. - - ZSTD_compressContinue() presumes prior input ***is still accessible and unmodified*** (up to maximum distance size, see WindowLog). - It remembers all previous contiguous blocks, plus one separated memory segment (which can itself consists of multiple contiguous blocks) - - ZSTD_compressContinue() detects that prior input has been overwritten when `src` buffer overlaps. - In which case, it will "discard" the relevant memory section from its history. - - Finish a frame with ZSTD_compressEnd(), which will write the last block(s) and optional checksum. - It's possible to use srcSize==0, in which case, it will write a final empty block to end the frame. - Without last block mark, frames are considered unfinished (hence corrupted) by compliant decoders. - - `ZSTD_CCtx` object can be re-used (ZSTD_compressBegin()) to compress again. -*/ - -/*===== Buffer-less streaming compression functions =====*/ -ZSTDLIB_STATIC_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel); -ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel); -ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */ -ZSTDLIB_STATIC_API size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize is not known, use ZSTD_CONTENTSIZE_UNKNOWN */ - -ZSTDLIB_STATIC_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); -ZSTDLIB_STATIC_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); - -/* The ZSTD_compressBegin_advanced() and ZSTD_compressBegin_usingCDict_advanced() are now DEPRECATED and will generate a compiler warning */ -ZSTD_DEPRECATED("use advanced API to access custom parameters") -size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */ -ZSTD_DEPRECATED("use advanced API to access custom parameters") -size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */ -/** - Buffer-less streaming decompression (synchronous mode) - - A ZSTD_DCtx object is required to track streaming operations. - Use ZSTD_createDCtx() / ZSTD_freeDCtx() to manage it. - A ZSTD_DCtx object can be re-used multiple times. - - First typical operation is to retrieve frame parameters, using ZSTD_getFrameHeader(). - Frame header is extracted from the beginning of compressed frame, so providing only the frame's beginning is enough. - Data fragment must be large enough to ensure successful decoding. - `ZSTD_frameHeaderSize_max` bytes is guaranteed to always be large enough. - @result : 0 : successful decoding, the `ZSTD_frameHeader` structure is correctly filled. - >0 : `srcSize` is too small, please provide at least @result bytes on next attempt. - errorCode, which can be tested using ZSTD_isError(). - - It fills a ZSTD_frameHeader structure with important information to correctly decode the frame, - such as the dictionary ID, content size, or maximum back-reference distance (`windowSize`). - Note that these values could be wrong, either because of data corruption, or because a 3rd party deliberately spoofs false information. - As a consequence, check that values remain within valid application range. - For example, do not allocate memory blindly, check that `windowSize` is within expectation. - Each application can set its own limits, depending on local restrictions. - For extended interoperability, it is recommended to support `windowSize` of at least 8 MB. - - ZSTD_decompressContinue() needs previous data blocks during decompression, up to `windowSize` bytes. - ZSTD_decompressContinue() is very sensitive to contiguity, - if 2 blocks don't follow each other, make sure that either the compressor breaks contiguity at the same place, - or that previous contiguous segment is large enough to properly handle maximum back-reference distance. - There are multiple ways to guarantee this condition. - - The most memory efficient way is to use a round buffer of sufficient size. - Sufficient size is determined by invoking ZSTD_decodingBufferSize_min(), - which can @return an error code if required value is too large for current system (in 32-bits mode). - In a round buffer methodology, ZSTD_decompressContinue() decompresses each block next to previous one, - up to the moment there is not enough room left in the buffer to guarantee decoding another full block, - which maximum size is provided in `ZSTD_frameHeader` structure, field `blockSizeMax`. - At which point, decoding can resume from the beginning of the buffer. - Note that already decoded data stored in the buffer should be flushed before being overwritten. - - There are alternatives possible, for example using two or more buffers of size `windowSize` each, though they consume more memory. - - Finally, if you control the compression process, you can also ignore all buffer size rules, - as long as the encoder and decoder progress in "lock-step", - aka use exactly the same buffer sizes, break contiguity at the same place, etc. - - Once buffers are setup, start decompression, with ZSTD_decompressBegin(). - If decompression requires a dictionary, use ZSTD_decompressBegin_usingDict() or ZSTD_decompressBegin_usingDDict(). - - Then use ZSTD_nextSrcSizeToDecompress() and ZSTD_decompressContinue() alternatively. - ZSTD_nextSrcSizeToDecompress() tells how many bytes to provide as 'srcSize' to ZSTD_decompressContinue(). - ZSTD_decompressContinue() requires this _exact_ amount of bytes, or it will fail. - - @result of ZSTD_decompressContinue() is the number of bytes regenerated within 'dst' (necessarily <= dstCapacity). - It can be zero : it just means ZSTD_decompressContinue() has decoded some metadata item. - It can also be an error code, which can be tested with ZSTD_isError(). - - A frame is fully decoded when ZSTD_nextSrcSizeToDecompress() returns zero. - Context can then be reset to start a new decompression. - - Note : it's possible to know if next input to present is a header or a block, using ZSTD_nextInputType(). - This information is not required to properly decode a frame. - - == Special case : skippable frames == - - Skippable frames allow integration of user-defined data into a flow of concatenated frames. - Skippable frames will be ignored (skipped) by decompressor. - The format of skippable frames is as follows : - a) Skippable frame ID - 4 Bytes, Little endian format, any value from 0x184D2A50 to 0x184D2A5F - b) Frame Size - 4 Bytes, Little endian format, unsigned 32-bits - c) Frame Content - any content (User Data) of length equal to Frame Size - For skippable frames ZSTD_getFrameHeader() returns zfhPtr->frameType==ZSTD_skippableFrame. - For skippable frames ZSTD_decompressContinue() always returns 0 : it only skips the content. -*/ - -/*===== Buffer-less streaming decompression functions =====*/ -typedef enum { ZSTD_frame, ZSTD_skippableFrame } ZSTD_frameType_e; -typedef struct { - unsigned long long frameContentSize; /* if == ZSTD_CONTENTSIZE_UNKNOWN, it means this field is not available. 0 means "empty" */ - unsigned long long windowSize; /* can be very large, up to <= frameContentSize */ - unsigned blockSizeMax; - ZSTD_frameType_e frameType; /* if == ZSTD_skippableFrame, frameContentSize is the size of skippable content */ - unsigned headerSize; - unsigned dictID; - unsigned checksumFlag; -} ZSTD_frameHeader; - -/*! ZSTD_getFrameHeader() : - * decode Frame Header, or requires larger `srcSize`. - * @return : 0, `zfhPtr` is correctly filled, - * >0, `srcSize` is too small, value is wanted `srcSize` amount, - * or an error code, which can be tested using ZSTD_isError() */ -ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize); /**< doesn't consume input */ -/*! ZSTD_getFrameHeader_advanced() : - * same as ZSTD_getFrameHeader(), - * with added capability to select a format (like ZSTD_f_zstd1_magicless) */ -ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format); -ZSTDLIB_STATIC_API size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize); /**< when frame content size is not known, pass in frameContentSize == ZSTD_CONTENTSIZE_UNKNOWN */ - -ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx); -ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize); -ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict); - -ZSTDLIB_STATIC_API size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx* dctx); -ZSTDLIB_STATIC_API size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); - -/* misc */ -ZSTDLIB_STATIC_API void ZSTD_copyDCtx(ZSTD_DCtx* dctx, const ZSTD_DCtx* preparedDCtx); -typedef enum { ZSTDnit_frameHeader, ZSTDnit_blockHeader, ZSTDnit_block, ZSTDnit_lastBlock, ZSTDnit_checksum, ZSTDnit_skippableFrame } ZSTD_nextInputType_e; -ZSTDLIB_STATIC_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx); - - - - -/* ============================ */ -/** Block level API */ -/* ============================ */ - -/*! - Block functions produce and decode raw zstd blocks, without frame metadata. - Frame metadata cost is typically ~12 bytes, which can be non-negligible for very small blocks (< 100 bytes). - But users will have to take in charge needed metadata to regenerate data, such as compressed and content sizes. - - A few rules to respect : - - Compressing and decompressing require a context structure - + Use ZSTD_createCCtx() and ZSTD_createDCtx() - - It is necessary to init context before starting - + compression : any ZSTD_compressBegin*() variant, including with dictionary - + decompression : any ZSTD_decompressBegin*() variant, including with dictionary - + copyCCtx() and copyDCtx() can be used too - - Block size is limited, it must be <= ZSTD_getBlockSize() <= ZSTD_BLOCKSIZE_MAX == 128 KB - + If input is larger than a block size, it's necessary to split input data into multiple blocks - + For inputs larger than a single block, consider using regular ZSTD_compress() instead. - Frame metadata is not that costly, and quickly becomes negligible as source size grows larger than a block. - - When a block is considered not compressible enough, ZSTD_compressBlock() result will be 0 (zero) ! - ===> In which case, nothing is produced into `dst` ! - + User __must__ test for such outcome and deal directly with uncompressed data - + A block cannot be declared incompressible if ZSTD_compressBlock() return value was != 0. - Doing so would mess up with statistics history, leading to potential data corruption. - + ZSTD_decompressBlock() _doesn't accept uncompressed data as input_ !! - + In case of multiple successive blocks, should some of them be uncompressed, - decoder must be informed of their existence in order to follow proper history. - Use ZSTD_insertBlock() for such a case. -*/ - -/*===== Raw zstd block functions =====*/ -ZSTDLIB_STATIC_API size_t ZSTD_getBlockSize (const ZSTD_CCtx* cctx); -ZSTDLIB_STATIC_API size_t ZSTD_compressBlock (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); -ZSTDLIB_STATIC_API size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize); -ZSTDLIB_STATIC_API size_t ZSTD_insertBlock (ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize); /**< insert uncompressed block into `dctx` history. Useful for multi-blocks decompression. */ - - -#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */ - -#if defined (__cplusplus) -} -#endif diff --git a/stage1/zstd/lib/zstd_errors.h b/stage1/zstd/lib/zstd_errors.h deleted file mode 100644 index fa3686b772..0000000000 --- a/stage1/zstd/lib/zstd_errors.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) Yann Collet, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under both the BSD-style license (found in the - * LICENSE file in the root directory of this source tree) and the GPLv2 (found - * in the COPYING file in the root directory of this source tree). - * You may select, at your option, one of the above-listed licenses. - */ - -#ifndef ZSTD_ERRORS_H_398273423 -#define ZSTD_ERRORS_H_398273423 - -#if defined (__cplusplus) -extern "C" { -#endif - -/*===== dependency =====*/ -#include /* size_t */ - - -/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */ -#ifndef ZSTDERRORLIB_VISIBILITY -# if defined(__GNUC__) && (__GNUC__ >= 4) -# define ZSTDERRORLIB_VISIBILITY __attribute__ ((visibility ("default"))) -# else -# define ZSTDERRORLIB_VISIBILITY -# endif -#endif -#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1) -# define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBILITY -#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1) -# define ZSTDERRORLIB_API __declspec(dllimport) ZSTDERRORLIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ -#else -# define ZSTDERRORLIB_API ZSTDERRORLIB_VISIBILITY -#endif - -/*-********************************************* - * Error codes list - *-********************************************* - * Error codes _values_ are pinned down since v1.3.1 only. - * Therefore, don't rely on values if you may link to any version < v1.3.1. - * - * Only values < 100 are considered stable. - * - * note 1 : this API shall be used with static linking only. - * dynamic linking is not yet officially supported. - * note 2 : Prefer relying on the enum than on its value whenever possible - * This is the only supported way to use the error list < v1.3.1 - * note 3 : ZSTD_isError() is always correct, whatever the library version. - **********************************************/ -typedef enum { - ZSTD_error_no_error = 0, - ZSTD_error_GENERIC = 1, - ZSTD_error_prefix_unknown = 10, - ZSTD_error_version_unsupported = 12, - ZSTD_error_frameParameter_unsupported = 14, - ZSTD_error_frameParameter_windowTooLarge = 16, - ZSTD_error_corruption_detected = 20, - ZSTD_error_checksum_wrong = 22, - ZSTD_error_dictionary_corrupted = 30, - ZSTD_error_dictionary_wrong = 32, - ZSTD_error_dictionaryCreation_failed = 34, - ZSTD_error_parameter_unsupported = 40, - ZSTD_error_parameter_outOfBound = 42, - ZSTD_error_tableLog_tooLarge = 44, - ZSTD_error_maxSymbolValue_tooLarge = 46, - ZSTD_error_maxSymbolValue_tooSmall = 48, - ZSTD_error_stage_wrong = 60, - ZSTD_error_init_missing = 62, - ZSTD_error_memory_allocation = 64, - ZSTD_error_workSpace_tooSmall= 66, - ZSTD_error_dstSize_tooSmall = 70, - ZSTD_error_srcSize_wrong = 72, - ZSTD_error_dstBuffer_null = 74, - /* following error codes are __NOT STABLE__, they can be removed or changed in future versions */ - ZSTD_error_frameIndex_tooLarge = 100, - ZSTD_error_seekableIO = 102, - ZSTD_error_dstBuffer_wrong = 104, - ZSTD_error_srcBuffer_wrong = 105, - ZSTD_error_maxCode = 120 /* never EVER use this value directly, it can change in future versions! Use ZSTD_isError() instead */ -} ZSTD_ErrorCode; - -/*! ZSTD_getErrorCode() : - convert a `size_t` function result into a `ZSTD_ErrorCode` enum type, - which can be used to compare with enum list published above */ -ZSTDERRORLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult); -ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code); /**< Same as ZSTD_getErrorName, but using a `ZSTD_ErrorCode` enum argument */ - - -#if defined (__cplusplus) -} -#endif - -#endif /* ZSTD_ERRORS_H_398273423 */ From 89d1ccc477c1dbc8bb8d13ad2598ef0190c25898 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Fri, 9 Dec 2022 18:40:01 +0200 Subject: [PATCH 4/4] replace zig1.wasm to the removal of BoundFn This also no longer uses zstd compression on this file. The reasoning for this is: * It has been demonstrated that the release tarballs are actually smaller if zig1.wasm gets compressed along with the other files rather than separately compressed. * More importantly, leaving zig1.wasm uncompressed may result in a smaller git repository size, since the repository as a whole could have savings across the multiple versions of zig1.wasm, which would not be possible if each one was independently compressed. * When in doubt, do what is simpler, which is to not have this extra zstd mechanism. This will remove the only "vendored" code from our build process, which is a nice property to have. Co-authored-by: Andrew Kelley --- stage1/zig1.wasm | Bin 0 -> 2315523 bytes stage1/zig1.wasm.zst | Bin 652012 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 stage1/zig1.wasm delete mode 100644 stage1/zig1.wasm.zst diff --git a/stage1/zig1.wasm b/stage1/zig1.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5f4494d39be73e919d91d25eeaf92bcc0fadd82b GIT binary patch literal 2315523 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 oj7IJ-5w{ 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

    JbQ};;7!dw);)$Y# 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�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%0AhEu!gTJ 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%0D0SBGnMElU@M10CrEgYS1$~X2 zIlR3nHKkIl<)y#3gkO1T(bo3iGm26Kj$(z4(r;>n)uPlH!%r_t&8XB2rQY}erCLR) zrw?=WSO)#9O3hNLt5PLIoIZS7QA**dj41u431$@YI99+aeeVaL;xmgLPV)pHTW>vK zotAe_EGxFXMF+maaCej%7~ZDNp{02hQKTwP=ZP{M#=!S@Cz1$dJ*s_Ld~%rshKhEd zDhWan#`I1>Ra!08@v7K#+z}CuHubqcig=6;a2Jq~BMi7&KT~82-H>&(CJ+d8rC<9g z4dQ)gWB{@&?IAhzrP5uk?sPd+@voksbctvv-E3E0Ee9MKcJ>R+dd>QnRIN#Bed8z8 zYLxqk$intf3+0Nj&9s&NigZ_2cS?1qsC(yOA_(=O?itc`kU7|sX28er^b08dNCbBr zH{~d}Gx&zWmfFsnHBF=qN~7uip_eFVMrCFw^AW9Hm+)PppIMb55SSkLSuYB=soUky z&NRt7ol{{ViRnkxV2R61grg#;t4i|UG(w_jn$Oeqr-ux)Cg)Xten9_%QPIv$Eg!Yr zazJ^dsE>ERPLbjzYdD7G6V|^m@)ZtU)+LcV2OzthvqmGM!yDiAZu3>j9 zEwiqxbqGkWiELy|$O)dr)svT*j$+W=H)b`^m|&tDh(>JLCyCJiY$gSp;Q#MUBi~P_=+CXD*70D8m*TuLll4V`#xIjrPyZEeznU@ z_L=s>ms?@mOD+r{Utm>md7TR2Hby1UcE|}qu6;VVl5>#A%_1PeQ$-nEvkq1w&DP+10>ak~l*3+Vc3^|7H!DD%m71w|M)Fqrr+RR|)i9333Ly&jL#6qE#%cVI zH47y*y~$=_$f3(nN)Toi=eINqbApWU^}1PLZB|x6X%<==&%zn7IL7FS(s-$(^ zmiY9}zTBu08dk{tJ%p3APEoYAR%+`D1KWB+YtAJqlh`DT@7iL8A;SQH`Vy;uiMC*L zRu*}z_T6tz0gEAB0bUIOhaSvxEXWIg2q^TY4JRwx;Vvih}h z(A%V<>CWsYhEdFI?{4m_ZFW&0md_crk2Y~am<8b9(5y#mj2F}->lN$h*hMC-l<0Vg z*j(zxlXlOWYT%Kn1GQE%OAdE?l>&z)9%JPeZev;H6&Vp=?)LD(XH^T@h3fG~oQfF} zhW+|#)_dP}{A?i0hU0S`syRQJ?pRY!5u^1C8Y*tB@MAu!#C@n>l zU2geIy0|CAjkeNZATB;K$r_0r2{RVGXuYFs(M_wu@=sPpOF$o>{lOs>h35f`URW1` z#{`S53z43|jM~o!YeJ#|@z9bzd7zeWKT^Pz=l9zam#%^8-Vxo)s?&T8Uv&6BpN=Z& zj6?^N!!^z0&fv>6GLAy$n$rHVXa?E7s!wG5F?~{e9v6E>-zl@IH3TLCi)&35P+|OQ zZHM_ZXjq*o%qMuFrAV{2wM<)U9Iy*XIH&8UeRfnu@nGv}OPL~A*`dJ5#Q3GwQ88{x4ANPTxBe|k+_dka&7F0IHQNY0$bnmp?EE|<= zFr0gt-u~?#7)GjO&gCU%fLRB%rk^=VDP=!+tBzB@+#a;7&1sdKrsO`gSD=_9wm_Vt z7}xuhN={Mo3F&~6YO+l{4DbkN^eV6P(Hc8Ta#^Qbi8+tLTtI(Anz9gOik8#(9E&l9 z%M4$uwTHR1^v0q!blV}dR(8Pe@6)?PYiLbNJMYO&Jf^e90iRn}M@-OHr$FeuT4dR0 zU64W)v@=+A#}hlG%E4pN&IqYQ!>cldicp&)8bbJNvw`|Zd(ofaOu({GnG0B>YMWhJ z&T;s&KGVuU@}-(JoaqFCy$IL~QnF=)8`w)_V}40xmni#qUvSDb{KeX(m{jp)J)x;( z)mc^@wO`V>s-sojK9y^W9Ez)_Ecmg=5w!jfpF)hd$mu^<6i5-2RVzJj@20ckIN)FG zKJ?Z73)zHh|5La=*K40fucg}+edCP4&}9=Z4~0z~Y@jo`wEZC@Sno82g^P55moDdm zToGK#^FCLZu5mg>`nTzn@{6{=&ZM4W`vv6CQ+j+a(X?*E0*zW;m%~FvuLb$~avCT3 zyL~}?1;w=%g=%MA>rX%>8Sj3N6<@FI)ck(vSE4ZaZZXVP_yYW{#fnc3UB;S}Z7&I& zbd|}kd`2Tipz?w0wkb6_x}AN8H|U(Xsw`tdhWbEjI?Ff^9>erpbfK3Z;i38ul;R?tpArHBR~2W`TyA|#N=a{Lb#Gt6f)dTA)*fQh}zg@W$IvGS;yRAJEg%+ z^}&xO?F7CZYU>1-PE(Z7t~x&AZi**M7}!;weH1KLC+1@c<$RO4BO^*u#t2Q~1qs0Y zrn?=tT+BNy2eZVOd=>7JF2I}xUbCZY*<3!W2C5w$$VBNf#HVZ(X-<|uv>(0}HYDM6 z+^KEw@@YVHXzlAju~>O81jDmUUr0FE{bCNVu$^CL@-s`K21-m6pBa^fL;5kxbmFUKC_vZk1<1T~0Od z=|E;rNit*Iu{8oW^#T2;vdX4SO^EMi-o9k^2Qn1ECKM*(VzFQ`5tf2()I_3aTLYZ) zNZoPHTy&DHk;c4Y*%H5KmBKa`!ia4_W6a{%9d6c=q;xzMglNP5ukDaLbK5G_KSd6k z835Gm68Lh}C}eCRJt9L)ivp#&B0(c(DWVoOfYg$d2NV+5r9YCn-p5HP4fg`AAJD8`be=< z?n3B`&M#(COwq)-1>k9RMAkl z0#_a9C~cEUL7!C0N;{RGhZXTF_m0*PZn$mo0ABi}dzK-u;pa=D8Ek^bdP9F!fz-ig zdFtgEc7w|irKVmlrrv0ZZ6AiU?3lWX&^76tH-T^JnfiFn)b$ORI@tf&qZSD zm-f3BMFa{~Hpk-AY`&`p5&yyvtOqGNm3ORI;6I!t{{fGua3M~W$_1jIYFQjAXde^Zz zE@}81*0J20)`zN2KFwsB-4Y9>yB*UyF_e%FhiaFu7wxd0j_g8Rm<1cLsX~+PH>()o z`!Zw~B7w&^S)T`EQ5*Auk8@gLKN$-b7RG{vpX=}%zL^*tGP3~-hQhneSh#}k@a0uJ zKq>K;q#XVt1-0)0fko2Hm!*%j%uy0rh)a`fR>G9X#;?=&A9(#biq9I*xKJ(prT=v8 zgBzF|S#bx^AbTS#;TyC~5$W-b434a{Ywz8^4@)ZjX5a`hDFBZejwNsQ9GN%4F+QW_ z4_=QWIY7w{p=Rr*Wb-P1V!8rWwzpX+)Gd_key3yy)J^Z90!EMc5!#-n4YB6|eZrqp zPPMvLr!v*5o?!yYi5Dma_w=Y%lssJcM8lJAJjf{RV7)r~>F1iIvS-k)+I!`daM#o6Fsq>u25BHzpNBI`cJ5XzYkCz972Jjqe=|2^-na9S-l2kRojz)leng zjjfxXJb?ru+e^B@oE`K4sf#7X;ytwJ4PJFDa#Wg&{H$y2-rHj63wjPJr*K`243rY_ z4ut~?bef&8Xj)BqJe-E$ded|3r!*6PysoOoq-w-6T{UlyuLDz}(Va)Z5&=SYE5R6! zGC&a$X`4uPmdBXWofYJbwuWvMLRe3jNZYn|-)7gIU=?GA{}O(rxA=bvpvdWgd7R8y z$;^Pf;jw5ra>D;;g!CC8cBIOk*vTt-u|xU|^JoZL)20_@+H|)QmHvm|;7DwCvmy@Y6Qg1(G7fgFV#zxWR?nCX-jbH>(a*tV!#`4WLHpeB^?-_l zkwNc?M;%EMpqAnweycc|$#&k*rWwrgkjBS?gXb|F)SA~elj04Cq=n+AF8 zg%ZzooL5%sJ5;mKmkb`SQ?{2C)cOjN9ai3}oNK+AyT0UDbdBa}EP5rO22(u4J^m-r z>-LaQ?E1Q%BCe+=NiioU%L?cg>-J<#r2Ani9kLG6pvXz4qD@A&1)28ghho7BG9hCv z5y$%JW|nXdOb|5^cY|n?Gl?IpamI(;2B8Bj21aV%B07Uaq03BNw1LA&v~Difx%`xp z5{Y6nYO=>|uGwBP$f|97t5#%Y(ddRY4y|UEjY+nwj1l(foz?}hQI;8?(3Q6iS;0~! z4D*!(aD@Y4G2?(mIN*TnqQb{B4!~NZj;zhxMD;8nZL4UL?F-8fnaZs$(VeQ1AKb$h zImCopO-t^f4USgoaB<>Q+b@W(H6WqGEV`?HZgvB(gbXI$-=b)QlPoZ(U7>fCgx^fd zp+12DMS^^BltMpUuJo32<&7Hd8UNq?0Ult%$2NYPCyGL*$)EI!fU)T2()fR@szp4< zb7TPvWMn;hzM9Q+Kwd(tYR;6qcLN zKoSR`3KoPD98FoXkT{%kSWj4g;FXKW-u;2sKR!IeIhuxt+Hef5lc@^ubz zN>Xr&D6?cvZ8f%l+<$sEL4z$xkJM^p6YNJ1mm%OBcG*U2veZ7toF%t=v=OuELhR!9 zgsf*jcO#cHyCrN^2A*E=BE(VF}tUwmi%yT4JPP61!&b0NRO$8#=efoCMv1P}93qq)*ada8V4#UngmV%6V0V@X|M}Yh4Dgs*yU9OP_28MAo(jbGND$?xJVV zoR&0dh*0Z9{N=H;)woe>UF5av`E=g~d^(i#Y2Lc0)Xb=-2Z@z3pK@)JIvP+ny}yS~ zXBiO6t-hC2lf{_#>Ni$K8cmqKn{kmJC;MhHMinG5>c(nr(HQlD{{5@cTkHgh*!KE6 zI!X&WN)DI)*zva!CLLbe3|Gk9mU3KIdiNLiaXg0f+Ee)-s362b`qXJb7{!%pt*%4V zhHVoln?awp?X*_<=j^m&zxuXT`T_PJ^X+M^l+C*7G+X}owY5c_RGj|yH@fD!KptHZE411??e&L+fRT z<$w?NB~)7Pi=)UJFr0m-lQXfx{p{LtMLI8u%Pb=jRCa}1?MUPb8q((6%BhB(H5%JF zKEURVU!VdZ3tV55e6|(*Y93&wroa0J?1>%8f09rE4rs>ZO4%_M$*WQr$t)l?+>Cc> z#qER{Xk)a4pKgc2)O0%`pk3%d+Y#@^zOP7)Tmb;2Gv;tWS+eCGsRx1AgYW?AV8TJtx4=@3NP6c0kV zpMwtE&8m;rqhUAOg~C<9L~7OrOt6Vf&Y2c&OGx6I6>ATi>g~{^BnDpMk@+$%S|XQ> z2Xe1y6KAVs>+W>1yHM(5^kGW9Y345;nj8_okkF&j$1;^JMJ~T#!?)Qo!k_|1OBx<( zp#L6N`j#4Iu4InpR}i7ijJU_$Fe#!FMW9uEjBDgFsH|?jJq#mq{DN3=*xOvQNZEI` z+@j5b-S7oQ4ny4jBn^K~w{_uO2xaq9AACLtf=#Pyp>lXH$uV4dFp{!>3V)DK3t`Y49(}rX9HGdy ziVk;?7xj#Epq$KXiUpu@eM-bfo8cxU6U}7nHWnm(3OqmbWO?558sYgSu&(EMCt;We z$Nj@O_d7$FXv(yw1Cs^!k~5)YpBJ(0ld=fJa?eJyiF6?EYvZ>klMaC60K+`@K})C> zP!Jn-=I<+5k%8qJ=_d(&8ncQzu6B`JtltZ1@5u=9?aqrH7K|RSQ;E&~zGcJj zh}XiaGIAcoQt}?CDVAbsUX8fGo49F#)5g+hfWu(KXnw~)cCz+h5(~Og;!Rq7EyOD4 zVMYw}eGIfEp7bLi?uR|aVcrrJiu?V6=4n<@y5xO)<@gj`)-k$CUuRKxdnGtHWQ|j| z^*Kij56xS>a=Vf(@c~9hqH*NcCX-s7nxs&zy;-@dls*)Va&>x}on-Pk`^A`T4e7LO z5lI5u1Q>h1O9BiZgw%4ujObca?9$yy%W@HNUi(UfRSR^lR~IF$v+N|SvrU@6hwSeH z`7)BK10|UqnyZ~+15uw#GR2!6gwc3=B$HelfRjzs=OoQe$tgUm#Z+2zj)Ipp<`n~! z^&ul+G0?FnE1rH^uHW!R%?R)f#ishPgE2KeFE%+9)44%Lb}B*0+OIruPNrXZYV-sE z$p-cz>%5XDv#!W}l7*x=WqAl8fn4xeW&306Xh7Zc9*TOwN&M9IFgIE7rY#9Zc1k1Y ze5))E_6SbONpLD$D8cD;y`YlK<+I9WZ29SK@=BcH)V44mGZ&J?{6i?g9kl4og8+jl z`&QYX;nmPUrO2T2$ z)*?I=<}z~>7?7c<+71tPNu(DY*hxWqdb~n_P$CbBKb1a7J}f9rptx2s+P!agA&^+4YWD`D4u4o2 z6!}>44E|))dX=M-sch*MWU?kj_SHMd?~caXkrZs;jzR`nuwoidaRrL$&y^hey%)za zQ-OF?npsb4q{yl}6qELX6xW(jK3{uL)DHisO@ctUcPGhUO{Io&F!)6Q^uQdN3~1qJ zwcZuG3q(YdIK++?0b|%70mBd*n1&YFOn#sUs`+|I4E7Ok@6=w12ZW-uVJQ0>U;!&( zCEhl6Wv_5g&Gm5aSoIQ>5`GdJ;_qz>rgO16h&FzgH@q;^5%@=A@NKU;K;-te;Ior@>gOS^f-t6tDc)gp~c;#6e zAiAd+QA`HYg%pLFT+vcr1>*49MN_?fA(?Q0XhxZ5%yqT(K`%daaQ{D2en@&i*D2rowL2)$7cukT5X8)9G_ehE|vuCxvq$p}jRKV>INhIf@ zqMXezMgeBY6!53jM@c3mU*V|LvP9TjNCc9_pOt(!htf*~SED2kbaK879+H~9JorvT znyqPDzH~!%6t%VnHkc^S22Q>mwchHfWiDTjgJyWh91f}XDIUA<)Hq-d8|S+Nk{rlJf}2o^5yf>*Ps|X&R$Pl~1koOQI51f! zfJhN=)CU%x`>xpkq;SDO9?1_zOs1hmiddIsOa(X$)Q1;?WPhCs9L_-$?Ny4R-72p* z>+U%+Bc4=utN+OEZYg*7iwe;_sqX&vsdx8Z7@eKrn2!#r#x0|xkf6l|e@@3xk|Fko z|4d!e=Tq(a@1A;Ad_)58qz^;b~)9i@No1^RY-9>i$mkg`wo)p8An~OJ~%l);82&!C$F7 zwVj47Gi=z3(1|eg`zy|DlPN&+ zy_%)>7of3svcu`A>>2P2OBQMDVDY7Ay_ge#(fxfB`{5`0WXP}@e7euGsXO!A_T9T}b#8l#ZnHxKr; zWG94Vg)jlI$kOlM&4GdCmh2?qtk8uNLgT+*mn)PD>F|pbgY2gC?VMU4-QYH&aij_{ zE9vP`$Rus=6(-ZK1u}YRQSKM{zNkUYFwHPEVy33+Pu|+ND|s~~wHkD{JB6tjsKPFh z>D`sTv*GjSw*zEPFRqv{o6k_DCy!G}t@RJVWLh z3pLgQb?n@s(F!`jU4=-8TBe3DL-y2zSp0$X#1Fz3%TYPF=UI2{VIK5v?UGx}m@Yk= zKXD@1N8{bKP#3|{DR(02j#t&>$FHZY2}Kyf^gCdj3y+hdoF*r!EThvdn)R*E2Y04_ zdx9!^5ANB0*FJ>-33zGk!;-cSQY^YdZ|s&q<7;uJ8sej2)Xr1HNIq1ZZ~Gk1ENhg9 z+IY|$krOBCHr{Txq7k3?`???Q)AQlZyWv(3?#Z9!!|isD*Ebk2G<}Jh{_>L;@a??= zwsk}NIYp{cVf^MB4(@694_Q}yi=7#~i3`L~G3IYD=3k5($?;Q!mbMigv!eI~;>x0^ zPV+@_vYZ}*IFxkqQ>&zfOzK`JUm(Zjw|rrB9{SF!?n?1)cmBjBW+TdT%4>Xv8Z@39 zK2@!a8zeBOpvLw$9w`cc)))Sm6~4*}!=oxJv)T;YyyedsEK(KzGA_a`U!l~F_!q*{|{%$jGY@$)S!^Df_lO zubOBoPGHHn)O`YIAFqaGUKMYacs1a+n#*`qw4FcmM4kNX6eb^$mcP)P%P9DO zwK5;P%nWRl_YEo{H#=|tL~u1mF;W3(UC99Ydm1IuAB+a+-`072-ejk8A4wzWd6ME8 z3@7S$WX&}85sC;8PIl@BCzC_1&9~gOCwSSxc0GrAAEUfo!mCnp$yt-%iy5UBXf%2qt>>9HK!f!qt;g@)fPU3@k?t>m; zKig6sCQcD(PM$KqZ$i*pyGm5A?s@LyeH}S4&70`Hz|rPAm_Ut%e~qh!;M7k6OjEsz zc4+$Y8+lPt6CQjqNs!G?QNMqJ{Dg$*8@v7vRT19%PS`y{)s(2)US!w7PGyqp2U-U( z{5*$lmkt3@ZN6h4AR4{_v4n64pxiYyoMBwp#WyT4i)6_$Ymx=bl6TmLeIVOAo~UOPbL@sMZiDG6ly#N)T{C2 ziBkqi2kC{ps86s#ymlvW(4h9 zJv)~`Nk+_QTrnYYSSgcpRSiHR-JjKAh>W0JVQAeLB3Vz+QpAvHnEtFx(jWbqk#vP= z^(0*tNz(&mSrF_Y>9ZkdFF=xBaxS_ZNX%(+(~W;FEt#WwJuTlZT4o-*rXll!o|yk+ z5GgcEMDgW6ZS{_Ww0PF0S6Q}%~S$VBy#e=mvaArO{Xl6d7nF)*O-ay1yq(g>PLO;xm z%&Vf(1|o*?iDD$DQ%O}!#Qg73_?i$K13M$U3Wcg|8>!rsaL*;L>qK|9qgy-CZ{C+y zU%i*5XF0{;p5WhdzivEklgP3|JJR)#1bq0Hyxi9JQWy~Tbx(WJ!l$j)7aCF3U%l}^ z!WqE=pnLOk09azzOEa9{jr@?b`Ra7_1nQdwhJ$;an;Yrf?rr-Vj^%=YA{yAB%pN*3 z=LGcqIwI}1-$*y#z=8R{VSY!9r-Em2_6>V)q<(m?jop9t9ebXOwPCVHe{S2yeg-)t z%4;%pcJTQjF$2t0xhtp{3<2b^8z8gZsg+0R@7u6ZZs32Ur@cDu=EEH8>Dv#}T#xcV z*OlrWC}a8!8>O6$s$A|%iZQ0`8xQt$VgtlCV}J>uNM&bZOl*v&+Zf3lwMm3bJC*Vn zGb^-_8GUAj)-xP7Zq1(mz)VD}xbr0TNs9vOjXkX%U^L>q>e>lecYb~clw{O(@>=7ULy%(lC>I`x-CqBj|1Zr_C($oHzO8Gltrcra`%=wcLT|Ji z#t+_Y`ZGckx%fif$d=fL7~6wEV&gFc&XBcxxxLDxKp)KR0ehQjubgjqh+ak%zl-Cx6%D~t(k$#CbfW-sJ@)Z!ZUMUIh^A;V*Vdb`S4Xy;h)Ew0DH*&Yj{9t#vKVWC}l75;98;oBK|HvDRN z_}H#5Y1c*rLqY6OFxrcPm{}oY@n$6s*-A{F;^N4o2M2qOn#T-cC(_R%4L|~qx*h#} z&8>*fjY(q95FWm`mFuch^S+!K#zi(p4Oy!L8oI<`LSe!aA#OB=;b5FpyGlm@7^zK9 z6O~@1RR7&NqzEE9%L3Tb_<=7RNIazd)&8OMSRxAnJEW7{vHt!k^T7*r9Sy4C{b z>bSB>X47$j$wwo8@q<@Ne#%NKah@;++>rcs-OeziI!8+qGQbz)?#5`G2g(FYKTn)C z3PO;i1aMi~g#Iocv1oJ86J?mV_O&yrP3vuLo+d$2*W;1^LRIbXtSTlyrpUM7a1mY!e8-(}R-Pvzc<|gVsn!y;c9e-B#U$43IC5E5nPtjY zZib(HIG;vqf9+xQO$k*oxg$7M5^39)Q#oH$3-2k(f*j*ycYL>Btzf`^eoXbYVd*%P3 z?jO;~U2!FjD^W-Qu$F$0)slt?1CqXRMwTBUnI}i$^JD038$S=kgv) z5F%(z*LFjS_AhGuoCm<&%i8wvc?kbnp1?0J*N)a}_|C_5dZd%4V2cb!9>75Ul%kr> z@va3JZSHC5-doG%>L^91qq|ZmKn?`gz>1aZ|K-eZt4$C!PL|l2MOmHDpo}OS7&$gn zwg=;T^9LlinSW!iwS#Ck_Ylb#5fd--r5zu6u~qHib`)>k%F5jG0yU9j>vn z9V+Pz>CBIbu46HupT*5K>D&rR3UM*<+~@7-WL7Pc{M|G4StXgp++7OF-kH-(QFTsL zl}YX81|{Kd=KB_%uZ^^?>zRdBdx+urpE=saC zQ*77UKc=sa$5!-}^pA)UFRMD)(LEHtX&r@gO}MYTstT)p19cTF1C6)K!12yHaBMQl zh7#REyHTUAKh|V+<^3a?vHtQ6M$DJCKg4TJ*Qkt39JZ^A*QAkj!IP_}FBzU>Igj0>iY-SlXjZ35ID!2Gco%fj4CsrelP-gJBjJ?!{O# zH3TSZM;enZ?3(GZj!h)o9PVO=H||n_B4V+M74B5Exd7}W@74C@n5&fi*m%D{Ih}W+ z5}*<>d577t&6C4Fulc(nJ4MJTpMjbYqIX) zheM_y<8>#_u5)kXl(8gemoTf2l~ zgq-s^A(xc|^@?h*Q2X1z4eK^atSgILL~=8PMWKw2Ri0a!_`Aw<9cg(^zm&WKwxtG$ zpj=8LNp;RS3-d@)qX3ewa8gW?IynmAB1gNTKnYTAY05g9(N~1(KFp5;_C1~QDO*q% zKFK5iHaus63ZYTy8r3}nkyQFimieT3WF^jZ!r|uWCqy>+D-DW&XD-Xq) zG*c^7S)r<34dkyR%Q1c_s)ltvRF+2qD$6j>=G#ZnOflwRtb{|Ya62?fsd+T%#vgvP zFds0r2bcL`sSLE4*L{TNNCm38bD-r`al|>DC$pLCWY?)vgzRwOawzzb!F`t8Z@voo z^TG(bZz~-ZO1bwbn+a}HV)Ysq^;e?9`ieZ&L@ekVmn^NHh{#XGA)APWo{5kQb>fu! znxK2?FMJ%to6+hK?^61DxI3GHB5Ri$l(0mqt^Z6eku+n#3S>AMX1W&HNa5EcB^jT9VfmSNR^8bW|T3wN}pLnfyC{gnzKT^^Gu3ZX)%{dLoMi+EdIJ ztspx^-D9Vf##>3h$p9;1rBcE4sidF6^fAdPRY5)15QU6XBx$kYlpTef6=CEhbTb^p z#GB|Qkz(;i_m(;K^)EpNfmL_DC;@THIkwwr&0j;tA$Q|O)K}S$tQ#;kG?|f;5zX6W(U@#kPt}@v9-RY%-t~odec`{zNU$eo z7H?Fb-5P~olo344d&}N~Y_+vYL0DoSCrhw=i@aZLj_C9xSfZoy--sroLy^lyk?Jp~Zm zARkMJqg&i*>s@t99M&2r*8X%*WGgvL%AZ9bx3-hOI~djZ;0>};XdSl-l_v$s{3V|^3?imKZAR5K0I! zTm2YFJ~F6#1hHgN(fuP&x%-D>iF5I0(E3~$MB^ve=YuN@ZUE6JB9zw=f6J>`NOFzNWs?8FgryGl%jjn zBOiJ*Yh+N8s87*C0sqobi8!7F9eD@oZ5kJA4Wd;fe7INZCy?V_4y16RANW<>hX=wj{AL8STC`AXG#WAqkrjq)_V}eo4ZSir7F^*c7Lab|*6J%eBMMKUBkv5bdRm z-=fF^7iF|}dm*b&)HS&(O?8C78Y3KFHWso;GZR3@DqZL z3X!I1ym!+D0slh%$^Q8t5-P<%|1y7|_#4V;DLFNuH1@)VZvT&)a7dR-DuRbJB4eUI6`{T1VB+A2V{K;J67|GYgFk zun7V#(**?a#9|diuN6|WKdr%sl`Y@;qnbN4w(AmNqH$w1a4&u_PI#K*Rd(WwSLunR z_0cAuM*`EEm1rEkQE{tkb+(~{^qA%%ZL_0vm>eM&U{`ocr;%PD%f11Huyer?TN{H; zO^gnKgsQI!;9@>7+m;}4)NS9!ne8F<)InvT3Tt(?nSg%w*>ft7@)NL7&4H_GTLle? zf!$*i5y!T%v<$Af{)E@+#Vs}auRQY2$7)b4unjK+F`_AL=&&g4p7Wy@Nw8q1-7HoK z(O7hpJXY&CyA|#+f+!V7Qot_hw&XL03s}r#6n0bIB1J&N6_5dTnZpW5*JQ9x&4{IV zJq~#KqBhG9RUbrYM+z_ETk2%MVKD!P@S{v%x!6W=$!F^xa>hZPgN$<<1D6w-+;Vl# z5rG(ck5TPyx21o`?O;;I=_!|OzbI()kmUk3$tqo6le^WVJO=@Bu^KYzAVOHzkhaD^ zP1X`?Z+$IYp_YU(mkYw2RFh8{-mV^uH^_us5S?UdoxhTrZ@(>_>4E(k9uhsbE|-a- z_w{+b`jnjV=5CY{p+pZ(o*50f^`1Ep?gJ3*5}QEP#HysHFmfEHaGFHR&s3CKD6oE* zd;{6FD;#DW&+y#n*ttt#x&toxX10>)d>L|%vX&+Dsr)UdQzyk$Y{RR931Ul-bAEIt zgnAEiembAXCh-rRFhgV~${53P&}{VAsLTzi-7zhQ-L^#dq#0H#QC0t9nVT?mCH)(o z*Ew;zR;yJZ^Gf<{g7GMMV>|=MNW??S%@QM9fDveS+cD9C_F}+$E6`rZr=tRGjrQPP zp_PYnYYO;ggXbjBk;FB3m2D4Jb23^U#}?48V%C^!^sG|(_O8{{^N~$MFO)_M9?Y9) zS0{4q!%zg&>!scdvA6J$HE{M7YuU+~MymOyCqvy>?%Ea`OY}Glu(%4$M{UA%G}VY5 z;KQ|GOuOym%?6}XDD~3LoTTSz;6iasQB8jbf~Gj(8wy6mssXt8;)O+pG?8W9od{ z#&J*nkcA>vyxl|Ay+@i5hG37(0iZS3uqg3eD{;R{V7KV}qK>RR`l%$3D1QLtA;~z| z&WSlm^`=%DDZ?GUk^oKQ4!=MTfXE|dpt8#x;d3q*;cJH^*@HiX2xj!9E3o;TQB2pE zpj+t-6STe0^;+{ifH++i9CH58UuN7l0y@{h1yq-haP@ep_ml-12I=Pb{tU@1YSCOE zl?U!0H|zi*qhAI5d$dy>>8P`Gw9a5aPP1~bVyHTnwW85dWkqf!HTuW-cTZ}Zx+&e3 z>e&@w(9Db0n2DXi$3m2rR7(%j6F@}=D*!HmAIV0>$lswq5BSadO=@UpSPir0O0Yz6q4nv)&&%+>|pNG2GlVD1qCwNuu~tYE2!HK7*xTE zA9L0;qrtk=;g>)Ge2`5Gc_o;anI+7L5+fe!;e`ia2?!|KX(D*JR*bO*wYiSAaRo)vvDfxst(=x1py&bWkY%5kCT zTCAdOuy^?AW0j^w%6ow`R$-dUtYTs$=L!=f%z`F;8e{5yK?hgN8gybHfP%X`R~Qp% z(mYp)k;D~@tB3plHscBy%9<#+f4Xm6Mumrr3jd0^Vi7#lSmSg*j0YsX`AIKa_DQA) zZC!maQOPGl#-nX27cPc2DMeY_XvO-7$u_iVF5;9<;;8i}-fSq;h8FM($^D?D2a#5- z*uyVQaoV!unY7i2Ods*ls-bYL`WGrWev z6y-iH#rb`vfYbp{?`Ifko5}aS8P;s7nf;AZE4wGv^AO2)&Vi5l;gd;Vw_W6 z;zC<9s!7k1*%&<+1tzpjp6~z~^F1Hx>zR>fJcBX3o@a(6Hv4d6JY()kuG~^59gf;u znRL)(8_VX5WLliZf_x3g=L9n3YYfGpjiEAf6+<1f)=ayrHP28}@ZcbZ`a#Z6>(uFV zFU3nN`{|PiDmbV|@M!u>@R;j*5mauiTafvT_SDnzHInb{tT3I)u(6MLxMHIcyVcZ8vVbk$i3k>3LAPS*g*4 zrj-PRi-K9)Dl=U%?9jEc#QtyU-UZCAtGe?%kNc{+RnpPRk}cUj_adMS783X&AseVu zAASucar$#lI}?91?u@@_kHmCrN8|Qn+@WG5BZwga42a-BkvK>sc2LspAc9E>BVqvt zWMYT_2Wo;7l*A+oPd6Bt-+!%r&ONtOvV~C6v;}p}J!hZ2*Is+=_1=5q4=Ko^MvY)I zi_g?ClPV>u;t`Llv#?Eg2=bjNjuOz8G>MDn4I4eFo;pzm0-CS)oREIk&Bts7#^Tp# z9gQ;bwZOdVqbxl^oS7p^kZ-KLa7nw|^-;R(?i^qQ7F zV6}qwJS{#EWe1ma|4rpgRNp*Ao_$uHekgjZpNNL#nG5=RNB9bf36jRH*hM)mSHWz7 zqUTk?m@3XC#rT^73v0cDy$u4b=!Nr&8eLg%G8duAaq_a8lqAm=;H&)Xu4dep`*1F* z_Lsnk*TXHPf0SCgrS3T@HA^I_IgnbF-JXI-&pr-LVA3fu=3NVBFdGuIJ;G+15KWt0 z{Wft3#<~b)1B2Cjko45z{TG964elO*_d0__!JQquvJ78#XR5upsLBYJ*@w6Xw^A(6`A3{<|n z=2wv>1OORs&Ta`+R}OVbWSFxh=YjxXi}m6i=7C7u10m;=L?p%VK?IME zyETa_;Ffe>ne|C-FcXV7Ga+$E4cDz<4ie>fWBQ;-C`g75{k6u-U?7(WXRL0mWNIZ% zfiUn`A!H6azxvH`M2bb}!NiTsT*C9v72mBDof4EthL- z#=2L@5w)$~G!S*jfEM{u=tjAq)mahQPN+~syGaPA z4(_CZ@7OzD?Qm`*p&b4h)kN3XK~8jzNY~9?$z`s)-7L4>?~R3KfWwi^=K^EDJ_Zbq zjyE{=={g&}#Q`NX61*H30z};_9;J{?MFV6OKn|%c0Kq?y6b}Ii{sGV%DhvJr1LUv) z0`sengR4zG4m(K;F?1TYa4xw$@sXI8Ed+Wwo7={MZ8^j~UHS3BK>4YShJU_GDpoZd zXgM|<_XIr5=n5VRdxw#iV*jdMJ=m- z20BWR(v+o|;3?|2k=Uk$wvdGQxMHd!pE<~Xm$)7SG?`%AVr4jYzpZ!6AccZA$X}Y7f^wn z-c;qL7~T2UvDwkbj4bRyrceTMxT zroug_$^-1#M7@8|KAoMRE^>hl27z{Jmz$BG*mWMgXyTjB+9|K zY`_CWfifCO^$_9@CZa1)nnu%2pbE6O9lgwORAaK!O|7M2AXKiR#XFmIe(LLwe0c!O z!)kP*oN40kGzMgn8ng=-1I!eZX7O?K_jWP-1B*ijFYttS8tNp-X@eM+eqJg zuvhFCKSUtbhiQL6_XkxKgL6Pti*3&8=8$0II!lEmp&V+8Sg8sg6smfBP!;1k7pi(p zHHhvH>*h$P>Ts>9BV|=aQ%~wUXzW|MQqNI+HZ5I_>rp;)LA{;0^zfJ#cTp&G1^iAk z_jZA4b>~jWP4VrWy4f8n+u0g)XSb<`B=KWQY%5+n8-=~KDgMMj{!`@+OdYF-rX;Ki02DpdjEJlSnMIUBbGSXah z-aqIaVC)M$yH_3hC}8Z>&Hm7{y|te0x1Py8XW18Srg$2@;m=yP*O)0Rx|DDrnZfK3 zi27mzww0L@UYAx(Qant9W>{EBH)t3$IHRQa!2sj|!FB*3XLWNZ06AL&@{j?EJ(-kF zOHam;4lu(s6~^&dI>zx?GH(Je-d$s$d&P@Y$6QNB%Y)6N9geSZW4hoZB*+L@3D23L zZeld4axrob+IhIR_$z|Kon{OrKS(EHmC)}#zo+(JsU z3P$f=4YD1O?qjGP5sgo3sM!Io!7V=wyc%~SBSecCVnM(;jKuUpB5{N2n@R(b&0r{6 zt|v4Gs@W5;SS|ld%ncqH7(toGVR4THCk*xdAj-aMs>WJ?0k5D&qSS001+xJ2T$^af z`Rps^WsX$Fe0T zD&D&&NtA^aO-=J38`D}INSqzUk6?)za->8!9%FgAz?;!983NGoU&XkCa?-7oQpAO9 z!DKR>OeQIbVpI_^d-wW35Zq+h8?g5iQ7}U2j8_(s^R+!6nSJ3+tAYA+><5-yA-+vb zNx@3hW$jM+U!$3JI*p_u>pCem>R_-$TBTOldDwI#KfuJe?F@@Em}!GXXmPXgh6Yt$ zJoQSC@z%tvmGm!Y!MPkV$|GO_ntJi zq&@ArV9p35ywVGbA}xd#U*v7GL}yd0J7)8nR*OAH#S{B|RbXrhH*y%_2=L^~U^*KtrzlCMM1(m-CbZ$HY;K=8D}M0jJ!nKABm6!DM#-s4A92*BUjkDVG%$ox$ag z@m%7su&%g!(CQ{ra&qpq!L)deBq}e;$BKMgDf=^xWyQQ;Y_ngQ(P%#g2_DCf3dhcA92=?2+$OC zxFG$&xwK0b-HXZQGq%CF%K=(EWt`VN(XI!`(Ja9~U<%YhlJTIb#A^aR`Cn1vkQ*@k zw3wFuVc9VNK%LuTb8mZg;~1|(c4J2nihb1o0h=|%0qiBrELKu>s`*y3kD-ICkN2rc ztV=jL3vJoL=hFUob=HV?J1Zwl+mzs>SR=|$w1qf-KNnr*sn6!EwLD0el@(P6g~c5T zddSf$Jf(}80Hr6Ixia(xQm$(*;7^ksAx7hsVyovGaz9hiJkb^i?=KQ#h9g>_WHevI z{kV6V5Rkg9*a+;+`o{J(A_ZWuvtQP*w$;4kAQE3a8IhqLcU0FZ7|BO-kTME7^gSJb zK+i{hkG9(+o52B>$T&}$IlGNHH5e{!T+@6s9Ie3oeZBa@b1#Z_0wi}k(JPsxp6>tR+2F&qsqnkiG=Jo-qgn>|#Lnj4T_^ zW(8BSY+7d7&jf&t8J{AOO@x%ZvVD<(d zkL!8yeQ8$z2uA zvVaglx;eUWfFoiR$KuHJ_WIl~kx_df;v^b?#{J5L!qSXf_AN`ulPd)x_+?w~qf`K~TO2xrL6Azt7V=ZhcZbugZ z_ZV7~)=-em7<5EF()tP+@U@p%^GHh~aXqqKA0VKY=^srX15zY>^4a3kK%y zpbeAK`Y5OdAu{N}?DOl;P!fnYU_cuk5Ad)_LeM|Bxc-6TVUrf|wDS=Y2Il|9gTu6v z$ti`!j^l9No)pc^5i}YWD6xGc+9i+qGLPxr zT};sV-7_&_-Mdqm#32}^Op7dg$j)jE0p#P>1_Z^#)ijoDkCA}nYvqfJ;cYozw0=u(=>uejOiKFR(Os*sY&if?pQ zK4~E6VHE2kvck6LkTZU6?NUSgCfgf@7VIA=W=UZZi&bm00~Du!MiP2mW6HN)j}=Zm zquMSU{;YJ99r2}pI1Q$jzW7GFNd1fDw9Xe8=N5OsuSFo?{ePdTZ%VT z?-+sd-30I0jqwl4cf3JrGanvE2j_cQFV(B!@h9%eAX|d2bKJ?nfXj#BB;f?lW{#P_ zGpWMtD9e&hew%_>_RC5h(Q*+39cE6KFQ-X)O;igw4;gSqKKRh^>&ZXQg(E&g7ISgL z!4P(xmdj=wMZ;Cu3M+3aVCnDtbLjGK%J!VV%W49~s&YD{b5K-M&FgdQ&1-J(dV?Xe zs8xg7G*pw>qMMA`GXv24cc zt6WM;d<=yn;A36pdpRXM$)4YLZ?_Cn5r33@y>!3xXt@63cl1psd%mR%I%?B@sgr-7 ze;oGp?w`_;I=39C{{tjij_j&!#VWS^K?oL4v4JYsH33-6v9s=MEMlJi^V;L1Jf5@1 z+pEXLPQRr*vgk=l9E~qs-Mx^o(wAbF$xISm{$yxI(@Y zQB+L-+U?tK)wZX;`!=B*ckA;R0dHIfD%fXBiU^{$k^y1PIg^$iL6NblsH+j~JA;gJBgrL_ z{zA7L5uV1#q}r#5Z&Hx8^+JTlQR0`mt&5_4Ja>NW8La;-j}>k**+3>`XpnjKjqupw zJQ6VO#QJ7<><;AAO{N`z0>ONUI;@LGKx2$J;V8DSf#GGw@M4v{>?Y|Lk!=yR?PgJS z^vVi<`^s_*m3P8}N>yLbQZ9<+;HFEqg4A&Iskpw85xAj+rv-!e=vPkR}&e!rQ!9Pq%=d`6n(aOOk9`JOmw48^@Q-WHA3 zg(!#C)dxN=PMv*Qt_9lxgD{DOG>gW~C^Wom^kUe73}M=0>3g4p))*eXQlMGKuCcbC zZxF>MH=5aZys{oF0Qpoh2CC1#E92RNIqw-7BGpaY1&JK1>J1=jjW)oO#tZ8~WabFu ze$3}%nqs{i>09L4lgue~X#+FZ-k~3{K_`H3Ev^IIR={h-nUBVpv%f&eokBrE*s4y= z@-1~ykxh#4<3tZzv7>nTp2)76Dy*&TciE|pt;fILO~g)w5@_TTHX9*`p!QojMVoZ) zOYvB~>{9juvf}#Wng79F*$EEaZsm%lE0#t}mv!1pSF9Kr?T(EviWg_gmMlko2|DpL zfHa4}1lrL{u-l|U9gdzFjf5-94$t1$);3ZcvC<7{Qy)nwq)?~puarG%bE6vv!}Xa_>Iah zNubqIn?t<(ZJ0aS6wVhtv7=aC5|f71$U7U;SvE@&Ns1<-;xy5OMu$#vEJ&V5at^?T z$SF!0MX1P$A_+vHVd5pZq zQkl?~Wj}<5&7WdVy%uusre3yl5AU?9T)T;0!BS@2nL?tiVe%0A~lq|1BVti{&X~lm+ z(gwX{YcDMoskWKb+-ennOMpfMpdwZ6Gpc*KKlbpl~NR|fJ;2u=T4eHE6ihXI67BC1l=+F7tUw4(m z?nIz+M?#Hr1`CAGCy$Tv;-~?B?2J`&arUFGvO&E$2wiQF?eu}JHgIKj9M&_ghtdRQ zV%UZQxgfET`5Ps#P=WaUT-d=FWuK&0A0{J+IZYvD%tEGa`WOr6oxFwC_z@K$`PD}7 zh!s7=-!z*Z^KTIs0}Qn_c&Sk)UqiIoo>=fe=#Tgi>Ssd?gYIcOqT;iR2X|~C3h~S$ zT71fz7&z%EkLWnDDG$LcFy+Yx{NkM)bNnnj&gZ}A_Bpy`Yy`BS_;JlT*daCeoYUBw z0$V5E;>%$qwCZj_7VQK6Yh&^UfHm7QnMC1o4$Wxr$6pm`i1UX6}r*r}CXTHI-Co zKfF}ajKoq|yxh(3!3SH+FR!8E888cioKx|C?sa^7I-?_P1BCpyPRP;GkXLzU8esns z(PiE@<#hQt;Sv|VM-jd;hBrq|LRFA?l>Dm5{pA0NIc(@BLA0J7VFKWl((%iZtBbQG zOP4KQaoWmNr=PKU&6#KAa^1=CmPap)vK>?JKltsBJ#_DDKQ!~|9aBh*sk^>?&wKy& zT@U~HukbV5zKp_lVid|!n(Y`nOJ5@b`1-u~gub>@fAw{~W9&?Q4UggLV(FF_Mqq(j zraE_QKM^?Wd;rz7VaM1S)r5{lO&2651P9|ICkLNT?igFG&lx#`WVu5^JtqnY+DEAC zsvTomuP03<)Wxw@2Gdk_V!a}o5bC;a$Jptr3%|Y9b(+J4Z_yZ`gL_Q{H?^NU+$eXUg+sJ}-V51QEg0D{ znrgu)_hc}Gq7_=0qXm>_h&i-yR_Mc;ikL%VPR}RP8k$~c?I^8T6j$n(sB(>ycxb|? z{A60#nUpO|Cp&D%D`{k>vIVJ+0yy_+^wl@~&f~B9@^60mje!~8`Qi7y{zE_b#IJu0 zq6*v?#nXCSpd)g#LmUl_l)p2{jvdm~A;(h-q%=+k(q`oe0EwpQK%z^QK%%??1 z`G@vSEs&_724p`FS{?`u26qAg9}WPYlOB@Qg??-BpOel3?+)9$tC*IGcU0W_%2z99PA!nTLUn5^tX3@O1OR3&LqOv$yp3Ao5Pr@8 z?+#nMT+E(YfcI4ZJ4ee09PI=E-d{n;E-fURRzGJAV6AgDqv8~jff*i9)pG)d*A5t@ z!|n|71c1lp3Fti};IV5;8aCjyrb|lpDW%~G+mMB^F_DMy+YS;#gxh1h1Dp;b5G{Pv^o_^bCl^uaGYd|3R|UaSq0!*PFXPlD=FfyydI2)p_@ zW013i1txrIA;-`PkQ);|S;$!<8Ia5xN+`VgIct#HQir)y3;Cf?-SYy4+ab2D#++;~ zSfUwv!HP~uz4|$4y-?y&F>OZODbodxR`@q|eX@{0S%G>~kYl-)G~X1>V=Y7TrxtRI zV56LKEBseH{A7E9bsfOQ*oOYApEK4AOAoczq8=dAStPZQk!)b;{zfFb1tVJxgSX4{dhp(?D&2ys8JadRgcyQ-go#Lu2;l&MwvqARcFaq=<^A|&6 zMW4a8aa0LRLYMmC?h1ZnblHy+G_4LO2CBuV~a zrI53OJh3F@9*~v8ovoQ@*v8l~s9-56QRhntHrZlWEq}0oe>8hN=!-cZ!AQ59C*K{t$iomhd z=>9S}A~vd&zoOq>U2e7ncto4!+aiudkc+UZJmIdyRtBf2v`UaC8D$&KmG9BN(N znLBJ5cT}-P?sfBHt?&nH^}u{lEB(Q9^}yUni~T{a2P;IPiq!CbP%6*0P6{*94CTIT z5o5w~92d$^xi{53_41SwuqAUMC+Vm!_M)9H6-?7KvWP9cvxqGdLoW&0Lhf?FD`cA} zI2U`JLm^ve1orC%`(B?K=352l%&DY~1H0ygs7YZpyD9!Z@4^6DlpKW;4O&Pqgc8NA z1Z~rxO%{fh=`A4GDg|gQlo+6;&lXBdw#sKtspCUy&Z^UdbB9zhd9g=OA(n;*zIu^^ zjI_u}OderyU@c5zriOc?Y+%bOl!3>BY@vL@s$d3tS@SD(j)$DNpEBfRPJaq)1PTnN z*$sw|b%oXN{dXWXG5{;sbXs1YdD5^cv)oRQP+Zf_zeMVZ(TXuichwLuCW?EdCRx~< zT?dUD-$OKsW?|dVrI9V%yPXah6^o{+Wd>k2QeQ{5Dbq6!QjID26}=%!H&3$*C){0P$fiQx*@C9_*oH41AN75 zsU|Im4Q||PFgwUB5>Yptb~T?At<+4?-Z!RlDOp5Qk4`Kuti1zXX@E1B5l%PbQWYJCWQb1(ZW;V+4$1?Y3Yc zLW*^Zm-7Vcn*q9r|;)*^@!3hj`KqCVwIIP4RN9Dpk6pgqNa~zdRE8tOL zP-}pZ^i)%dOy$z9739i^1Kgg#0{nJ+dAlyUBhhG6U|sau!R=1FHHv>7OO&ifrSiB? zPll=eI6X1tG5(2onQvDzULSMzL`)UAvLPja#4iF*%2=wDDs!1Fs(-Xs9})U7x+K`7 zM5Iz*8<3w0&4!wZ`Y6Ass?(fVrX`frN|F)8X8;fx%5ImN0NP;ddt;y6vdukNE^HFc zksr?Sq&!NOuoLW&D105LEX+*a9D&aUHA2(Em{+Mr5X+&_@-rzCVNM2pqRuu=Bok7B zoB{8@0LM?U3Ze9AX*^E~USdOj{IDbv%k_Q6|1_yQK&ucMw(ko{6S_3hpU&Xk(_L3B z??^F}aS#|Wz?dbC-O|Qg!cVj2-xF6WWXwEQg7_l143kQRU0R$aNwh#FE~{9Mn~A$f zvw-AEtV7c>o-q?w1&^DFJ2;8^jZF@=ba*#}#R`nxkK&v9Z4L^xH9ax2Kx=ERaG?vM zdjSThJv!cU8*Fg=Bku6>#WwK9Eya4i!=&<6)40TZ8K2&$#(B$a0OM>G!Naq$_)Dx+ z)R5J^PSGR=G%9BfYzS$prC%)q5arhJ6!rf)4GIFAY?5l{Wb> z^Ntk3*Nl~`Z$w7WUz)uD;n4lnib_Rx@>EgPThUA~gt^-x4yC=1d8pg9y1Ns9lzYL- z^mS8$JuY_BV`7Ks2X_dcC2G*LsqVZ}lqbU*J zVuvwO>juMmBh%H7T za1fRIhGnW4ZA2|I<(KzSi#xsXymJm(^Rua9XRLPdwzY*Ad11KCpS>}?#vnt{w?OtVW6LIwat3_q+T52q5QEV8El`mNw_!8@%H)T7^!4q3zjM*HK66(yXK4Qs| zeN0dErPr74C5O_|?%K9Zs8yJ~Zmb6wquTw#<`}$AJdkXDw)t}?C5bi*Yw>;y4d+P_0Bd(dP{U!-b+wS zTIpoMKhVb}Wp-;nZ9nL!zet-2aAt!o?Tawy+Lkdho-fMS#JIgKI?Tr5O{aP#DCxzg z?8R=KM~>iv@WS)A(DQZCem+3*3G=-=G9(`7;;dsJ&t;dN^N;0cTm0t ztCdh~m_Ru(p7E}~f@iFMCZ4hA$K@G}?LL^*L~=iDMo#K@9`6{MQzyI62Pw~& zXk~?QuHG`^hrQ*-H~Y_mbM|@+q6Si0X2S(@{(ejILPavQ%KgMK%GKQT5^Zuq;~9I+-ZZ4Yojv$O;krX&tg#|uFl?WLva7U5Ls#Z z9RuUO1z;4w9Ghu}k3G{kJ*;s$<9~>8($um|=j&5@B&Zq>aQK>L$uN&P>A5^6L8}H$ z;}}EZV2k(|l9fgzrDN>UZf}Kt?r-!?)AeZDJ5$$hrM;E;(o6E5?~?Qk)8uPH|9nsWEF^fm%~4P+%j-%J)ljC-mpsY_}GUq6(~w9w0_Sev5uE6`IA_ zTNgby6+CH!v#=NZFV)jDO=+9mg|!o$SwR>_%72k_K$Um%MN;Hh#w8R_^tByb7=*ET zgD@5bVNr$tQh9Rp8ybJiKcN4F{?jqwLj~12e-Lpwwie2lb@Qdrp9}q~=A(aPA@t|M z@>)m#q7waPWPtj7>!N2hTg_&xbu2yj6MKPb1+|uFA2GC}Oeqzzou7{VE%|%~=Z5Hd zmM!mV=Y4jT)o<)`Rsdpe=1Z>F9KBn&8m7(ByL77wv^n}M-MaVTZaJ{!e%Q%6Kl~5X z9-DNdu1cOXn>GWH5TYq~**nY{x)G1I)i1K*yi;XHK%Q=wVW#D0Yab*^;2r1hEQ|2B zvZk6_&LQG2M;9&G+VAA2Z`nc$Q?ox_T5Y^LB|wi$wg5EdqQrUE)Q!`#&o+6I=1c5n zr~K)AjE?xvMt-)vZR#iBXnWYYIc<7*WvRxP0ELc_QY)h5~RcpSYFf4S6s3=dWbR2m$J}(bM)uBJ=1PKrrVWv%aJm!<+qCi ztZaR!d}=G;8C*6Y3S7>ZkYPWv+%)H}ZbA3Ohe2K7&sMTh#yX12;d58I$cNL@ydRTIPn z|6hf;w4Mj;Nq&cZS~L|P%2RX@o)J4!sEs#z7=BZo9+^|3d<0eSC~To?Us<%yLOg>H zVJeg&VnhR7-vKuJ4U$8MI(widmRTHiUza8$9!4XCt6-&$uFZB(Zw7tZY9-< zhBRPBY!Scy*dDxpX%TS{HYYg%^pa-8(c7H=ONW1tw92QtghTkI>wXjB-ZuY9t<9tC z4GMn)VJeBqpGNk^j)+5Px4Z^U9_IZ~>gQ%{zr!K`-35Cw=eOjYSvzjMZ zhuYkZY!6(|3f+eF0whXk2}Es&Islaws!yA_+EO#&8Mm!a6W`dPg{mfP=R;%K3y*{~ zEzBr;H$e{=p3p%IK>)J8jM2fItT-IK3S-(6Qtoy&!w}j)dmK@Y5Lj=)>O3)<*fUUAHD&hq@=*hoKs8&O^&1jCcEx^Xr1F(Ob z#x3m@ew6e=4_PyK?5CM0KRX_Q2vS?iXe`gnd0uwfv!#7Nb-0x1drOupAt~ovb{oP~ z<^&Ku7)4bGBYzZZy;&(BhX{Cpu0Rie5`znp)`T_CWMNcWMzMh}cmSrAJfgiBHwocy zq6*I7VD52wIpfLYVyB47vT`i*Q0^Mi7b$Rc7;J8@>o->G(Y25Pcdd#v=r<6sYi#yF zTs@?jPWaJ)W`rL|4jco&W}GMGfLr4Rp0G1SC^rC;5sG!4j7+s1C`DbjL4+zoeISJ` zsx)1(<)I);ge2nK=CIXiY?S%t#sa{^HO+20LAp>swgcmfn` zMGO-yp_r*dLCGN~zNVTSit|e-ut0<=oG|mzQK2*6m}2*nG-~K1{^;mDudG7o)W%;n z92$sY5c%bQpy8Je5cwi%gV~l{m{1qaExWM4-UUhyb>ZDlR9$#cz5Us;{Q)@~1I6F} zJ>RYwK=DGL*f4+sMy2y7!f?*kp`hdt6t7c%9FZ@qLxD$SJ{FIG;*r1Q+vg3Spjl6Y z5%rSsqCXdxP#mm7LCGN~eyExp3U+YhokRy?ap(k~_|y@;J!1gHdZ3uxT8#)S7_MAG zai|UjC5NE+d)4Gntgl0H_ynNX{dKt4sm@s{=)&MCB%Bnl83CqFv>`G2`69dTB`TL4ByiU!H*5Ah^m~(Y7 z!*>-Uc-sKXb#*Y0oB+1&)p+NFHYH1ybx=+t7C=ZI1_C}(2ZN$R*!s+Xbk41Var6Yh zc)PgBvj$*1A29F%RA5{uFs?7bI9dmTqC;SOc)*aJUk8H})A_@7%sl!#eS6LTjOPJ{ zRV7CuYh{EXcTjPjYMZ0Ljm$wkK;yzE$AgR)SCB#{hha z4uOAgAOfFV2Vidrz|(NOf1wn@CbnuB}mkWhFClDh^RYi%8p zeJ23P0S!WL0LZfdgv7uKkevp|ofRPL4>Ldsg@*t+G8oZk)dAUm0)RZBPM|rJ8b=>M zlz>)ZgoHkZ=B^5m{dGVnJOs#F2lKFB2W0jH0C}4LdC>rn9)Q@2lrS{pGXlun6(F;9 zKqx!}$R`Iw)2jn=@B{#Pk689u13+>BnW{-HR&?NKR$v2eY(A75p?h)1xZy$WUdhnWU zHDLm({805ZYpBbwr!oAMfK+@=U$3&tNyhWn#x@&)Z7#@he(+iN)Y8EyqTbqudL>GofzT{f`}KN1uXn$e*UqllIj?*@tJkx<{=gq{Jj*)!n&rvm>w|htbf@^*dwI=N zpl$Z4D_<{cbt=NQGPv* zd!WFXTfARiqqfpE0YraoG{q{vcE(ofVqP3M6 zrtlC=eMyyVFc63+l@PKo4KxLWzkW9c?;N5E5OL5CKqRh=rP}GKrvz&7)I`O_mchxG z0SvF@S0md1h#rnzEj?ifzn01k8`k;$*LIRt>^tAx7?Au{MSMS?n+T?>i9tKof87Q;_@E;BR zJ`~FpG}QBd`e*Q7lf2rxB8=Buy_3K&)XBGegYVM8;Nu;{XZJK;R^5DuzI3&aeX6{h zn9D->UQC3y{wd7GDOnz#z?t{y^*&yI_rtt)&P-}S`Fg)z@8|U$dmwaoZQzD3U(f3G zEUzE^E^Ye+H#h4Mk?R0YPsHvqJ0d*IS3>&{zAdj&p2S0{bB^!bK{Am%u5=X!U{1tE zfr_{eNa)p!8dj;|84IX7)T&L2@MT3wj~w$Q=heAiWTEdW6n}XjX4OqMVFBqNFblM* zf!Dr~iC+Va_|I-6qaz<32urdY2sCHM8zH2-B%L)pwm z^=eh9+F;+TZrku;w-E`v=_QKTca z^)GKh*G(O^rw)zcHcz(|@{riLLGXtPIZo)b$Z%fpj|{`e+&s^eR9L*#|YQ8aEMC6207yB}++D8X%fTz(l95X&S55THE|g3YHW^QKs<-|Q7v{ytZ~*%HovcfT1Y%{p^TCWSrn0CmZ1VenL_sI$fHKrn@L;v=&r zX7@pc(@BgIEe-qr3bt z;)0_vB}%=T>>n}C2%z+cA3Fo30xFwF6nyE3LGCEv*H)w}Or7pOjwZ{!(`;ELrZ$;- zkb2U)Zzrz{lokZeqWG=ahwxDJtNqjS)2AMfZvW5xxs3SdLX9P$(#2HdVrqZ(_bti(!jtj zwAYHEdYk2K-XxVT?#)L&6h|9 z7SZKYwLG`OarMb*`3inioCb!ir%L@Z)+`uJsP}4zT>tbvH!-xQn{ZtPZ&p7g zT*n8(m6UE5uH!+t@@2l1n&8%IiEQLZ3CE4>x$p-`_KqlJEtnump4Vh7Tghz6SJI%% zSV035f>YFB2{81>t$RPC;jqt|`b?4fafh~;j&D|OKn;+lmT)2lwU{Q#mpO!xv9gk) ze6b|VViJ8>US{Lau(Mo7`Q00}n#rBgXmN}XQ=T~^`a)fRta_(2TRMI+ospi-1=7xF zvK$~2-yTA2-X;>MvXG?4OfpBJKKtW1AJr-(jX!%enlj`D9vK$^#n4OLZP<{&?zL2f z3RYhMp<>OybU z-$nM4Zaejj<-X&Fy3=2*4mGVqAi{do^d1q+{~23up)QGn0u_qT{S+KgAuAG15U9_R zzhs&)nK+-ZhXks3YqTUQl@wo9PoQ6tKH(@*QWkS*UD0o?&c{lcQ)kOrTFz1b5|L+Y zg1qUxwVH+cHWejGM3*K!Oe^i7sM^GkiWvwXbO6OxU+Ju%k)UU?0GkI40~;9_cU5&J zk|HNE7=lhA>=3adPwCBdC9+v+;0-6b4#)(4)4*Z)Tebfai_U+Jd?1F=l7&nKC*?u> zDUcj!ib)ib3f_g}$U`YraFJY0ol27$Qo*S;A5oti3FP=O40SHSct{~<76{jti(`j1 zhv6}WT?I)^rijufV_FH3=w~bwYjALPc2|&zN`#TGk`8g&1A3Egud2wd~b)e23@zJ|6R)71t%-4&a`)-18;+-wYe zA+Ahk{{%+Jm;5y3{zf|FmVc?mF~(+h|bPQ*aX1 zon#+kmo-oPkUnL6{lnaGuz4TDh)2o=(cT@S*`M0;<^CMiPWqE6db9zZWwWN%v0ezi zU5xnNWJ|8#Wk{g=Cw%IIY&mWx`Xsqo@{nGv)tIi<+N?a@#-0?mCn3vy;E7`#sm^RH zSN0;LH1*gyCF;fbIMW>igo0=`Sdg7<#jAgr?H3T^EgdSmSlwga7bF=gNhHu%*8mww zNV3kp3C1Xwz{!1w1Owc}=e#ex&3v)=Eh1NJ#w4xlq?U9S;Rk_8Peq55AGgC|%M#jj zn1zhiU6Bpl6>F_`7nc`It3Rq!M&q)lRtgm9n}6M&;t2WihBj7DMP>}GPB7LuiEq%= z&5`m6Ya^>eYHeiWn}!Fr_Q8pF7u5I}q$Z2Y86>&p*^+Fvc_v<I3xQN07uoD$d1^ zt=+fAm7y*vhM+({`e6bMVlb12NM|rwl;6w@wR4S`q;O%W0@(wjD#bz{D`l&5R7!kA z?&dgbH7FK?rOMWM!cAl@o?R=kUQ}mPF5Y3h0V;@++Z!%RW~90bF5@-G&<8a=Xf!hm z1r(Q{S*_Fg#`r}PCZlx&eX-QXrcAuG>e)HTm~0nx1OP&7rr_jO{wS}DC*0**vOS2& z_3_K+SFc`8YU9ynvH$(ACt-M7RnHCFHI?ncPT?0OH}VUby-F8|T4&-VSLX(VHa-Hf z>$xbL-?Yq$rZN+<*MZUX@ojy%ZLF?rpOlca>>XN>K2S=HeO%o60oHyrvOh3rw{!0C z!XK(%#S^$H0DqcN*#}@W!CZnOCIC0h{+gs%W4Xh1RHH7PY9~xZ9lDY=dEze?^;Sl8 zvmg?mebwN&ipwcyPJDFl}okY?9Qy4R5l5UP} zkskn^AKwV={3cf+ln*)Z?t7k*C!!|{n>0RyuiOb zwgBL9s_^5GjCAIP?4MU@(V0vNd}G_JWu8-)7v1hw^nFuL{wRITzX81}b&2~W`23=H z8$j!y0j@gNMK_|!=x%+CE`#!D59L|%yIbwfzbd~Kj$jO`Ulm(>h@UIT9z_;mqRN>O4)VT$VX?DCsZLH#8T&NWT+}mIaHOd5sCFID#kIV_qg@pVbg{s%bkRLmUp{MymL8`1ExJVH2ef8jc zJ-`=7S9kH*Ai_{}DveVZQt_#XEvgI=s}&dcOjLZj{7GQok%&1N-r_L*3!Mq-KYgd8 zI&%|ig`5z6jsTw#*6VB!u3PzlY%bKW|v#hE(Z-%qu=F zn$2kq-pw?sp_$r9Cu%sFX0i|KGOg@eZw>sZBI10^RIx>=U{gBdK zb=eAj5hq`e6_3sM*6K&|n_}rKt;Dc$Q$gl`px#u$sn$zVJm$XZa-~G5#PRvezJCMFY3GEEC%(zOHhs zvtKIER*Zupjc({KnNlEU@&9by2B1yUa2RgfRL1af^=xHJ8y7`59U1DDda>3oYtUVB)Gg=2j!hYt5zY2i zK5nj9X`S-ZniG)y-YN<}Hm_kwFH``9@hyj2O=6wdFyjjmX^d8+!8a3Ht|5-q)BJg^ z7W6rI&EnboxF`~$@cNGm|D)5Z=+CC%UT{xbbjur zwreVh7&Vb}^zdfnGP6S=#y&eGdw{1RY;Y7WNY%z%hp2i?R6Xw91^q+x>N+H(UEKE> zsP8W$CqI$W4gIVnJ*YnDC@7MF`lS42HS(j((~#e>?F5=*l87GADnuRVZ6a&ieRq}2 zur*qkgqe_i-&E2`GXdDpAa7^uB{0D?sq#wy5sh%asgFRg9I#^IRa=S)wq4H00+prE z7Ulv(1Iu;0FA+h>?Z?tQxP;SHBGSaPHD-PMt~D)dKw4TM=(j1;Zz&c>A>O(~3oL$mqA7KCD+hRUGv^>)xJ zBqMU_$Hu00n8BnO4YIuxlv>eLg8bLjlnm5&X_WFI%CZsaB3U8;g#u`OkuJ zmNRe2S8_{@Mob93u@N`rB$5aM|3GR6nAs!AkUcVx$r_;_;Xo=|ti1tHoJN|k1|@3g z1+EA^E(KI*MEnpmrX6lN{Wj8H3cdA^G2=Fsrk3lnIXX+13*$5LRLIBGsGTmAk>(a8 zg;fnU;Bwuqql?<=TvLDw`8|&QyE#$MKj{I0METOG)Z9WCq8Gmy@O=xd&Uyveo zCCNU>V{OeUYYJor%_+6TA{0cMQE6A6Sb8-Xh(++mzvy6JP1S&X6&DBla_$`LYjszG zeH~S~y#!A(Sm84P*ll%S!J+|sqvUNWVP*{sOovEg8$i^5k{ieZEn8Pb*r_d#RrcK!mv6v+pi zFGlE+Xby;&Y6}9)-Zu(X@v+?*(?J~a@_JC?PPW}myMba_a$gf*P~~jakAzk8Z5$B# zaznpuL(?uxuZzy*fdR&7ZlXM{1!|Q-)~d#eC9>sMwS3JD91z_lyPx>x`uM7T(`s#c zt?Jvl=*mkVPpkOy3zKW8Y>shaGB6q~lMKR4wsS-k+)&qpp)NkZzWV$+=_oB~{>^Q(o;4t8_JnOnt|O>CHt%N!&+ zc!ZC~YM>Z!unqC#aJp3=&-PkzF~*YD=7w@N7{Hu zf+{vD8p%F6+V2k7s?7jc_6XHes9pS8a#6Ha)-xeRwWOUzNg>ecZoDQsnMW~WlK@P) zZI_CM!#GmX8)>VNYA2?^BzRl)f%y#da%#lbqTYaLml$PLBV%h+iS!dRGrN|cMg_2FvlNMIaKdfq#wI&{jZDMAs~?8`z3%&^8< zpEMpXZq&&B$oRzi_^DyO`s6TQohbP#TNE2--NcU7G^?2%WECfM2ycX`v+uQ-SX@Sl zZeXEY6knyw=ICd1xiJ2p?2^1ZZwZMPQ$vSniwWSL<;RGL=F2H03r_ph6Eq%`c!OJB zJD-Vba$Iv^avcS+ECc11%=yOQ(x3?L`l^b%-XL*wD@}5lmLVFGOr%2MrrD>CDs16mwaXAhEa=r#J2ku*j-JjSZ$wi7dPXEiL|GdT}7jV2l8S zWk4-?j`%BQS(5D^SI6(6E+bacESL~2Un;{@P1+}wSlBD3FIBbWOG1L=k<+y%dG^Qs zj#b%_>{97<(fziczlpAW=)ki8!zZ(#gK24eNHc^R9f=4pAp==ONbh)9a1SU8S;#0eSjbklHhsD_irhj3!uJ;G}%Y+dD(3MWSlCrGB@@$`6| zp`i?hw2Gr@q}ciD;tmcGf(o>4LN%~-=p2sLF=Yr!Ni=b1;N?(?TLWn76Z(aRMS_Go zIkuFVQ0#_^Ydw6_|2@b@ASc1S@ZVkx!MAPJ9(_7nqK3NufCATgw?oVqfRB1 zAsF*#P{}#T#hO$R4sgBV@8F%q0$Id`WdU&oO#xQdpex|k_#@}xaq~4 zUvkmKFOi%wIAHKi?#|HNTHUSI-LrJJMt6PPovFK??#|L3ZmnqQY~8V3FPh4A$I85Ds;4^^ z;YCw@-Lc*-ntGP*SXviNt<@c?=%T4->y8C;(bRKv$GWv>>bbgOiCQ!zH9&`sMpNhL zj)iB@)bn)58nbBX`MP5{Su}O7?pQe%O|8=%i^QU-7wC=z#As^0?pXR2O)=e~F;;m+ zQ!msV3%a7I7wL|SxM=D;-JwuLQ|IfB{I+Q70^PCrDw?`bcSKvFsg1hBr5a6b(w&U# zsTb=`fsd)px-;$eBHfwR!(=v29!zRFBw9-=Yxr-6N$eT?-O1Nmf< zf)ALoFnCQ=3>-)uy+)auGUZI`m>im!mcRjz%)W~iJqS?9mC`{c_b;hSRfY=wC@5L@ zHB4)97K<2sN1$i%c!v89dqdx7RnGgBUTft>6TR+7R2XBaC6ZN(PxY+Y)RtkQ! zbSvT=xV1k%a4V+bwR|bFUph`|vS?gxMF!|byxOR8xFT_1$_XM>Ce6p6zNO$;H1EK4 zSRTy@rg?B zqE1a@kpVvJSl-3RozMtU5i(YgTs0U)Qf^r|A+I%gU7~9DE=p8-2C4GO)kQ%Ryo)v^ zAY`6cu((gpara<%VlpW?O+BC?xqygsfJdA<#Y!7j+&s82dc0a6t+3wbMpxKz**}a5 zyKBKNP7QS{w~k{C$Xl*&ioC|sLK{E63B53~z;G5v>gq^d*-~oVtt-GypTz+f?3X5!0^vdgzr0M!B~`Q1 z(fZN^WQs|9Yuf3NGR2Ndi*I-Y7xy=gPm9e{MvG-j^Jo$3)k%+9jE6ahS@=w}C`B|r zE-k_|2yB4j;OU0W+*NBvIJZn2qr@x>MW8Fb7|RXkSdA%>t@pJ@;% z^K=a1X`u_l!BnmRSq8dzs^M{1hv6K2r@R%7pN3JB?L>zW3y)z0vkR~kXnPd_ z3|seNX=4z#5inLaW)V(8W+n$5O&IeqSA#jX+V;6H7CDpU6XMSXGqv!{kUXgp z@FFMzP9PU0O=^z&9@T;efXC&hM}l%p!@rY$4baaMW;w6lSw-8u!R70-P%(!3)CR?jt@Gl zIa4;LwpaZ;OVFC;KKxrk1-2dtDZPe89P6T}(6gA2Eq9`aVrGtN)@Sgg_+gkEH=j(*tU_#{*3sGzH>Q%%N^yYJKU#W293a%yhUr!;cHQDL1!#iT z4Uvhu_5sZX9B++z`k;A0p=^{t^S+5h;QPwzw}_W~GdRrmOH06GDBHt5%+S@BJLS@` zX%9Qlgk+xy+f4TPy2zc0#S{D8+Kx?+uBCTC8fEX%?$Ta61!1Bps41Nk@$v7N1e(U35QMhr;sgU?gBSd%4w%7{|QaIUO(kotl6a{E?1 zHZJBq&VCZjfD96B3>hRqnI%ctt7y*Mrt~gg<609V%$u?ph6eeIjt)GhH#kVw^Wjl7 z0$NnbB*&yyXnCB}hqR6t)*D#cHh8jP>v+MIwUCvTlUaztdFDv=dn{qma?Sar!Qyo= zUoJOnRnEO-5=aUYuYlKjDz+uXk6L{;-&oXxhF`3FB|{hIBio91OiwrP)ODD7{9(S` zd^6YWv3~83FVznw-_5p23WaZ7hs#GoVsfRITtC2?FV2E2=jnujXX6CDrWk`+Ev+?{wsD8Y9qs{axr{+q}+@7 z5Xuu0Dw*^SUT0VmMVOz`hTqP@>}%Hpo--~oEHuO@kGhb{Cc(pcmjOADh ztc~StJxMJbl=KRbDP>*yh9higZ7dV6S{wUP z2*<|$fVtv_I!SS16_HFm96iEs^z05u(p`r!CkGnc|J(?6rX{eJT&QB=BqaZj2~P6; zCXxe^LlUA;ys87gz$!j~h;n0`p3+LYV& z#lUwVms!f@3X~EuHSMfRWDt}N_rBbu6xz}qwT5w!%u~S}Z90MvLQL&AJgkDPL zye|UxjEFF@phUy!6Isl`9Q|hMV}U?5dbU=+e8yhKyShi9^kSqS#&T3BWqy9j5B&T} z8G$?v-c4J=oi55Zc_J#GXk17b(S_s?y}#ZsSfn`oqU&_o9Q~sI`gtzH-g)-ssl4+H zD}xAmFwg60iZ<`~5`7!&r#KE@u{wK@1@;VRZkRT~#VlZfJ<6)Dl&2u>Ek?oYBbfg| z;`!1vtO$A;jy=OX*aCMsb_Hn=ZogIGMT<$9%Itg>1d1zA_U zGgGquuB3IOHT=BU{lVg7%oBHK%ZRQ%Cd-*hM5fB{gk>Q6gezvJ`>Vu3owI9p$l&N8 zJkJo*9Q-q#m`X_HkD1AqHBCg$sv(IW`$RkFkm#Q_6gK&@;kucw;_YQ8Bxba|I0IJJ z1A`#((*=Yix+iD|#l?A-f#nfYKp2N_INx4v<1W6YcXgOXYXFIOC_@`iuPNi9q(0Q( zy7G(8DQy(w$O6&_`qL>6|2{n8arl(7soN?g_LlXTd(u3mH*#48uO~ZNrE)K|F6xU_ zTbk^-Tqr+b<6!PNpfNWtO{}p|>T!&aNR_MrFi?7Qc|FksWogKYX10?x+ha*@11;DX zqLOZxZcL|jT!OaNwkV;}q5CGGj~WR>5Y_#rssSXUVBp$56WkD*MYyS29vSaP3n0 z-3He#{w|Xv8OUY?8AVvpkg(qZ8p4IilY)#-jt8OIsKXe1K-7XL<&QuuT}Nu2ZZ8C} ze>Oi!dg&fW+>@l2){>;9UUG_J46Sl~lCz&EhPQYGDwMO7zve6@?ZnfhWkk}KwSHNH zWl1`#vMSBt%mE3$+?vE_N_udm>8D=XblM<~i_&J!H==(T!Prf7?Lu*;jd~;>tlnR+ zWqm}X<$P|9$v`{UWKcBJqfkLfV33L@TnnqzO8JkVd9xLNn+niHeTN*+zivq^HuNW1 zO;u)SVZAgE5xeo~Pp6;H^Wp=gk$Ui=95S*B&TiXZ5ge8(*mVd`_ZyJ3`>4Buii z23{)q-OL^?txTI=i-&qZPrL`PTZq4$3zjm@gb|$b#1Kx<+(|0{`Oa1pv{;iPp6&zH zDn6xO4jKF|PaQHKx*QBLN-t+ZGgs7S&1-q=Dh|OLf;<&$3vY@q6^ed^0L zg3HR?)u)dd3w*0~Y+F?mGg~Rg#sLFAEBWGT1rvbB_-JM|0Vt-lsb|^wdgrSvV?QoK+DyFj)5 zu>x(0S9*CRp9`N?>PLxB4VFrvfjUY76B`y-4W-BZ&eGUzLBtV}#d({fIk7Yi^@Yjf zv4N~Ck&nVvpr339oIPm4!5CDYoJlJ){(wQwx3+|)mzT~!*DaCVJT)57S<4DJ8;zCW zHk7#MRA@ykT61ytx0A|EHX@Tq8NOPOCA%3>C)&?GDF4rh<&2o1R6bw%8qZ!nVv3b~ zdVFY>$jCrsvT;dvAXH!p063P$aQ4 z25%@h6UlZcSsCKodb~~KqYQWkJ1lWpG=DJ&uO^i0UM_Lcn!Kpl8+BoBmINwdzQ}`y zn256QB*_U4o{vWtB~xjna6rj%+yE31i@_0q`YL|_Fx z*#8!Etrtrva|~rH)m2Y5Zj0*UX3<7Ph<)gwp+zS?bhTz}=mrf}Lszyx7(2;2lfswF zG#9aedWBmw5zMOx!(*usH0)t1S$~N~-k@Y1OGUfVleo9wlsqL&e_tx3trkX2)6z0D zX1T2>izV_X<*Uu$v6=z!R}ES$^{iaIW*e!YwTd&A0oHgBv2$rI{!}+aQ^_(+sz&#c zie-A71M>iP3U8#iiHX7Dv0j}2*t%_t8q~cOIQ8yMJkgc_Ma>!2Az>XF!j^pnbD-5r zQ|%_1YB$N$c9Ue9}mE^2w$r@Q^ExlhOl)(n=&#tI61hf`cf-9!38a4XXMBs z2`aAO2L8`?a>4+J@l4DwgUU1&4FwXd9=&`a;#X_%Psz z#buwcVpn@HOF6FkaaHk&eav!f0;>^0{`db;UxxC1>qUP(V+13DDXBy%Wl;K$F8%0sy=3(gZatjF@ zOs2XhW6TgX$NWX#VV??p#g(+!fV6KN_oJhHguTa_S8SDlM)G+B9=EfSOd5u~S%bz3 znYXqnh9i_u146NL7b-7<(*U9t>*&s;j%3=auzc4-H4J@=A$u(57XVVWuJ7D2f~6&Q z6sW#?q3WB(46CEH5s@LC^FU~!{*mt#(JbzzN@Y25N!q3y?$oL!69wBO3U0Ntp>=n!I*euF;SE#5wVKv7Zc8Lq>rk<~hPa?y zhnvqi;HbEs*kXZg+7#J>D*#Krjial1^n4mY(MRODz27J znhsd$q7kfvcFNFOSQIY)<^f>TM2HeQS;6#X@%8FHM%U&Mm!IdN`HKQ8h!ZGCA|5m+ zQeF|0Y(&bml;Q?$01j2l=1R)Iy)+$39IDF>AU37$CNMl)@uuBgs}92FB#h}!VvFa* zMvK#nKWF>%>=VnnUyN->3(P+O-;aA#hQsxWzM?&b%U;wiS+TAR*XP+eyU}jP#_I{8 zuvKo-NZGX~;%hQNib&=r6;UIs?b6jJEM}nZPcPjq@uZDIcU|o8puA{jP_uW z%x$T1R89~`M08HN0WG{CE&Ota<9Kb9igaApa?qob;P9HKM_U{W?MCJ_dV#cR7HLbZ z8ihT{>&0JRiA|6mtt@emmtB;Wi5}Cbj$ld%!HWk7UVQu}f_`j%^~-VC80y&MP1Dp!h3q4#!?JW-9cCDFigG~ zR=%T<=eBacO3@(n7rqMWFqYZW1b84Tll)sZNYE06Q(nDP_JTG)kU40MMm8Z7UoI0m zi3u4OPb+0OEtO$QFSxoNYx?J6Mt@R8Nz9H<m9T8eWbq7h)22;k95P*Z6ZLR9_dzlJ;_nDr`AxUn|Y;_`69Zk`@O`^ zCzV@5riju-H8;6AUSgG}R3%IdF&rd}tL)kPp-Vh4>Y<`z&U?Vcb|V!GX<~HxiT`y6At5y z%C0087}@6NVsS~6V%k|pLJlJ06&m&jIOjo*utxFN(3jWn%fDF@NAR*O1N(m}RHSOb`U1NJ(I-nK>irwEONVonVgWRE2%4x2MOw?=x>IkV3?b zg5%hi1DmnMz#7`w18@tCjt$2u?erbtr3d$XBG;F1a%^VRzF64_>!L?ulrtMcv(h?< zA>tx~Kr`0eDmZprkGYx@vAGXD5$>V)qQ^&M(~-kI0T7!^rGVQ|^;(;T+~jZqyn-4F zZI9rBN;?mD9)cM`xd;Mtkm8%z@=s%_4f4E%o=*0$+T~r>XkxD2p-`JqWOXzz-S?w; zp&Rz7WbgnDZO=gU{nHuyA--#_y<;YV(*jG5jq^RK_gRMr2*YN~Ogii$qC06B>c&$;Q z((O3t1=1ei3l_fsX$>gR7?h=rH@o-6m7B^l#X$$Q1f)Wec5RDJbLm^+cZ_J!vUrOq zd31)NBp^erbU?{_;DKPC`PC7@M4qr?v6tRYm_UJW=?PGDSyBbq?_?FsW7q9|)@%1(MwWp&D@#Hw=?6TV^H(^puP(#Srjb~XeQ z6rcYl4+)XzA*|9%e*HZt@!=u_|AER}CCX|R>|b~t7x{3??VylfAQcCd46^KgtK!D_RS?)h z6QG_OP_)fs;GFf=`Ft7O^EeJ`RZvn-@F7+YgPqU#mg$|Ml?3^U8!lUYkMowe{ttR5?vjHefnO00y! zags`6K!6)6;6@e3CWYf9f-!WNHc&}STn$bTv_lHU%_v}k0%;-=H<{mm?{hz1)hk(s z5Nsv&-n;kQd-geJpZ&e}frf%W)(wQSC}+13y1Ax~=T=()ZgfH20NJIwD^yPbpR|x&ZJD7pl=|jzI$A^K`9ST}1b^gf z$n7~vjan=L0*rPN@sO$`Qyi&c)*{Ns19njLfT z;ceHMZdl(4>6xUqytOprs@DBEwR{EZe(vW`hfhCwPXa5hQ*QhgikUO+u?!7$-(bq$ z!t+_w2e*V>FA_m)43|cb;jyTX>Szi#6PC=%ppt);dkVK=br@aopEiT83z$16sYj#oM9_|6LHIQ;b@9ZxO6<-X+`Mmj=wFLBagMR~@d zC9FS^oeO*>^vv>0TTJR6d0zI7Kq<2g@0X48sYhTUR-1D*$z`D>bW4t9GG+|{Y$U(d z>QBW-?6*;(DWVG~CdIym<(ReRP6BZLgi7kRJB$w@kA+%5n7=OK>4A)i^wqKp${xlT zU;&WY-L}KsCnk~A6tSBjLOQc)Fe3`2?{geC9C8E$Esk8xM_GYlw- z#OD`ekwYNzi;PP%bEo1^%5(}HkDv$|i!)~vOY2TsD%jQP>&!dep~>UNc%6Vedvc(l zD$S7xr}KP`f5hcTPv4)JeiKI%njTMOb0ML=Z( zgQ0ZN9XHhPWd3m4@R#fuMSgG`)(^tp`J(hzKD02m)0ntaMNBM2d|QCZ|JC0iorahW z9g=kWU}qi|Koh-tUQH!Ibuvk9J7rAf^(c(W737h{i1V+Aq?06RPh6s(d~en(xSS&; zF*f)$z)X~Yjs$Vx1eKI=z!-|ulfRupFqILeL|Vl?NnyayA-jY&6a>}s$aa*5>K$dk zha#u)cT+wpygSmnjlFl2=Ebbt?wEB9Q@NS2^U9+H6$BG@ca#a+f;KTziKt_=b`v(# zTqbPW@LseOq-rvVX**;`;XfwKb!D==5&(Jbc1dzN6-ZOxOMaoto(|J4iVuYME1HB) z=D$rl)|HuL18uPx^VqQgNji#&fI}vfTG6nX+z2Zy-elHIthiBa4T z{sf6+9&1te;0hC-bQw&L425-B(eXA1^$ZiTS!YL>kRf^&3R>(W))cNM%dr-=T(4TO zUNzQBxpn0|T8Fiabq|@Ulffeg4Lf8^8w{MC`1c!;*B4io0Kmz_eo%@-s|bE?rRME<7r{9&RTSk)7)R;A%`gh+FwBst@e82h zf!gVkaK5sW}ruQKUqidN|T?WYs>Iw`A&gf!R_6)LDXyep01n z%-dNMLNzZ7@5!13M*rS#akBAP$;Y4@zhR|N6TG?gMlBY@%c!B3{qdj8(^4KD{o45H zQ~E_@6v}$`x!=)SWEz7o8C}3Uh3La@lb`D(Uyc!3bOp3f10gDW-mIT3TovM_wDu51 zJSw6n7Hho|{Hyx>n6TiEm6`?h8Rn$iwqUxPlaAs2u7wCnY%J|at2W0$2tAk|p5Dl9Bdgt*fT%$Bs7 zeN`>@&=TpwRgXG4m}MW(3=@Uaa;w^x{n!Psv0>5#sSn4h+P8s?k=*dmQ+2JDJYmzf z13J@3kpookmhkHiALYmqF!e)Ya9*t!Xb;&?Hm6C97*Fw3F)V+w(8bCT@=l2$VRX4@ zFzhKr^^dZxsu#)-D{@RTBoh>Y991`S?zlwh6^|ykK#3Lhfif;^+Q|p2rri<6MBl`c(j1fldgrH zW&I^?&-K~7IeOxv6?$?&qUtyqdXj^+J$kZ4LQi=6FnVHPzf*2vN3R?ig=E~xG4=`J zVQd(SDH9vWNNioZd~E#_HKiiV*B@IM4oEsYpi;>Xn{vy@3XCM<$>ifrxjt1S4#O-S zxojj3gWeX2+ar*e6(2_8wvc!dF+Z5xi7|O+*B?b2lyrr}(uj?nfnmVPW$c zP+|ypwtCt1Cnm41@n56aw2y}V>c6Pbh~s*_*^FUAJjXD3#`u1AmBb1K^zi>W|7X9! zgL_}ByR#$rgqyA@2u(CPQU$~iw-MMKg`Iado2@2gr#mhFt2dgpPAhIU+sFgvft7v6 zeT(SS%r9g^?hTdK%Uu}_4m-)K$HsPGkw|JoRcg&|oyfj5>oD+ATp`YDXY%sZW+w7N zebpica8_&mI8#~n2J4XH#OqZAXG%R>LuOXY5fNf^jNqSqKt`)W!N9FdM3bQoUC#(? zfQY>f6$~;s4>Mm@`>zUw45QUb1xPiP_*D+?h#r%I?H)u;7{Rgl4_{|-Y^ZF(A7q^z zHK)8u=(H4D3)6dhb$VIU>h%80VtUofhFtKy|K1C|gU23)9YidT`T=Dibw6IO1euu9 zf#QM4A;%V~RQu@)D-9wmaVSmb%4=;e+C}F0OODs~;y1+A_P^9v$LYYD}5U=L+K~zxr$Gbx(ju;b9flH?^gRYuYd~k<>Oh3Wy?SUL_^x+GLq~Y_`TR->8MWj zXeU^dpqWAVf`@R_+WEg=bh)L0q6CsV-@OjNr)6wgy+EV-FAZ{&N)` z^z9+saU^Ynq!E6)n`-G5>E0jG!Qbf>|IUDotr8)#(j!Ei%@m6fd7dz*Bl5cr1f z(oVkIjky31WG%cPH|A6*K(j{`5M}793?l?hdKd~m_XeJ;h*)Qi5+r5M^ke24a89|g z%>~e(X8VH>Jc6#w)dn+}+unIlEX{vqR`!PY$Q1!blWXcs#$KAh9&GhF5PUlT)khV?LUIU@CZFr% zPKYqTtsocAXlFCJpdnzCREkL3Q0C*l7`Fj4Rc$F(fL7p#NQZzAl54Lw3HA|72@@X>-&)iwau!dlI(9s zGBO()sde&Ot>m2sEI$9HhGfQ4WrYkdP|DAre1P7~SZ(*sXgaN17)=!eE!Vy#ND`Mx zB+KDV2Wk&W|EA@V%-aeIB0ac|W2VeE&XW%8C}$n59(W_ZMEMu?;8LUx&n}4o@{Bsn z8!Ff@ekQl8UBVml4rbHK+DFL$yST1cElEufT+(=q>K;oW#7y-GNd&xeusf7I*$vlx z?LLIy-TM^2rv&YG9XTIfhjXZ{#pdGppbL2qk8<9cEPAbUr=(?O-`FguDFFq>sAG@3 zjv={?>SoZghKJ+_ksjp&296Ts6Y4(UJ4tu*4i(L@POv1pPsUD1l8h~Q#3%(6OhPOk zLrpU@41hdK0XkmN5qO|B=0f2&j%!v4)Xjbbujemt>0q>~g=(iWs5AV1?LOhhf!bpP zua#4H)~1lz>)mXjeu{z^-YDyOOG|5Wp!TE(z9}GrnIoyePAX)CKuST>TP6&ab79rO zR(eJf|0EV{CRVF1~IU~i4*d3bB(qKCIh+*P$)}imC^R(RnnGb;Gh7lL6G2$zu z{GcH=iBKA)?Ny~dZP%xXbwk3??6;KZHAfcylom2=Y<>!v}lzIN|;6t&itV;#!l3T7kOV?aQu#u?aXRXD}rXCN|_jx8GvtHR-^Z4->E5r%X>8 zx5guRHx;W5T~UcZK4@X844aSPGhLzxY*q`s(xgfFB{k!es4!-v`AAP)hmlFMYr9&6 zbym(OHn#|sf|G50cpZW2N(XMX-?53n1elaW5gUXmVy8k|rcl9ycA{_c#WC~;V{Sxi zDTG&*>=7=vYyVe8`va|NRdJr;gHNLZWmd5_ON*VclcYq3U0!o(kHt^*UWFgasvty_zD5Yd&8HCZTpf zD{)ZPygrsPksB=p+e3kTWvV|S2z)kyFw+iC$8tEKtYY6)$~ z8?9=hEuH^hKrW5ITX3U_w`|vK;0^OE$atOL9WSt%rz~gvDmo?ckie*w)Tgfkh{Zhs7$)FDU%p2AGqjt}E z#W7ZOg`2%@HkC8+Rr-E!ks_oLD`N54pO|E8D!MKN@);)|HZa#jT!C^fUX=xv&nM)e z_RVF@rJB7ZOZkSrD1=x{7Ce1;IQ(W5n6G6?kH+1nTg_ zo8Vy^c&KbsytzIxCL1`zGZw}I8w&%40{;NLB!kr8ANuFgkwz^NzGXvc6+BOCL&TTG z*@kj;okNI5fij|8WwM%nkXrC85Dt%$Noq zFcKI)tTJPu?j`}pv^33OPQeNR$EIwSLOCoR8Q&m<6Cm-Q4=n-G`{aSn_gg74rxL#E-aXn?53EB$kO*VVO`NN8onC z*pp=fJ*2cuFuxQYv6NZV4LWs0LTK@U7(j3R!f!cO>|_iO)TJ5Vm9%| z^N&(IVkrk|r|QZIN3*W?<$A4Jc1=4XF3t2A{-OmX_p&Z(ej1*$q+1f0UChSbki3^2 zYiS*3?y~K*93}5Ff@|DY1e3=xW}sl4jnXN06HLX-5<;Bk#Lu_|xiLP*YMZ$t`AK_+ z854k8@3;sEvdJG{-Fb_1Q#F@p;f9JQL>?ecYQDaB4i`}s>RIE*LHmOdn^?+0 zzBvX`z-cCa3C0g&swM|^Lv3iLF2`i_FX1XDNw(e|o>rRHPySFqe z?nw6*dp7K2nH9%u>xNEzNAjjdf7kX~S9L4R{x}u@30rq81-x?W!WNmNT};=Yxs5D=7ejqvW0GLQ~@@w>yxW zCe2dJFL!ZH2Td&reB8|t;EQRNLZT&hcj4ninlmARy^X3S0i`OQ2!hKK&!h<3RHE`a zxTPXoh-X0&7SYea%@tt?*n(zpd&Ls{QHrGqkmhJ|hGp_3`s+W6~k!dR!roPgR0H=8A@CJYT&CJc>21KiwpiwVQ@Iy7v?BrJAmWNFaEToOpiU&~k`JabeuG@7uY zp_$G~G&G^iiiT#dA>?@!KG>`%1efcr#7*2Y9~cG~ZvAoH>cwUJ@^E7^7wWzLArJQ) zMEx2GC@NL{deJ24l*xtO!nMQO4O?j;|5zFQ{PBsr$GD+SxQDo}BHsbJe2D{I7#@}4=SzIxDd zOqG;wn0ic@m*J?B<|PLnA9r#E2VVB+UmiwP1xDnkdb^dKu{46us@b<1sGuJac!W?qEsHiw52zZT&DuHNCmj|9t*wF1~?WEFgykaa7Vqmgy{g3Dm(F_&3& z9B?SOYyo@F4@Xu=Cddk1fpTiU?e`DW`$aud!DS|uJjm(A+al+~xkpcOeUb5UZW zq;$@gFuGdsg)n=TdBbpG!5?2{>0IpQ#(t#aswilLZWGRMZK%i}>Y1pUnc=8fC!9gY z^Kkqe8<1T<1KE)8rq_#L!$&?ssQh;r;W9{Ahyoi3OP|Y>;wN&H{gqngLG{qBW7Yc2 zjMPdMiSRf+fTUKy8A^H?_^>Tt0UIQh74YTQ5a_GG90IX?CWHlPu{$&YM`3@G!L%0# z5jz~U%PruCWekGepv6<;S!$n!-onJ-AjUec%ga53JX8hK^3{36mU7Q1I>f+uMxvQJ zM8H6qklY~}SC)IuwV_Lvdlnb*6h%o<1r8C9yAsYXOXMI^id zWvslnX7(u3BuK_8{w_w$JSwo6J!tCtmg@&8?H?jyAI209t{4&i&)atDHrv5&@B6aF3 z`3l+DhJC$?uL~{vdNp6yiOFufsV}koLfgI)cd5-oWrKcFHHQdxFd>n1plwlUQ94aa zDp$;tYbyWJ9Rq@H?&L08ive|u8+Q+0W`PQHjml3~Y_qRIVGc$M%3>yD=|JsXj4<57 z^2T48^1Q)f(cpdZ$eiYOgyP|S7#y%En=gvoCHFFS2cxsaGpe^GUjQbe@Ys1kvxm1n zwoyEG&d#Bngpnux3G86mzPqx0KhW>_`d#{Ox;uN>$*g{2a@TAv9vh#mN3+x2PP@^X zn4FyKH7D&QY~Bct=R$(` z$w2>%DLEMZRrH!cLy>2bNS1u*j@yeghv!tpAgkXxv3qy?f8@nO!?~ z>{ho!t#^&@9%?k0lEi0}5(Q3?pd@6BNGXff`o9XogM z-_+F1bh5**lRw%!F*z|golMQl?3mGilZe#4>`mW2(HWl^YBWAIIgyMf_8)l`<&t<0 zlX>0-!G8UY%-kH|jOHpt<#V0SYy-n_WT>>xH%DpV&}VFF=c&In!L~S1yNG34>5dDH zyuIU)o+{ff7wwnGz!8G3(4HfhX~l6Q+AztJT`kw6p(PQ9lnNT(*-P1}#Cyv9wJ(Fp z>^k751sSM#JKL&Fg7;H(4`ecP-0$og%&`3|d>!C;PJbQ%5~Z%mq11DVpfaWlLN^=#c^y`)v2S)0lI2+$+XSG zia`Wf=kPM?XK4Rk@E7vrc|BRoeT%ubM=$ayOq9P`E5HnE^}J6|*sd4VUN|pWxuE!7 zKIesti|tJVJKfG{$voexgFD-1&UfZ}X$8ZG`1ESgo>%c(PnG*`!=BN|&$UNmoC!zg z?a>APY81REjN-ZQIE0~1(mQ=O(vn~i4UX>dmMqfhY1O{c>Je`{WvFLw6as!tcb73& z?7%g$RIaD#DvjKF5Rx)p#H?9vd}7kOwFCLOvpuxS-w zT;gkhahb0H#@W#LLV$6RczUhLkBkk{Ec*U8>HC=uTZr#g>WJSzIySfhQA4*r*ctS) ztMAI@`LA&zyZQ$>WY%i4u~cKn^PDx6W}O-%P(wz93h}a&6XZWbkTk7X{gz>xBrvVb zw3CzbU7t{P6a8#-J)1QwTt>Mu-*_k;OISx76sQH1~yR;uyD$74H zxoP>odt%x-&tk9W-ZEs%jzt$v_iXUJvf~eL*D=ix)IPGM=}1t-RT5STp_1=y!k6sD+7iKtz={E)PCHCUc$o*A->(~ z_3Z!Mu}&}77+j1WZ`(B*^m>Gtfj0G9CR%cfI1T$XE1hTC(rK{*lDjJ}sLU48RZ^J6BoYD+8FakU!%f z^LAyaa^<3)q}A#28i#7v7dgY=f_BpiPt=wA($3z+Y2$V}C+)APuh62#(n-S!jIJhD zc79T8%r;{*B&ENT9hhC1l%{X}=r*=Dhz2j_3@$hx;GTi4i=q2q%6T%0av?7UrB zs9f2wEAy2re?2r~7n!kh0`xQvv|`52(WaQO2c}ERJ3USKm001@bU931sKCT-vE#Wsi-;n zU41eeck|e4co_`>d{5-?ajSrDt%UD)hT(fE!1tuVXUiF0xwaX;rz`NS=kPHoQ3BaK zrUQv8z(fs_eI%k}KuX|uvDO>Yo3_gNd=z|I3S%v7#^)+sp3l34u2k9wnh8A#&wNSG zOwb{_;DS8^E5%7b3qgRPr~Cn#E`KOMQ|^MA>S9k~x0#rdsqoHo$?{8E@&}vc@vIBi=q3R7xCt;kF6AsEl*%# z5SytE%ygU!yhv5L24R9&%ocJv#0DuM)bYG%W;j?Az0n-0K)o}e<~_j&qMR6<;{Q?m z;xz3xziUy{-D`p_iMuS@yB6*55`VY6EAe+d5$*-$NV%4)dKFgQv-(7lcnmGJ3WhS% zLLugt!=|Ra1k*$jDP=xDbk2IHwHYdeP03r0QG!8X5NbsoaFeq=v(R{Xbt+TNPFk=tR6o*b3FUNAK}qar7(Wlh*xHqZMlEI4vcde zl-jP+_N>~rt?jDu_~CYIGbTSlWNG`j+UA}jIK;*2!Ju?;+YnCcy-PNP)BGLC%grE` zH3&AyHT9*L{(vU3?g?zvwaQ?aT^kIaXJ_Igg1;P2;Xka5s^UQ0c4)33jv-$Js6fv`*uz<#T=p`q`1Qd@A)5s&bDIDQoV3 zq-?GGAMJzUoL+f}UhTWn%pdRPPgbxHh;_RzVW=%QGxkrqj$j*;w)$Bm09Nu>JcCG<4>zAG4 zYr{M=>EM;Vgs{}-r}3Y#NuiQpXtoA#_^(K(?uddG1MiB%3+k;G@UqNL8@$U7@9?$) z?i^m*Rt|G{m^%08`ewf@VUB~3*I~9J)g5L#QXO;)Ff*CJEC!duyuKOch`@S+5*muh zoOTD44&f#e(kS%~3yM)v4W2|O9p!?Jw5uQ$63UFK1pR(5ZUs*nC4E#%S+2sCoJXvv zRty%U3G*@pQZr-=$Cb(dsoub$1stg9X#p$}zCu5_TI~ob9<+3 zyT_H2e9v=Ms8YirWS4@i9N{I2G`vl#;|Lci{y@nKB+1_-6UTgdLv*8X^v2p@M^$oh zAwTi8fDhzz8jb}rr`%qX8CSksleF0<$0a1v-|H;fq5$59PVCHWbs~OM`CyEgSPfuc zrI5XVs`MUdNEDs08nexE{OB=MzX#37v~ZuJ#93iT(tOhc;QMbS}9$WFT| zN$bNeR{mEtn=Cy+>PDY9MaLHZAwI*hFX`4A780xcncBjSg;iIgK)GgCNtLP5Svl)^ z>KsoEukpr~2M*MpvEXQ1W>r5puP5;rqD1T4y7i1#F)WNK8hB=}?Gu9hSxh`D&Acb# zhoa;!3E>uLJ{X;{xIF>~eP5vtYXn0yQ#8oLi2fuyoGq#Fo~_B(n^?PrYG5%IYu8pM zyoZEeiUvcCK^9^QEy4#7C|J~nFETR}ETV~+JLwRNSUC+=&xaYt)xG#3>a+X7fo(0d z5c_Og4coD9medVV%KTm8uLbVV%}VIT$`4I)Q=S%e17w%#E@y+6c}gS0IIAQ_K36%= z4pkNQC)`u4*b5xcXt84G`(k}0-;Anm4ZC2|q2fZ8SzOqWHXz)WZ925fQSuR(s4p_- z@K(tkM4Ec$w!?*fjzlb#_Fj0x(o>LBB~pg!?T#UObX_$jdYoib_X-mi$PsEn*hOpV zq8~_mHKrgO2whKpnIJ12ilURCYx-(uLGyqrq7 zzJd!nEm~#`R*h4h73DK4RBcet0g2G!IIguLIuy&4c5VP??JVeKc8HPysyF+i0Hy=b zl-*%xPp??1UtUdApMoAO=;=1@d9QEa0=?-NAA-&JyKaBa;YJ{5oL6yB^QKpsb5if7 zwRnL)slY@Am;4fN9*n+k^HYS;6I>z5CP2k5vp5l3=- zJ(qlXVo_XEE z&?j%o_f{CQrR>-W=EEo+(aK7c*!sxk!R1V`-IL8fM-f{A#WLB-zq<{;)4tZiNB<-X zZ&K4`FZ{oM@&y9X5laB=G5qg536{og{R5iYvBXf#VTIL!iQlLk6gyWhr#6w z-{{Gil`lMDOt$rs6|yaH^q4#X)47|=5GPK5P%PuTT5}Cl2&|%r=b~-E@!cdXLU~!ehvMJA0$YOP=$lE|7z3UqZ2`mWh1hyb!$Qz64JqG8k z+CqlqdZK_O*O%wtaXVBsa>5H`7U3mvPbRy|BfKp5_JmgiSMys?)hD0EwDz5BE{-`s zcyh*s!OnK^G8q(S<4jcpoy@-T(-lM9CNhgQ@j_&lCNI3(N)V0Aiu4B{i>*_IHILm^ z_YB-Y9tJnxKb(BFJ;G=KhY&`>0jR6I$;5{>)n#7-UwxkYG#UMTt1WSxbSE{LB5LsC|NnS<58(gC%8#m9o z+Dxx8YlvQNlW~POp^Pis)+FY8WgW9fut%I;hg~vUoRAIc9s-C7^PKMltBOa)k9Ghn zAl6=b4R~g*50hzR-z=gUY5-*4#1F61v>!psi!@<}5hAh^tSFGkS~K}V<;Uq;&j|g=qd; z?M&a?M^3P*@cdoQ=B5|h(`7#a>98*uLRseftTKAtOoPQJp< z1#k4V*|ahs;0vt`O|~by#rlUn0;x43l_HB8ma{sWmnC9fp-F$076+qzS=fj}%Yyu& zj7#1zrzPTKL7v)@a)$@6l5%IuLJek#b2!ShKcY&?UGDs|lsklL_wH|@X^i8k zP;m00F&et?#DwBU#wVEk-xFS#HI-$p+50zcG6m-P{@SHsuD=k}R@qM#U!Fy!MecBk zuP%}2ti+J$N_j);3|Qh)?*r3CS~W(!F|Li7ILOckmId7zOtBBE3L0c-&WMuvulFY( zHR&oHlepMrpHm#neW5bHrTuP2^1`!)6%dIluGOK%yh-eCOuGm1nA*K^KFRuZRx>sx ziGR>cew(k-$S{eG$q#95J)m|3MPM>(CU5oz z7xj{h+*}Gb1ztL)gQy2PO2UaB4nyhyA1bh|>KUmMW2Q>%5dCDhRDBv}-FcSUPCK{> zh1t+BI6t)9aq@QvV@1>*-RwGVQR&bShj{nT0Gh1I+K_D zpShK-cx3bV14Y-F*O)V@mz=yqGW&S&->85x%XBTF5|pJS3X&@6`rKfiLDz(e!yZe( z!W)(+zeV+t{4I^}7O1fF7%+paFL{OOHCyx?a0VN4701AfWL-0cJ%3Czj2_LJJD!|k z$Oogt#!-rXI7!Idy_=zh!s*fLHUnxla;V-GSOIMqR+!b8obMu6DZJorNI~)#j-G;c zh-u`61DVFKfb-XGlKZxML;a3?teBhdv)N0A9GS&fks<{w2d;C_ak3A=C>(kV(xd5K zRZgpvLa|Z1k$u>c#4qasIjz|pb1{;vI3s?39kYW|OdGy#y6yAP$!zB>Tpi2sS7=qU z4V@9eK#!q{@lhT|P|qI06~=jBZv*3S+eU;#@%DK#*uiZY$ zQ61K#hK1H7TxG;$0SUb^uMH-F!d!TGcCP0LT+Jx}llY{v|6{VqB|kIvLNjKHV{}}) zshmBKc24#@!O5Pgp%UiukpO0K_@-U2LTR{WlfPsXL2L6K{Q5*vu{UhmHZ52Fghe9R z?ikuqOJPerhz(%$e%bG&n{|g0_lkjfvPO1y202JOCrCUSPiJ1kxfdyC!%^*x`;>{#k%;xifm+KRubs%g z1`0*5W$`=AGhL+9ilf(-hfd~HU!1AK;U#cLQ07Xc7CvTq@n(L&l0*7M4j}$i6E=Rp z#UWb%?{Zo%UBh@n+js))3X=E1tt7uV_geHAy1gotD@nbbd;KCv{rQ~K1L-JIUl8m7 zZb7gMsBMrVNd4wPd_C#*w&W0F^)PBdALT?b*ETz8(+*m3asiRx5HjOlPyWh}CCL|6 z=MgTs0*57fCf#99;0s@S)jhXO& z&p4)@h5qpy>c&gCB{7)b03!OCsBe#JH?7xxSjWBH^la^IKg6FO%1 zOkCNLYai6ma+_``URr}iK?8G@EbIBQ7QF(jP2 zIjsjIoFxs#kZ>v>p{in(NT|xU%y9(?g?;J+GHckkC&xbPUY%2at>`>-I+z0Y=|Hn? zPu2C5*yWV(5hR2+$s!}{=LG^HR9RNZUKTFht;KLY%kGAL8|!``vVa=gavVHoFSOHX zQW+&0UKK)qUGGBe3j z3|fJeLnOkS{tpnwCd)TVi}z@lI$(m&hA4#QuQ!NJvV)yM^q41Ns%&w_d~xcms_2+4 z4#J>Oh^{8X&Pvgjl0xVpFksd(&E(I-l8nO|K`7YU^kfvGV)r*7`+K2ahN>ZBInLg~ z!tOm&rDw4(>fSRadyq66qB0aIk=o6{PpMRIOHGFLq{tkDfXuPnTSg%i;K+&!jx}z< z(FtL~{K9o19ELHi@h$uMn@C-OHfjl=wh~KHA*{+V3!st+I2c|tsP9AF3|M8$rR`?o z3=&<}gDPVFfL!wvW`Lh{MbY=0SWh{UD)I4=V^+j^!yzewrac zglWphc)!71i_9}m0K_{~1&DX(sZbBF!JHJ4ZIN^_V!ct-L!}?IdQNTrlO4T%0K+tL z8(#Zo&mgr9vftt(`S^~qDA1>C$tQR8KH84PHHISuXUe?5(z0#7i}k`Hf`DN(Zunbxs z5{ubx$!gT2cbHvm5NBhGZjZC+*YIIS2i1~uJg>R*&{s1+MOKWL(&ZV@*qLi-d>5AN zF>s+j$%H~UZc&+Dc3oah+>Z?P>R5-huDt)Sj4~YGc`oTw8Hz2?>c>2d#GAdvxb0oI z_)jtkNSMSY4Ir;yt4j-_E}Z$Vgcy(^QLNT@++-ZIi{Vo~IT{Rg4s8PtJu#)tK;Egg zopv?Q2y^=pO>6e=A3S=DPL~+HmZ&m%OlpAQ=f40Y4mRiV;4mwhe6D>I(BS) zGKzJ+i(yB_uq%zX3|n!{8vWOA*bM9v!+sHq9%Tc+@QvZVF@ajpkOtBPSp=&ECH*T%{sC@H!|7a}M@U?c`?~AYlDl zkp!)3R4q5K1YW3@LT1s=vZoP;Rf*w-x`|lFlef~JN#LvFFjR3IBQSS*cNif(Xf_a+ zW)A7{(a^}G1FIzJMAppkI7STN6=iai?|j_G z1)^lLk9+|-xf^?+W=Vf=m_B#E9Ghz>@&DQz-=1+a2A2q^%|4|E@~kSW8`>&Ogsg;3 zYf58GR1HRzwu;iBP3S96P>7p5Ou-S}-l~)iWk(4*K5o;!Dtv`fI1VZ`5{}h4wGS__<9(c$j1>_v*s6YW{V?YG>Qa7F*+J+DEn!|hr*Gt z$||OVQ6wqv5B$_vXoF?dGXFsoQzcK!?DlQ&vX(qH!JsilcP#fzE5V#=xbmfgKzf;c zNpjq9b)d1rPw`vu&};}2K)b?k!3d1K?o)}`3FuhZF?y!0TO+zcs4bc3B#w&Zy!MR zw(f$jqaPiIkGNYg7F#vm_YZyvJXw75E$Jj9H=c|ND*`=!5Quv+EukYinT|Basy-}1 zkfZhNkUJ&pHqcM(K+=KF9|Rx_>2@GyXWIlq5_|>`A9`8m%^aryFON=2AQ|~;gUz5( z7K8+c97wYj7@yFY4Px^!iSd&G^f7@R>D2*n(yCw=NaWp3sD3-; ztdTV0#7?9HjAB|u9dTe1gb5Owa7hsHk&%-oQD%G&QHDt)+*PyY63y1JA>i1-8!vL& zFy7#$_i3XC@xyJv#H6@ot>`pND3F?Tby*XtVU1~6Oeme^gJRA!3KpL!RdlbP)~OJw z!Ox<`qC)1&5DuHlczHN1Ix}slqaev>45pVb;dwt5SUr%*?sEjjanLMHHp36b3x4ds zRe(|1)m&gR`wj!PT-JeIKut1{A8f(B{5ie8kJte=vjC>w2DApBeNmXJVqL5vN@bl; z<2Fs8;#t57c|^jtm+q(e%n_@&4ztj8=!xy%{CW=@mP*F3U;u%LN^3^;Re5QYcR5ob zv!XM`I-ul%!L5J8<(P|~yvL)yr2I*Ad8=xwL#vOL(!h^CNt;OvK0sHAVL~c<{*NlY z1h7i+B|!H!kGGdVG#bd4n#fYb73|8+ub#5Fg8wIu+ESt=s=9p4bPHdY*=9(@*{#ii zsBd|V>-f@oU62qc5Db`t)?zEBSa7c>?@&83aA-$O(Y-; zR2jo=J5YwNQpg5MXOr-mJjJ#*3Ca@Da9Iu{f=lnSTNeGJ4CY?)HwfiQ{cZC$@Y`Ic z3az9s@CW2}sX+o4mWUVzqc_1U+0*bg9VNj=xTby^!jPn|rZLn=QkdRt_ii^q$@0t) z0smqW5zr+4m3lsX5=c#*lmA7g$FB1=d%cn4Il)dr{PhdfiC> zHJYvVI8MEBNDB>~tDTr^)%Y)pJB+26B_+@)Y3?_y;9JAjP9mtHE1Pma@)r@72RlrxjPtPwX%gEW!cVlWEt+vmAav~(;HrN$)su4PaFHv=zCA3_3t9a*6Ns4K_U4i zM~1rr=;G*M&Pyf7b;@5kdh>DKiyxBAzU*;Ul41tbC*C?%=(LX&@9ef?{bFUT6cAyo zr=#j%g;!LWiUwo1ZJtYR<)cmO58t#}y9sC*^4S0NL;q3(R;`xmfJyqu2fU9W ztgVHlZ(&{bJHT~Ky)&ZQ%DgS>HF9V*m6z?4Q-IX`w&)S=Q#t{b`27#x6x}1pZaU(? zsdh{iIQg5y);z1XDlnshbp~7m;6yI6Pi+faWsIwOjl7i2Y&8cCXx3P{o8>-vl6|9M*^a$c4;u4WLEiS9+Mctqm|0pBC{Uh17nso026h{H4w*$H z9d>bDHq;^BvcX#d!k*U)FJSZ*qdCuue_cArMc~k?ZtzLLm}H)dcA#y+Q)&w2U|GHr zv$cb5yRf5~5ggqXZlhsWu(V~|W@vOsbwj`5lR0qn@@38A9jxr8{N94@anuceIq$Y0 zZttsuy}-3tm%vg)7qIF@v8+2B~p z;fRv|O-~<;ez7hi+JV~gFfh$H8=cr7gN zSjG=5JE<7%00JOGNL{t(^gfwmetJd@2r~nI$BTaWftmc->k1QMuvm_WKtu%#p1e91 z450l`iwML`WH07P&8g5)f?|!*S!t13Cg2fkKd! zfyrE->w^RN`8C~b&mu{ILcNyC!I%F7X+k6lqX8GnK{|Z4$cVV{@@$b{+$_$T(Kty4 z-nOHl5}5dJCjidHDblUY2L?Y``tl>PhXTjt@Yg~UCq(49Oxj9sS6Lr1QcA~@ry)ox*7dIqihEdmm%Pi0ZN5cA`aE@a5%q*S-nT9bE z8o}ES4B$urqQxvElsE-mF9~85IoV5d@iFiVW0^yfUB?qVKd?v|dnEx&B3{=PBb{SF zBBfwMnf)e-%ucdpg+!S)Wxr{IhN^n_os=?x@4v9}3wTc1Jq*Z4PVmRF-+aEPgo332 zFpo%3Q3TO38r#qm8Ga`}__&)Zs5RNodBNKNuV+tB-^i^Z7c!!3Q)h$~p_6#yepDbwzKicCW8_M|A z7ALmZY`7?v?7rfBqtDlpzt~}C&8cdZfF2|R@_HZ2#l?U zCX`zNaS!vIk0V?-aw7ZN|4eO$mxGj8e6$JvNM<8$ALS>8z3gZIl>6kK3p?W@dJ4i? zWz+^hVPS#<8IuNz)S*Duva~-I=8!`>3Ybmc6i5}I`dr7vQMRRzV+(wvQEH+@sfl5f zGT8;em_R>Q<_SwbnP6`N5?1Hpm?Mt!@8>mOSwXrae}+A&g! zuv$T!pn}07^*+z?j=!ILl{dr6dp8%7tr`DB>y4|~Vks|@n%FFz?0nLTJlTfn3ZicC zcz-bV*AyohN~%~Qw%+JBs0xl`E0y0W^dyNE|Ei=VGJ1~j%cWSF3!gFB-R9q5l1LJ| zwqL}Xqo#S2x!jev#N}(RkFVqMa=2Vi`SGRNapyQnLl&+I3NSDKN|%yW(Le6chYC07 zSM7iGUvIF~xA=Sf*CGG)eVz|@Sewte{@=1E424YT(&E^iY^5e@0r zeddt=D0>X3Atv4vinx{2%dItm8VEtO=C)t5L)wiNQ-(9U*o}0h5Yl1_|F$>)w=5r^`2;Nl zyPnI{&gOTiKp~#*>^e^HQD@$e4F>>TU&bz*0tZv83jCLGfNoje1YDTYrpVPg!p|f; zDe^~%qxE5*=oH$NzL9x^5219xwdfGQW{RQj!K0cM?PsY*_`bz&k8uS#G5gBzA?AFl zCgvl$Wq$FY;sG!nFxk>~KA{>Yxk$u39^G<)E_>g+4N`IQ19Xo#JUE_Ul?_pk+Z^xAnU;Lb{Q&QPNFb z&jh!L<+{3b6X}D>lgee&5xUH%a$T*S38YDsnq(!hqDV1b>=-Po(i1fWNNCWq=5YAt zPy9ZU+t0rA84url<)$4FD{`xfaK>Z|J^w8Vv1pA&MhC+1e-z22zJW$zbjIo0JZPKQ z(^^Y(=Iu^A46{Gc)h6}?S3|AYVk{y<4CU{F##qp4+XA+UP*WK*+vvT71#n)@6)AF< z$d-{Vr#ViB;G@0lvnZ2w+%%E{5kvJJu3@$08?f>st}v@{^36dl8lpy62JGg$x~QF! z_)4mlzwL9p%{dOERDOWifmoiRL$ELVcFx}dc`4v{#wlLeM?ppY{EGY-?fGV2)x=lG z%0np?3l|=WS{Qam`_&DWn6DHT&Tl_5Q6*t(HM+H0(ueqf8rWe_;@efZ6?6^7Pp23u z{7@QLNkq79l@xN>H59w3YG7l$ozpv(Rb57h22$1t%SvASl;Z-Wg#kOq1=2*~z&f8a zEJH9Bgrx#%Nmv*p zXWkgZ!_bZVWX=bX^Fmb_HAmU=wale0vcbJ?DTDnYU z#D&aC69YwKpz68mgy2-FPR3$8Vhe^=*d=T5|CJ<@7d(n)@$@O(O9kOkrO>=E!b_I z^4pCXSe5F)Z+pPi%cf=OB`)h$%%fh;3Ywcd*;JjNH=5`byw^}x8|5+CFz#TC?H~^+ zlsTk1vHk$6m}P|ZR`S~uig~|FxdA|RCk#MoZFWC-5ObsCP~DMCzw`SDW8rR~6;?0` zjXIPlWs`(T4yq~_+@Z{dCJzGzy)}~OWrhLE7p-`-z!g(XHi+WFO2`Iohbs@Y`kqok z^q+9r+F|r=zilwP1noubxUM^cVy2(w#vR3yfQyM0HEFvmLL6o3=UO?rqne zBnga>NUlrntq<&!Ln~e#2JMUSi^OT+a;Ltu&5i|nFlZL&{`h8l9;atHO^ed1NFdah zw>*={`|0yQ$<%_eEz_{9lo!a#%&oow1*3K#A#vBA$Qnd8a=pfm{)~9K3YKxx0I_|i zmb~mNc5QoJc4j@!H1@I|KAF8zU*!gtmUEWT05U4W-Rz={F%-ZERLzre0e< zkUD7mGnlSKS8<$nvi|@tq3i&}hS7Sld;a3|{I4*YgVD2bRrwI22{ASx$9PFWTc09x z)q*HI_PFfHAl!vGAe@0S3`yfiF$Sl~6D}0sGBkvf``GHg`EhK+qYx6{^9zdzy9f*T zXuS$4rdS^v$A=rpE3lO(^qqmPiny-vj(ohU_%VIFoH1Kbw)7UG13b)8#x%E%8InD` z&SUv_&($?v+lhc5mW!jYv}rcVaoN#W>F|iux4xEQl{H@{jwLzrw@7@9pScXJNilFhfcclMx$ zpsmE1zz%WqC2ZwNxC*ssdSrs+M>P*T!1Hx5gR;mBUtc32GLYx=Z!l^w1QSMH~ zEj%Q%Lg1yrHPUW!sx>HzY{h&1C+vE~k!gBp5!s3H`Gxypr|5JX62*(h81JiX0@-X7iZj9^;9nr(4#rJ&jf zW2Q%@A@ukJ(QLMipg`zxtr(wXi+8PJ6n>r_zbW*H=vs+gW9d=gEoM^oUKCKps_D74 zs2_0;N^0SF{GB_Ve5`c_d%uD=6lI`Q^(T-g@E({y>XZH4+qBZoF>uNf;euv*wf+8NYEZI99kACC zo%*XbLsVEb&5x1Ip=jCR5(tX{%dgwo>X2fKWv|0<6u~)kg6W?5Dn8{;fgKlncCj%lMh2k!G zvAMt$aMlYVL_;DV@*oGjDfkK~z$0zGA$Eq1G}uNc(4ld1tVbnohTC(L0Ag{qedWK~ zP|)sqjwf$s8yrqEaC6Rrjjh62CeC27b}PtMU*AGoV@8x| zgX*!HQSC$Ndd!Ma2wBXEN00p?zl!2M_%K-p6q2Pwfs(MFfbT)s9ZMc&oiPqoNQNWv zf!Y&Mzw4yJCZ2t480!yE&a9v@`2$arbEOB?DJH|vH|zmzgXG67KK9uyhVRPB6} zJ^zRAPf8nSe5CxxtE8{FkUx|vfC_8@vi!YZSfh5I8hhAYmi)NIR@#9Pp&b^?^0h3h z7hua~@*oo3OuM#KnALga7EJf3`nQxMu>O2_UwK@lZ z{gp`#WvfudyaZus2n3Fj1B9P5wbdhWRS(QTcnA=3HqjVYOO-gs>^4Sn5y$m*Z{`3{ z+ot%~jA*QgdJfMANk*>{aTx{?#q(8YExb|%xIvqG@*_4uPmJhuRegGhuI34J@wQKH z842u%x*LMc<9gM6#pXcDo;~_gHoNDB9;Ffun-Z}VhrotJ6jV&X#5eR+DFY%}Ly+ka z$d^Or`l(*;Pw3=Zf9OkF`r))xfk;Y2AKYOv!xW0nYsX$x&6MhDYN}*T1ffh#$!F@m zdUbUio(1fcG?WrFG*jq56+@1QC# z$C3w!;805hAHg9k>DhiNw+vdPAhLnXNLZ1^Mg8^#n}Zy`MC&MebV=6qdHmM(Y+Kqu{}D})BQs|`36~} zCn2DAD@hM5um!}kvP)u$+O-&_FS%=%>4aHE1tH1;K}4l7GP#&Po~j zQsZf;>!f@5Q5gAYy?o2a&yMKiR~flT$?8xqPYm_qi@uuAF)1dH2H1v1i|4>rd`)!f zMUsYdp-%Z;NFsy+rKdg$H42DY(9{(@jWfI#dY90J|(W=WuH*MK|1XTrxS_`J;e zUJ{R244~y9fL4Y8(qIqN9swYs*x4a~9vcG4r{!!85IYMLL-Y}ft+6nYa#p3JzDN{X z4}Cg{Jw2k&bzi@8*3igAK*ud3!5QVt##lCN?5p;7&HfIf*n17d&JVpqY)dG%(d29^ zzGWA!Pa*h)W{zUd4}qvhIB>;5oJWpzvhPonD27F#LjV1t`4$UH4pMibEkea>7U5<} z)(#?vI{Q)_5Z4O!wKBxMFr-%K zl#+7LU!8rO-ORoo8zTMQ_N>^K3lO3CvM~)A5p9(ouo+$(dK7zy&G0HY8dzG{?G6*) z*4^p{qkm=yGCjh=I%FFKWd1}s!_RK%2Z95LQsTrjDW(>Yrmb)_tZY$c$Jm8Ldn4C& zt}3%=YBfH28GGbP$*_e0f+Ca`h3_Hb6(dTQR6Cr<3vLMUK*?+YHS1G4V=)9qc8$I%e0Hrpb8Hym(MTJ%~SULL#@G>JwH}x z4rgh{oGpVeY-_#lQN4~6lvnu7R`nV_S9k}7vzhTHhS1X%b&W>(%;{yTG{ME;kpGSG z=_gy8wC}t<*8MQkJh+B`D$KUWS{ks0TA!^~JHje4)Wy@S(&*tzOm@zo2X|0oS~?IB zpeS+O!iueBT4~Fe_GDZfA)_=QGaE;c?#Q;r5xc;$ioBQq&^G>@IE{9*(Q36KkEZ&4 zj>n93+9#3#!#9mwiLR`o^f+vKU{>;0uv2*(l}5@CwMJGwMv+w32n4G%;_dq^I%C$} zgxTPMG2VoIywd2oyisb6QsZ3Kj)f|KvK%;7g^|rb>CJ+*(U0mbO=Z_(l{3%@t?2mQ5|!q(FCTr`{w>0Vsx5smO7obx7_NoF@X46gbq?^7rT`T-d)MD$%>CBkSnc(AaCMnGVBIXMy(@Zh zs$Q++0j7*X>eh|U4(?w?6UDWt8z93cxovm3IVKWMysEUqTs0hv0{H8u2Erv`Ohy)S z4KfVb^|2I;3ggEwQ#rWH%#(Ihmn<}Fa9L;|!XV&q7{9UG`b&Dr9@CPM6OvWJ>;Dm# zEOhr0UovekB3x_wo8)lDO+ZWC`MaTyz> zxCXpRJj$${UdL@sEC*)A-?iAwZbw#j8&Qb&tL(P;fy!<}%uRBTot_Xa>TbiEutQp6 zrZExJ0n`LS(VgVuOoa&|Nb#@DH+tulRNj`C&jmEqGFR#CW*Qfzw_h2r$_h*LzyhKI z@_%)>d{>PW6Gf^1D|<1Vm(s;9%t%_3coA7~Y9YNdRJF4Rd0@Au$xonN&Bc!qtf77o zQWdpJ9W}|gh<`vV(N1HfrhV+CsOp--1r$W2HyAPUf><(wGrcgwmde2k;FX#OWDA?} z;G{5i&3T|TB~dt3_2i>~>Q-bi{CYZ@?k0hRd0o-G>JGe9dI^FOPCy%$V<*~!5qLiTZ7gpxH`@qQzFS)XE{bMYJd zSELh?w8$JB?0}bat;}@CWjA7(Rl$wfo#s&&P*pM8S9gp-;v|!t*9zEdp_@KnJeIxW z-R;)q z`+~La1wZM1Lv2xdY@7?AJE|3szuCM-D9{|_62#rKZ!^5#T(iW6C+T#!Gs_$(4qa1q z$;>IS?e3N^K2Ee2eJ*u+=8aDOBo9;TE$%ysll%-IDqc06Qfk!NG{rS*PSDsHIctTE41muN~3~ z@>d={H|pVM?cpeY802HyYJt=>0}$r98t+<=jm|Jd^Fl-QhHWHC_XRvi`b-g(K?NLJ zf;+pyoetBOW61b`WA6fn1Y7|_tmk^VZ!3m?jg$q=F@zAU5g3Av1q_j}m+aTXTo|$B z=ZP9&nE~)Q7NuD1CSZmIXIKH=T7L$30gKj+!5)J*oyo!GEd@~EvTAnj0cBM`FvnR% zh0A&k(adm!!jarLI-c$(UW3L1%mnM$7t5_}S|;lsQICKSF;RPh5O}A$1;V3rs#1V< z7D2epkp$)Kal6g>Gr9ish}&T&+RN+VY4@LE-3|TJ?L{4kErk{4?>_k^-D##*ULT(l zz5ZvM8m!Mn_<%m=@!Pp^2}f!r*3!2omQIoe(g}j4eiy?OkrQKlVW(Zep4q{+*Cvbk z<}?%v>Vsv(uY(_G#C*LCLsR3HL09KP)f5hXf;*Vy2Hn)oXxQOp`#h>k5pqWQ-NR}24~cj5Hiba3=L zXYzcdrC>NhV6%ugkyep_ibrXuy+wGYZ73sFc1E#w6U5r7DS#12kUM(<*lWӃjF~(CIpW|N9tVf{NYuQZef|UJ5^cYDD8Klb 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

    S7gx!tT_tN9F+ww0nnKU;rQ!ukzEqbHDw`?%Z#A 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àZjEhXEMYMGOZ8LYCz0qd5lLP(m+yD((%y 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 EMuW7loAi@J+y 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�PyewXSxVvllzCu0%6J)&>-n(8t|SRXUXdSa`x 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

      *i6l*0Rhuzj3}fsp;rH+HcAJ73?R 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

    1. lH3t3K&r%%?_OGM=z%k^Mjl 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

      Tf6Y@}cLDkvmNj!&{cKp~MyCZ1g;z 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 OqAC*eSF9MaWDTqOYV0-u