Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new crc32 tests and optimized crc32 for POWER #637

Merged
merged 3 commits into from
Aug 12, 2021

Conversation

mscastanho
Copy link
Contributor

Hi,

This PR adds an optimized version of the crc32 function for POWER processors. This is a port of madler/zlib#478 to zlib-ng. The algorithm is mostly intact, as originally developed by @racardoso and added to the original zlib by @grooverdan.

While preparing this PR, I also found some issues in the way $ARCH was detected on the CI using CMake, so I added a fix.

This PR also adds new crc32 tests that can be used by all targets.

I'm marking this as a Draft PR for a few reasons:

  • I had to slightly change the crc32_power8 function API to match zlib-ng's, but there may be still some small changes to be made. So I'd like some feedback on that (@racardoso).
  • I'm unsure about the correct line to setup the pointer for crc32_power8 on functable.c as it's not quite clear to me what if (sizeof(void *) == sizeof(ptrdiff_t)) is checking.
  • I kept the addition of the new tests + optimized function in the same commit as it was in the original PR. But I can split those into two if you prefer.

To measure the performance improvement, we used Chromium's zlib_bench.cc with input files from jsnell/zlib-bench.

The results below show compression and decompression throughput in MB/s using gzip wrapper, for all compression levels:

======== File 'executable' ======== 

 Wrapper 'gzip'

          |   compression throughput (MB)    |  decompression throughput (MB)   |
  | level | default | crc32-power |     gain | default | crc32-power |     gain |
  |     1 |    90.0 |       101.7 |  +13.00% |   187.1 |       254.7 |  +36.13% |
  |     2 |    59.9 |        65.2 |   +8.85% |   169.3 |       228.4 |  +34.91% |
  |     3 |    50.6 |        54.7 |   +8.10% |   174.3 |       237.4 |  +36.20% |
  |     4 |    46.0 |        49.3 |   +7.17% |   178.5 |       244.6 |  +37.03% |
  |     5 |    42.3 |        44.6 |   +5.44% |   180.0 |       247.4 |  +37.44% |
  |     6 |    36.2 |        37.9 |   +4.70% |   181.0 |       249.3 |  +37.73% |
  |     7 |    21.3 |        22.0 |   +3.29% |   182.5 |       251.9 |  +38.03% |
  |     8 |    14.1 |        14.4 |   +2.13% |   182.9 |       252.4 |  +38.00% |
  |     9 |     9.2 |         9.4 |   +2.17% |   183.1 |       252.8 |  +38.07% |

======== File 'pngpixels' ======== 

 Wrapper 'gzip'

          |   compression throughput (MB)    |  decompression throughput (MB)   |
  | level | default | crc32-power |     gain | default | crc32-power |     gain |
  |     1 |   128.5 |       159.6 |  +24.20% |   253.7 |       398.3 |  +57.00% |
  |     2 |   111.3 |       132.0 |  +18.60% |   265.8 |       430.4 |  +61.93% |
  |     3 |    81.1 |        92.3 |  +13.81% |   288.3 |       495.1 |  +71.73% |
  |     4 |    71.8 |        80.8 |  +12.53% |   286.4 |       490.3 |  +71.19% |
  |     5 |    54.9 |        59.3 |   +8.01% |   306.4 |       551.1 |  +79.86% |
  |     6 |    29.9 |        31.3 |   +4.68% |   327.0 |       617.9 |  +88.96% |
  |     7 |    16.7 |        17.1 |   +2.40% |   326.8 |       613.5 |  +87.73% |
  |     8 |     5.3 |         5.3 |   +0.00% |   331.3 |       631.0 |  +90.46% |
  |     9 |     2.5 |         2.5 |   +0.00% |   332.1 |       635.4 |  +91.33% |

