diff -Nabur zip302/crc32.c zip30/crc32.c
--- zip302/crc32.c	2021-04-19 23:53:33.113226036 +0800
+++ zip30/crc32.c	2021-04-19 23:54:07.821747891 +0800
@@ -675,7 +675,7 @@
 
 #endif /* (IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */
 
-
+#if 0
 /* ========================================================================= */
 ulg crc32(crc, buf, len)
     ulg crc;                    /* crc shift register */
@@ -726,6 +726,38 @@
 
   return REV_BE(c) ^ 0xffffffffL;   /* (instead of ~c for 64-bit machines) */
 }
+//
+#endif
+
+
+
+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;
+} 
+
+
+
 #endif /* !ASM_CRC */
 #endif /* !CRC_TABLE_ONLY */
 #endif /* !USE_ZLIB */
diff -Nabur zip302/crc32.h zip30/crc32.h
--- zip302/crc32.h	2021-04-19 23:53:33.113226036 +0800
+++ zip30/crc32.h	2021-04-19 23:54:07.821747891 +0800
@@ -36,7 +36,8 @@
 #    undef IZ_CRC_BE_OPTIMIZ
 #  endif
 #else /* !(USE_ZLIB || CRC_TABLE_ONLY) */
-   ulg      crc32           OF((ulg crc, ZCONST uch *buf, extent len));
+  u_int32_t crc32(u_int32_t crc,const u_int8_t *p, unsigned int len);
+  // ulg      crc32           OF((ulg crc, ZCONST uch *buf, extent len));
 #endif /* ?(USE_ZLIB || CRC_TABLE_ONLY) */
 
 #ifndef CRC_32_TAB
@@ -47,10 +48,13 @@
 #  undef CRC32
 #endif
 #ifdef IZ_CRC_BE_OPTIMIZ
-#  define CRC32UPD(c, crctab) (crctab[((c) >> 24)] ^ ((c) << 8))
-#  define CRC32(c, b, crctab) (crctab[(((int)(c) >> 24) ^ (b))] ^ ((c) << 8))
+//#  define CRC32UPD(c, crctab) (crctab[((c) >> 24)] ^ ((c) << 8))
+  #  define CRC32UPD(c) (__builtin_aarch64_crc32w(c,0))
+//#  define CRC32(c, b, crctab) (crctab[(((int)(c) >> 24) ^ (b))] ^ ((c) << 8))
+  #  define CRC32(c,b) (__builtin_aarch64_crc32w(c,b))
 #  define REV_BE(w) (((w)>>24)+(((w)>>8)&0xff00)+ \
                     (((w)&0xff00)<<8)+(((w)&0xff)<<24))
+
 #else
 #  define CRC32UPD(c, crctab) (crctab[((int)(c)) & 0xff] ^ ((c) >> 8))
 #  define CRC32(c, b, crctab) (crctab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8))
diff -Nabur zip302/unix/Makefile zip30/unix/Makefile
--- zip302/unix/Makefile	2021-04-19 23:53:33.761235779 +0800
+++ zip30/unix/Makefile	2021-04-19 23:54:31.682106640 +0800
@@ -36,7 +36,7 @@
 CHMOD = chmod
 BINFLAGS = 755
 MANFLAGS = 644
-
+ARCH = $(shell getconf LONG_BIT)
 # target directories - where to install executables and man pages to
 prefix = /usr/local
 BINDIR = $(prefix)/bin
@@ -80,10 +80,10 @@
 .SUFFIXES:
 .SUFFIXES: _.o .o .c .doc .1
 .c_.o:
-	$(CC) -c $(CFLAGS) -DUTIL -o $@ $<
+	$(CC) -c $(CFLAGS) -DUTIL  -DARCH=$(ARCH) -march=armv8.1-a -o $@ $<
 
 .c.o:
-	$(CC) -c $(CFLAGS) $<
+	$(CC) -c $(CFLAGS)  -DARCH=$(ARCH) -march=armv8.1-a $<
 
 .1.doc:
 	nroff -man $< | col -bx | uniq > $@
