diff --git a/gzip-1.13.tar.xz b/gzip-1.13.tar.xz deleted file mode 100644 index 801f89cd4a0ce3fd6257941123bec4bee5d05943..0000000000000000000000000000000000000000 Binary files a/gzip-1.13.tar.xz and /dev/null differ diff --git a/gzip-1.14.tar.xz b/gzip-1.14.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..751d4ef2f58b1af43d2dcf9fa05f24da5603ed31 Binary files /dev/null and b/gzip-1.14.tar.xz differ diff --git a/gzip.spec b/gzip.spec index b31213bac0935989312e3fdc2a9b3f9754badad9..74b2717bfaf95bcc2edd1cf8b537729b9d7437ba 100644 --- a/gzip.spec +++ b/gzip.spec @@ -1,5 +1,5 @@ Name: gzip -Version: 1.13 +Version: 1.14 Release: 1 Summary: A data compression utility @@ -10,7 +10,6 @@ Source1: colorzgrep.csh Source2: colorzgrep.sh Patch9000: fix-verbose-disable.patch -Patch9001: performance-neoncrc32-and-prfm.patch BuildRequires: gcc texinfo less Requires: coreutils @@ -66,6 +65,10 @@ rm -fr %{buildroot}%{_datadir}/info/dir %{_mandir}/man1/* %changelog +* Fri Apr 11 2025 Funda Wang - 1.14-1 +- update to 1.14 +- drop performance patch, it does not apply any more due to refactor of updcrc() + * Sun Aug 20 2023 Funda Wang - 1.13-1 - update to 1.13 diff --git a/performance-neoncrc32-and-prfm.patch b/performance-neoncrc32-and-prfm.patch deleted file mode 100644 index 1ffc34b035f2b2a434f6aff48585fd549337d6fe..0000000000000000000000000000000000000000 --- a/performance-neoncrc32-and-prfm.patch +++ /dev/null @@ -1,162 +0,0 @@ -From 00f4c93e6c6cae92714a96cdde3c07bdfd59c9dc Mon Sep 17 00:00:00 2001 -From: root -Date: Tue, 28 Dec 2021 10:24:26 +0800 -Subject: [PATCH] performance-neoncrc32-and-prfm-2 - ---- - deflate.c | 28 +++++++++++++++++++++++++++- - util.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 75 insertions(+), 1 deletion(-) - -diff --git a/deflate.c b/deflate.c -index 55bdc0e..3add924 100644 ---- a/deflate.c -+++ b/deflate.c -@@ -378,6 +378,9 @@ longest_match(IPos cur_match) - register int len; /* length of current match */ - int best_len = prev_length; /* best match length so far */ - IPos limit = strstart > (IPos)MAX_DIST ? strstart - (IPos)MAX_DIST : NIL; -+ #ifdef __aarch64__ -+ IPos next_match; -+ #endif - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ -@@ -412,6 +415,11 @@ longest_match(IPos cur_match) - Assert(cur_match < strstart, "no future"); - match = window + cur_match; - -+ #ifdef __aarch64__ -+ next_match = prev[cur_match & WMASK]; -+ __asm__("PRFM PLDL1STRM, [%0]"::"r"(&(prev[next_match & WMASK]))); -+ #endif -+ - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2: - */ -@@ -488,8 +496,14 @@ longest_match(IPos cur_match) - scan_end = scan[best_len]; - #endif - } -- } while ((cur_match = prev[cur_match & WMASK]) > limit -+ } -+ #ifdef __aarch64__ -+ while ((cur_match = next_match) > limit -+ && --chain_length != 0); -+ #else -+ while ((cur_match = prev[cur_match & WMASK]) > limit - && --chain_length != 0); -+ #endif - - return best_len; - } -@@ -777,7 +791,19 @@ deflate (int pack_level) - lookahead -= prev_length-1; - prev_length -= 2; - RSYNC_ROLL(strstart, prev_length+1); -+ while (prev_length >= 4) { -+ prev_length -= 4; -+ strstart++; -+ INSERT_STRING(strstart, hash_head); -+ strstart++; -+ INSERT_STRING(strstart, hash_head); -+ strstart++; -+ INSERT_STRING(strstart, hash_head); -+ strstart++; -+ INSERT_STRING(strstart, hash_head); -+ } - do { -+ if (prev_length == 0) break; - strstart++; - INSERT_STRING(strstart, hash_head); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are -diff --git a/util.c b/util.c -index e4240a7..397fb3e 100644 ---- a/util.c -+++ b/util.c -@@ -31,6 +31,9 @@ - #include "gzip.h" - #include - #include -+#ifdef __aarch64__ -+#include -+#endif - - #ifndef CHAR_BIT - # define CHAR_BIT 8 -@@ -41,6 +44,7 @@ static int write_buffer (int, voidp, unsigned int); - /* ======================================================================== - * Table of CRC-32's of all single-byte values (made by makecrc.c) - */ -+#ifndef __aarch64__ - static const ulg crc_32_tab[] = { - 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, - 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, -@@ -95,6 +99,7 @@ static const ulg crc_32_tab[] = { - 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, - 0x2d02ef8dL - }; -+#endif - - /* Shift register contents. */ - static ulg crc = 0xffffffffL; -@@ -132,6 +137,48 @@ ulg updcrc(s, n) - ulg - updcrc (uch const *s, unsigned n) - { -+ #ifdef __aarch64__ -+ register ulg c; -+ register const uint8_t *buf1; -+ register const uint16_t *buf2; -+ register const uint32_t *buf4; -+ register const uint64_t *buf8; -+ int64_t length = (int64_t)n; -+ buf8 = (const uint64_t *)(const void *)s; -+ -+ if (s == NULL) { -+ c = 0xffffffffL; -+ } else { -+ c = crc; -+ -+ while(length >= sizeof(uint64_t)) { -+ c = __crc32d(c, *buf8++); -+ length -= sizeof(uint64_t); -+ } -+ -+ buf4 = (const uint32_t *)(const void *)buf8; -+ if (length >= sizeof(uint32_t)) { -+ c = __crc32w(c, *buf4++); -+ length -= sizeof(uint32_t); -+ } -+ -+ buf2 = (const uint16_t *)(const void *)buf4; -+ if(length >= sizeof(uint16_t)) { -+ c = __crc32h(c, *buf2++); -+ length -= sizeof(uint16_t); -+ } -+ -+ buf1 = (const uint8_t *)(const void *)buf2; -+ if (length >= sizeof(uint8_t)) { -+ c = __crc32b(c, *buf1); -+ length -= sizeof(uint8_t); -+ } -+ } -+ -+ crc = c; -+ -+ return (c ^ 0xffffffffL); -+#else - register ulg c; /* temporary variable */ - - if (s == NULL) { -@@ -144,6 +191,7 @@ ulg updcrc(s, n) - } - crc = c; - return c ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ -+#endif - } - - /* Return a current CRC value. */ --- -2.27.0 -