blob: 2d55e1ed50a8599a18b01562e27809b9df6f3f6d (
plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
--- php-7.4.25.orig/ext/standard/crc32.c 2021-10-19 17:18:19.000000000 +0200
+++ php-7.4.25/ext/standard/crc32.c 2021-10-29 14:58:12.777563842 +0200
@@ -20,56 +20,6 @@
#include "basic_functions.h"
#include "crc32.h"
-#if HAVE_AARCH64_CRC32
-# include <arm_acle.h>
-# if defined(__linux__)
-# include <sys/auxv.h>
-# include <asm/hwcap.h>
-# endif
-
-static inline int has_crc32_insn() {
- /* Only go through the runtime detection once. */
- static int res = -1;
- if (res != -1)
- return res;
-# if defined(HWCAP_CRC32)
- res = getauxval(AT_HWCAP) & HWCAP_CRC32;
- return res;
-# elif defined(HWCAP2_CRC32)
- res = getauxval(AT_HWCAP2) & HWCAP2_CRC32;
- return res;
-# else
- res = 0;
- return res;
-# endif
-}
-
-# pragma GCC push_options
-# pragma GCC target ("+nothing+crc")
-static uint32_t crc32_aarch64(uint32_t crc, char *p, size_t nr) {
- while (nr >= sizeof(uint64_t)) {
- crc = __crc32d(crc, *(uint64_t *)p);
- p += sizeof(uint64_t);
- nr -= sizeof(uint64_t);
- }
- if (nr >= sizeof(int32_t)) {
- crc = __crc32w(crc, *(uint32_t *)p);
- p += sizeof(uint32_t);
- nr -= sizeof(uint32_t);
- }
- if (nr >= sizeof(int16_t)) {
- crc = __crc32h(crc, *(uint16_t *)p);
- p += sizeof(uint16_t);
- nr -= sizeof(uint16_t);
- }
- if (nr) {
- crc = __crc32b(crc, *p);
- }
- return crc;
-}
-# pragma GCC pop_options
-#endif
-
/* {{{ proto string crc32(string str)
Calculate the crc32 polynomial of a string */
PHP_NAMED_FUNCTION(php_if_crc32)
@@ -85,13 +35,6 @@ PHP_NAMED_FUNCTION(php_if_crc32)
crc = crcinit^0xFFFFFFFF;
-#if HAVE_AARCH64_CRC32
- if (has_crc32_insn()) {
- crc = crc32_aarch64(crc, p, nr);
- RETURN_LONG(crc^0xFFFFFFFF);
- }
-#endif
-
for (; nr--; ++p) {
crc = ((crc >> 8) & 0x00FFFFFF) ^ crc32tab[(crc ^ (*p)) & 0xFF ];
}
|