======== File 'jpeg' ======== 

 Wrapper 'gzip'

          |   compression throughput (MB)    |  decompression throughput (MB)   |
  | level | default | crc32-power |     gain | default | crc32-power |     gain |
  |     1 |    56.7 |        62.0 |   +9.35% |   155.2 |       199.7 |  +28.67% |
  |     2 |    26.1 |        27.2 |   +4.21% |   527.7 |      2276.4 | +331.38% |
  |     3 |    26.1 |        27.2 |   +4.21% |   527.7 |      2270.9 | +330.34% |
  |     4 |    22.1 |        22.9 |   +3.62% |   527.8 |      2275.2 | +331.07% |
  |     5 |    22.1 |        22.9 |   +3.62% |   527.6 |      2269.5 | +330.16% |
  |     6 |    22.1 |        22.9 |   +3.62% |   527.8 |      2275.9 | +331.21% |
  |     7 |    25.6 |        25.6 |   +0.00% |   527.9 |      2278.2 | +331.56% |
  |     8 |    25.6 |        26.7 |   +4.30% |   527.5 |      2278.2 | +331.89% |
  |     9 |    25.6 |        25.5 |   -0.39% |   527.8 |      2277.3 | +331.47% |

======== File 'html' ======== 

 Wrapper 'gzip'

          |   compression throughput (MB)    |  decompression throughput (MB)   |
  | level | default | crc32-power |     gain | default | crc32-power |     gain |
  |     1 |    81.0 |        91.4 |  +12.84% |   164.2 |       215.1 |  +31.00% |
  |     2 |    61.9 |        67.9 |   +9.69% |   191.3 |       261.6 |  +36.75% |
  |     3 |    47.7 |        51.2 |   +7.34% |   199.5 |       277.4 |  +39.05% |
  |     4 |    45.9 |        49.0 |   +6.75% |   203.6 |       286.0 |  +40.47% |
  |     5 |    41.6 |        43.7 |   +5.05% |   205.5 |       289.1 |  +40.68% |
  |     6 |    34.6 |        36.3 |   +4.91% |   206.9 |       291.7 |  +40.99% |
  |     7 |    22.3 |        23.0 |   +3.14% |   202.4 |       283.5 |  +40.07% |
  |     8 |    15.7 |        16.0 |   +1.91% |   202.3 |       283.6 |  +40.19% |
  |     9 |    15.4 |        15.7 |   +1.95% |   202.1 |       283.5 |  +40.28% |

@codecov
Copy link

codecov bot commented Jun 10, 2020

Codecov Report

Merging #637 (d082606) into develop (747ffeb) will increase coverage by 0.59%.
The diff coverage is 97.70%.

Impacted file tree graph

@@             Coverage Diff             @@
##           develop     #637      +/-   ##
===========================================
+ Coverage    77.72%   78.32%   +0.59%     
===========================================
  Files           82       84       +2     
  Lines         8463     8723     +260     
  Branches      1381     1392      +11     
