diff --git a/zip-3.0-crc-builtin.patch b/zip-3.0-crc-builtin.patch new file mode 100644 index 0000000000000000000000000000000000000000..801873b32cebf296b49d4a074036c48cd4de6511 --- /dev/null +++ b/zip-3.0-crc-builtin.patch @@ -0,0 +1,115 @@ +From 6210c2007a430882d234d846d133d5f3799434aa Mon Sep 17 00:00:00 2001 +From: Euler Hanzh <18221254@bjtu.edu.cn> +Date: Mon, 17 May 2021 17:32:51 +0800 +Subject: [PATCH] this patch is created for performance optimization in crc calculation only suitable for openeuler of aarch64 architecture. + The speed of zip software when running can be accelerate by nearly 20% than before. + +--- + zip30/crc32.c | 27 +++++++++++++++++++++++++++ + zip30/crc32.h | 4 ++++ + zip30/unix/Makefile | 13 +++++++++++-- + 3 files changed, 42 insertions(+), 2 deletions(-) + +diff --git a/zip30/crc32.c b/zip30/crc32.c +index 6b2403b..9e26af7 100644 +--- a/zip30/crc32.c ++++ b/zip30/crc32.c +@@ -675,7 +675,32 @@ void free_crc_table() + + #endif /* (IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */ + ++#ifdef ARCH_AARCH64 ++u_int32_t crc32(u_int32_t crc,const u_int8_t *p, unsigned int len) ++{ ++ int64_t length = len; ++ ++ while ((length -= sizeof(u_int64_t)) >=0) { ++ __builtin_aarch64_crc32cx(crc, *((u_int64_t *)p)); ++ p += sizeof(u_int64_t); ++ } + ++ if (length & sizeof(u_int32_t)) { ++ __builtin_aarch64_crc32cw(crc, *((u_int32_t *)p)); ++ p += sizeof(u_int32_t); ++ } ++ ++ if (length & sizeof(u_int16_t)) { ++ __builtin_aarch64_crc32ch(crc, *((u_int16_t *)p)); ++ p += sizeof(u_int16_t); ++ } ++ ++ if (length & sizeof(u_int8_t)) ++ __builtin_aarch64_crc32cb(crc, *p); ++ ++ return crc; ++} ++#else + /* ========================================================================= */ + ulg crc32(crc, buf, len) + ulg crc; /* crc shift register */ +@@ -726,6 +751,8 @@ ulg crc32(crc, buf, len) + + return REV_BE(c) ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ + } ++#endif /* !ARCH_AARCH64*/ + #endif /* !ASM_CRC */ + #endif /* !CRC_TABLE_ONLY */ + #endif /* !USE_ZLIB */ +diff --git a/zip30/crc32.h b/zip30/crc32.h +index 83af240..6fdaf32 100644 +--- a/zip30/crc32.h ++++ b/zip30/crc32.h +@@ -36,7 +36,11 @@ + # undef IZ_CRC_BE_OPTIMIZ + # endif + #else /* !(USE_ZLIB || CRC_TABLE_ONLY) */ ++# ifdef ARCH_AARCH64 ++ u_int32_t crc32(u_int32_t crc,const u_int8_t *p, unsigned int len); ++# else + ulg crc32 OF((ulg crc, ZCONST uch *buf, extent len)); ++# endif + #endif /* ?(USE_ZLIB || CRC_TABLE_ONLY) */ + + #ifndef CRC_32_TAB +diff --git a/zip30/unix/Makefile b/zip30/unix/Makefile +index abd0c44..065395a 100644 +--- a/zip30/unix/Makefile ++++ b/zip30/unix/Makefile +@@ -37,6 +37,9 @@ CHMOD = chmod + BINFLAGS = 755 + MANFLAGS = 644 + ++ ++TARGET_ARCH = $(shell uname -m) ++ARCH = $(shell getconf LONG_BIT) + # target directories - where to install executables and man pages to + prefix = /usr/local + BINDIR = $(prefix)/bin +@@ -59,6 +62,12 @@ IZ_OUR_BZIP2_DIR = bzip2 + # LFLAGS2 flags after obj file list (libraries, etc) + CFLAGS_NOOPT = -I. -DUNIX $(LOCAL_ZIP) + CFLAGS = -O2 $(CFLAGS_NOOPT) ++ifeq ($(TARGET_ARCH),aarch64) ++CFF = -DARCH=$(ARCH) -march=armv8.1-a -D ARCH_AARCH64 ++else ++CFF = ++endif ++ + LFLAGS1 = + LFLAGS2 = -s + +@@ -80,10 +89,10 @@ ZIP_H = zip.h ziperr.h tailor.h unix/osdep.h + .SUFFIXES: + .SUFFIXES: _.o .o .c .doc .1 + .c_.o: +- $(CC) -c $(CFLAGS) -DUTIL -o $@ $< ++ $(CC) -c $(CFLAGS) -DUTIL $(CFF) -o $@ $< + + .c.o: +- $(CC) -c $(CFLAGS) $< ++ $(CC) -c $(CFLAGS) $(CFF) $< + + .1.doc: + nroff -man $< | col -bx | uniq > $@ +-- +2.23.0 \ No newline at end of file diff --git a/zip.spec b/zip.spec index 1a386a05068d79895daaec5adfbf1f2f2df36245..3e0e2f43921a311d2342dd6ea916aed2446f66b6 100644 --- a/zip.spec +++ b/zip.spec @@ -1,6 +1,6 @@ Name: zip Version: 3.0 -Release: 26 +Release: 27 Summary: A compression and file packaging/archive utility License: Info-ZIP URL: http://www.info-zip.org/Zip.html @@ -18,6 +18,8 @@ Patch6000: CVE-2018-13410.patch Patch9000: openEuler-Cleanup-residual-temporary-file.patch +Patch12000: zip-3.0-crc-builtin.patch + BuildRequires: bzip2-devel gcc Requires: unzip @@ -56,6 +58,9 @@ mkdir -p %{buildroot}%{_mandir}/man1 %{_mandir}/man1/zip* %changelog +* May Sun 9 2021 hanzhelii <182212254@bjtu.edu.cn> - 3.0-27 +- Add zip-3.0-crc-builtin.patch + * Dec Thu 8 2020 wuchaochao - 3.0-26 - Add openEuler-Cleanup-residual-temporary-file.patch