===========================================
+ Hits          6578     6832     +254     
- Misses        1354     1356       +2     
- Partials       531      535       +4     
Flag Coverage Δ
macos_clang 68.05% <70.00%> (+<0.01%) ⬆️
macos_gcc 66.75% <66.66%> (-0.01%) ⬇️
ubuntu_clang 73.36% <70.00%> (+<0.01%) ⬆️
ubuntu_clang_debug 73.72% <63.63%> (-0.01%) ⬇️
ubuntu_clang_inflate_allow_invalid_dist 73.12% <70.00%> (+<0.01%) ⬆️
ubuntu_clang_inflate_strict 73.35% <70.00%> (+<0.01%) ⬆️
ubuntu_clang_mmap 73.34% <70.00%> (+<0.01%) ⬆️
ubuntu_clang_msan 73.36% <70.00%> (+<0.01%) ⬆️
ubuntu_clang_pigz 34.20% <100.00%> (+<0.01%) ⬆️
ubuntu_clang_pigz_no_optim 38.34% <100.00%> (+<0.01%) ⬆️
ubuntu_clang_pigz_no_threads 33.74% <100.00%> (+<0.01%) ⬆️
ubuntu_clang_reduced_mem 73.64% <70.00%> (+<0.01%) ⬆️
ubuntu_gcc 72.85% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_aarch64 74.68% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_aarch64_compat_no_opt 72.31% <62.50%> (+<0.01%) ⬆️
ubuntu_gcc_aarch64_no_acle 73.95% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_aarch64_no_neon 74.23% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_armhf 74.67% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_armhf_compat_no_opt 72.27% <62.50%> (+<0.01%) ⬆️
ubuntu_gcc_armhf_no_acle 74.93% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_armhf_no_neon 75.17% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_armsf 74.68% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_armsf_compat_no_opt 72.27% <62.50%> (+<0.01%) ⬆️
ubuntu_gcc_compat_no_opt 73.43% <62.50%> (+<0.01%) ⬆️
ubuntu_gcc_mingw_i686 0.00% <0.00%> (ø)
ubuntu_gcc_mingw_x86_64 0.00% <0.00%> (ø)
ubuntu_gcc_no_avx2 74.78% <66.66%> (-0.02%) ⬇️
ubuntu_gcc_no_pclmulqdq 71.33% <66.66%> (+0.01%) ⬆️
ubuntu_gcc_no_sse2 73.88% <66.66%> (-0.02%) ⬇️
ubuntu_gcc_no_sse4 71.65% <66.66%> (+0.01%) ⬆️
ubuntu_gcc_o3 72.10% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_osb 75.88% <72.72%> (-0.01%) ⬇️
ubuntu_gcc_pigz 34.40% <100.00%> (+0.01%) ⬆️
ubuntu_gcc_pigz_aarch64 36.26% <100.00%> (+0.01%) ⬆️
ubuntu_gcc_ppc 72.64% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_ppc64 75.56% <98.06%> (+0.88%) ⬆️
ubuntu_gcc_ppc64le 74.09% <97.75%> (+0.80%) ⬆️
ubuntu_gcc_ppc_no_power8 75.19% <66.66%> (+<0.01%) ⬆️
ubuntu_gcc_s390x 74.00% <66.66%> (+0.02%) ⬆️
ubuntu_gcc_sparc64 76.33% <62.50%> (-0.01%) ⬇️
win64_gcc ∅ <ø> (∅)
win64_gcc_compat_no_opt ∅ <ø> (∅)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
test/crc32_test.c 63.63% <63.63%> (ø)
functable.c 75.15% <66.66%> (-0.46%) ⬇️
arch/power/crc32_power8.c 99.59% <99.59%> (ø)
deflate.c 68.40% <0.00%> (-0.14%) ⬇️
trees.c 96.44% <0.00%> (+0.27%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 747ffeb...d082606. Read the comment docs.


typedef struct {
int line;
uLong crc;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use uint32_t instead of uLong.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

char* buf;
int len;
uLong expect;
} crc32_test;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use standard fixed int types in this struct.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually ifdef'd this struct's definition to match the different crc32 declarations for the compat and zlib-ng APIs. When building the default API, it will use fixed int types.
This way we was use the proper argument types and avoid potential problems with "hidden" type casting.

configure Outdated Show resolved Hide resolved
functable.c Outdated
@@ -59,6 +59,8 @@ ZLIB_INTERNAL uint32_t crc32_generic(uint32_t, const unsigned char *, uint64_t);

#ifdef __ARM_FEATURE_CRC32
extern uint32_t crc32_acle(uint32_t, const unsigned char *, uint64_t);
#elif defined(POWER8) && (defined(__powerpc64__) || defined(__PPC64__))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use #elif defined(POWER8_CRC32) instead.

@@ -223,6 +225,7 @@ ZLIB_INTERNAL uint32_t crc32_stub(uint32_t crc, const unsigned char *buf, uint64
"crc32_z takes size_t but internally we have a uint64_t len");
/* return a function pointer for optimized arches here after a capability test */

functable.crc32 = &crc32_generic;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good change.

@nmoinvaz
Copy link
Member

This code is GPL or Apache? Can you get it relicensed under zlib license?

* This program is free software; you can redistribute it and/or
* modify it under the terms of either:
*
* a) the GNU General Public License as published by the Free Software
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GPL license..

@mscastanho
Copy link
Contributor Author

@nmoinvaz today the code is dual licensed (GPL / Apache). I'm checking to see what we can do in that regard.

@mtl1979
Copy link
Collaborator

mtl1979 commented Jun 12, 2020

All code should be licensed using zlib license, this avoids any viral effects of licenses like GPL.

@mscastanho
Copy link
Contributor Author

Incorporated suggestions from @nmoinvaz and rebased against latest develop branch.

@Dead2 Dead2 added the Rebase needed Please do a 'git rebase develop yourbranch' label Jun 28, 2020
@nmoinvaz
Copy link
Member

@mscastanho were you able to resolve the licensing issues?

@mscastanho
Copy link
Contributor Author

@nmoinvaz No updates on this so far =/ I believe this won't make to the first release.

@Dead2
Copy link
Member

Dead2 commented Jun 13, 2021

This needs a rebase.
Perhaps the crc32 tests could be split out into a separate PR? Looks like there is no licensing problem with that part, and it would be useful for all platforms.

@mscastanho
Copy link
Contributor Author

@Dead2 Agreed. I'll split the tests into a separate PR and submit it.
Regarding the license issues for the optimization itself, I haven't been able to sort it out yet.

@mscastanho
Copy link
Contributor Author

@Dead2

  • PR rebased against latest develop.
  • I was also able to relicense the code to zlib license.
  • Addition of the tests are in a separa commit now
  • Removed one commit that was not needed anymore

I believe everything is now ready for review.

typedef unsigned long crc32_type;
typedef unsigned char buf_type;
typedef unsigned int len_type;
# define CRC_FMT "%08lX"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if this CRC_FMT should be moved into zlib-ng.h. @Dead2 looks like z_crc_t was removed in 4db4cfd. Do we need to bring it back for zlib.h ZLIB_COMAT?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All optimized crc32 functions should use only uint32_t as CRC32 variable type, the conversion for ZLIB_COMPAT API is done in crc32_z() and crc32() inside crc32.c. All length parameters should always be size_t. Conversion from unsigned int is also done in crc32.c.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

get_crc_table may have produced unsigned long return type in zlib.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we change the test to just call crc32_z as @mtl1979 suggested, these typedefs become irrelevant, as most types are the same between compat and zlib-ng. But the crc still has different types on each.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the test is statically linked to zlib-ng, it can access functable directly, and such there will be no differences... For dynamic linking, simple cast when calling crc32_z is enough. I pointed out to how it is done in crc32.c, because essentially what is needed is same backwards. It would be a lot easier, if there would be "undocumented API" to access functable when building against shared version of zlib-ng.

test/crc32_test.c Outdated Show resolved Hide resolved
test/crc32_test.c Outdated Show resolved Hide resolved
test/crc32_test.c Outdated Show resolved Hide resolved
@mscastanho mscastanho marked this pull request as ready for review June 16, 2021 19:24
@@ -0,0 +1,98 @@
/* Helper functions to work around issues with clang builtins
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a fallback_builtins.h in the main directory. I think it should be moved to arch/x86/fallback_builtins.h. And then this file should be renamed arch/power/fallback_builtins.h.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I renamed clang_workarounds.h to fallback_builtins.h. I haven't moved the x86 one though.

Copy link
Member

@nmoinvaz nmoinvaz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only have style changes as I don't have the hardware. It is good that there are crc32 tests to prove it out.


unsigned long len = (unsigned long) _len;

if (p == (const unsigned char *) 0x0) return 0;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Separate line for return 0;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

offset += 16;

v0 = vec_xor(v0, va0);
va0 = __builtin_crypto_vpmsumd ((__vector unsigned long
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Random functions with space after function name above and below this line.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I think I fixed all of those now.

}

#if BYTE_ORDER == BIG_ENDIAN
#define __builtin_unpack_vector_0(a) __builtin_unpack_vector ((a), 0)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extra space after function name here too.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

offset += 128;

v0 = (__vector unsigned long long)__builtin_crypto_vpmsumw (
(__vector unsigned int)vdata0,(__vector unsigned int)v0);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No space between function arguments.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

* left 32 bits so it occupies the least significant bits in the
* bit reflected domain.
*/
v0 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mscastanho what do you think about using typedef?

_vector unsigned long long = vector_uint64_t?
_vector unsigned char = vector_uint8_t?

Or just using fixed types if possible?

Anyways, just an idea because I noticed there is a lot of casting with long types.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nmoinvaz I don't think there are vector types with "fixed type names" available for Power (something like vector uint64_t). But the types available do have fixed sizes (e.g. vector unsigned long long is a vector with 2 doublewords).

I think I'm neutral regarding using typedefs. It would certainly save some chars and make the code neater, but would add an extra indirection for the "reader" to find out which underlying type is actually being used.

If you think using typedefs would be better, I can make the change.

@mscastanho
Copy link
Contributor Author

@nmoinvaz I'm so sorry. I completely missed your last comments 🤦🏼

I think I addressed all of them, and also rebased against current develop to fix some merge conflicts.

@nmoinvaz
Copy link
Member

LGTM.

@mscastanho
Copy link
Contributor Author

Gentle ping =)

Copy link
Collaborator

@mtl1979 mtl1979 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs some cleanup.

#if defined (__clang__)
#include "fallback_builtins.h"
#else
#define __builtin_pack_vector(a, b) __builtin_pack_vector_int128 ((a), (b))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems unnecessary... parameters are passed in same order without any additional cast.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was needed because an alternative __builtin_pack_vector was defined in fallback_builtins for clang, so we needed a definition for the GCC case. But clang now has __builtin_pack_vector_int128, so we can use that directly instead, so this was removed.

arch/power/crc32_power8.c Outdated Show resolved Hide resolved
arch/power/fallback_builtins.h Outdated Show resolved Hide resolved
arch/power/fallback_builtins.h Outdated Show resolved Hide resolved
arch/power/fallback_builtins.h Outdated Show resolved Hide resolved
Makefile.in Outdated Show resolved Hide resolved
Copy link
Collaborator

@mtl1979 mtl1979 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just small style fixes ;)

Makefile.in Outdated Show resolved Hide resolved
arch/power/crc32_power8.c Outdated Show resolved Hide resolved
arch/power/crc32_power8.c Outdated Show resolved Hide resolved
arch/power/crc32_power8.c Outdated Show resolved Hide resolved
@Dead2
Copy link
Member

Dead2 commented Aug 11, 2021

This needs a minor rebase now, sorry 😉

@Dead2 Dead2 added the Rebase needed Please do a 'git rebase develop yourbranch' label Aug 11, 2021
Reorganize statements inside crc32_stub() to match more closely the format
used for other function stubs in functable.c.
@mscastanho
Copy link
Contributor Author

@Dead2 Done =)

Copy link
Member

@Dead2 Dead2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Dead2 Dead2 requested a review from mtl1979 August 11, 2021 15:44
Copy link
Collaborator

@mtl1979 mtl1979 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is still quite a lot of casts that make the code hard to read, but I don't think keeping them blocks merging as trying to avoid casts by using inline utility functions makes debug build larger.

p = (char *)p + 128;

/*
* main loop. We modulo schedule it such that it takes three
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is hard to read. Possibly missing punctuation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment was inherited from previous iterations of this code. I replaced it with simpler high-level comment.

This commit adds an optimized version of the crc32 function based
on crc32-vpmsum from https://github.com/antonblanchard/crc32-vpmsum/ .
The code has been relicensed to the zlib license.

This is the C implementation created by Rogerio Alves <rogealve@br.ibm.com>

It makes use of vector instructions to speed up CRC32 algorithm. Decompression
times were improved by +30% on tests.

Based on Daniel Black's work for the original zlib (madler/zlib#478).
Copy link
Collaborator

@mtl1979 mtl1979 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@Dead2 Dead2 merged commit 0064010 into zlib-ng:develop Aug 12, 2021
Dead2 added a commit that referenced this pull request Dec 13, 2021
 - Fix hangs on macOS #1031
 - Fix minideflate write buffers being overwritten #1060
 - Fix build problems when building outside of source dir #1049
 - Fix build problems on arm2-7 #1030
 - Fixed some compile warnings #1020 #1036 #1037 #1048
 - Improved posix memalign support #888
 - Improvements to testing #637 #1026 #1035 #1051 #1056 #1063 #1067
 - Improvements for integration into other projects #1022 #1042
 - Code style fixes #637 #1040 #1050
@Dead2 Dead2 mentioned this pull request Dec 13, 2021
Dead2 added a commit that referenced this pull request Dec 20, 2021
 - Fix hangs on macOS #1031
 - Fix minideflate write buffers being overwritten #1060
 - Fix deflateBound and compressBound returning too small size estimates #1071
 - Fix build problems when building outside of source dir #1049
 - Fix build problems on arm2-7 #1030
 - Fixed some compile warnings #1020 #1036 #1037 #1048
 - Improved posix memalign support #888
 - Improvements to testing #637 #1026 #1032 #1035 #1051 #1056 #1063 #1067
 - Improvements for integration into other projects #1022 #1042
 - Code style fixes #637 #1040 #1050 #1075
Dead2 added a commit that referenced this pull request Dec 20, 2021
 - Fix hangs on macOS #1031
 - Fix minideflate write buffers being overwritten #1060
 - Fix deflateBound and compressBound returning too small size estimates #1071
 - Fix build problems when building outside of source dir #1049
 - Fix build problems on arm2-7 #1030
 - Fixed some compile warnings #1020 #1036 #1037 #1048
 - Improved posix memalign support #888
 - Improvements to testing #637 #1026 #1032 #1035 #1051 #1056 #1063 #1067
 - Improvements for integration into other projects #1022 #1042
 - Code style fixes #637 #1040 #1050 #1075
Dead2 added a commit that referenced this pull request Dec 20, 2021
 - Fix hangs on macOS #1031
 - Fix minideflate write buffers being overwritten #1060
 - Fix deflateBound and compressBound returning too small size estimates #1071
 - Fix build problems when building outside of source dir #1049
 - Fix build problems on arm2-7 #1030
 - Fixed some compile warnings #1020 #1036 #1037 #1048
 - Improved posix memalign support #888
 - Improvements to testing #637 #1026 #1032 #1035 #1051 #1056 #1063 #1067
 - Improvements for integration into other projects #1022 #1042
 - Code style fixes #637 #1040 #1050 #1075
Dead2 added a commit that referenced this pull request Dec 20, 2021
 - Fix hangs on macOS #1031
 - Fix minideflate write buffers being overwritten #1060
 - Fix deflateBound and compressBound returning too small size estimates #1049 #1071
 - Fix incorrect function declaration warning #1080
 - Fix build problems when building outside of source dir #1049
 - Fix build problems on arm2-7 #1030
 - Fixed some compile warnings #1020 #1036 #1037 #1048
 - Improved posix memalign support #888
 - Improvements to testing #637 #1026 #1032 #1035 #1049 #1051 #1056 #1063 #1067
 - Improvements for integration into other projects #1022 #1042
 - Code style fixes #637 #1040 #1050 #1075
Dead2 added a commit that referenced this pull request Dec 20, 2021
 - Fix hangs on macOS #1031
 - Fix minideflate write buffers being overwritten #1060
 - Fix deflateBound and compressBound returning too small size estimates #1049 #1071
 - Fix incorrect function declaration warning #1080
 - Fix build problems when building outside of source dir #1049
 - Fix build problems on arm2-7 #1030
 - Fixed some compile warnings #1020 #1036 #1037 #1048
 - Improved posix memalign support #888
 - Improvements to testing #637 #1026 #1032 #1035 #1049 #1051 #1056 #1063 #1067 #1079
 - Improvements for integration into other projects #1022 #1042
 - Code style fixes #637 #1040 #1050 #1075
Dead2 added a commit that referenced this pull request Dec 24, 2021
 - Fix hangs on macOS #1031
 - Fix minideflate write buffers being overwritten #1060
 - Fix deflateBound and compressBound returning too small size estimates #1049 #1071
 - Fix incorrect function declaration warning #1080
 - Fix build problems when building outside of source dir #1049
 - Fix build problems on arm2-7 #1030
 - Fixed some compile warnings #1020 #1036 #1037 #1048
 - Improved posix memalign support #888
 - Improvements to testing #637 #1026 #1032 #1035 #1049 #1051 #1056 #1063 #1067 #1079
 - Improvements for integration into other projects #1022 #1042
 - Code style fixes #637 #1040 #1050 #1075
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Architecture Architecture specific enhancement optimization Rebase needed Please do a 'git rebase develop yourbranch'
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants