Skip to content

Commit af9ba07

Browse files
committed
explicitly call the simd routine
Signed-off-by: Frank Du <[email protected]>
1 parent 1402ac1 commit af9ba07

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

ext/hash/hash_crc32.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ PHP_HASH_API void PHP_CRC32Init(PHP_CRC32_CTX *context)
2727

2828
PHP_HASH_API void PHP_CRC32Update(PHP_CRC32_CTX *context, const unsigned char *input, size_t len)
2929
{
30-
size_t i;
30+
size_t i = 0;
3131

32-
i = crc32_x86_simd_update(X86_CRC32, &context->state, input, len);
32+
#if ZEND_INTRIN_SSE4_2_PCLMUL_NATIVE || ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER
33+
i += crc32_x86_simd_update(X86_CRC32, &context->state, input, len);
34+
#endif
3335

3436
for (; i < len; ++i) {
3537
context->state = (context->state << 8) ^ crc32_table[(context->state >> 24) ^ (input[i] & 0xff)];
@@ -38,9 +40,11 @@ PHP_HASH_API void PHP_CRC32Update(PHP_CRC32_CTX *context, const unsigned char *i
3840

3941
PHP_HASH_API void PHP_CRC32BUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len)
4042
{
41-
size_t i;
43+
size_t i = 0;
4244

43-
i = crc32_x86_simd_update(X86_CRC32B, &context->state, input, len);
45+
#if ZEND_INTRIN_SSE4_2_PCLMUL_NATIVE || ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER
46+
i += crc32_x86_simd_update(X86_CRC32B, &context->state, input, len);
47+
#endif
4448

4549
for (; i < len; ++i) {
4650
context->state = (context->state >> 8) ^ crc32b_table[(context->state ^ input[i]) & 0xff];
@@ -49,9 +53,11 @@ PHP_HASH_API void PHP_CRC32BUpdate(PHP_CRC32_CTX *context, const unsigned char *
4953

5054
PHP_HASH_API void PHP_CRC32CUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len)
5155
{
52-
size_t i;
56+
size_t i = 0;
5357

54-
i = crc32_x86_simd_update(X86_CRC32C, &context->state, input, len);
58+
#if ZEND_INTRIN_SSE4_2_PCLMUL_NATIVE || ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER
59+
i += crc32_x86_simd_update(X86_CRC32C, &context->state, input, len);
60+
#endif
5561

5662
for (; i < len; ++i) {
5763
context->state = (context->state >> 8) ^ crc32c_table[(context->state ^ input[i]) & 0xff];

ext/standard/crc32.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ static uint32_t crc32_aarch64(uint32_t crc, char *p, size_t nr) {
7373
PHP_FUNCTION(crc32)
7474
{
7575
char *p;
76-
size_t nr, nr_simd;
76+
size_t nr;
7777
uint32_t crcinit = 0;
7878
uint32_t crc;
7979

@@ -90,9 +90,11 @@ PHP_FUNCTION(crc32)
9090
}
9191
#endif
9292

93-
nr_simd = crc32_x86_simd_update(X86_CRC32B, &crc, (const unsigned char *)p, nr);
93+
#if ZEND_INTRIN_SSE4_2_PCLMUL_NATIVE || ZEND_INTRIN_SSE4_2_PCLMUL_RESOLVER
94+
size_t nr_simd = crc32_x86_simd_update(X86_CRC32B, &crc, (const unsigned char *)p, nr);
9495
nr -= nr_simd;
9596
p += nr_simd;
97+
#endif
9698

9799
for (; nr--; ++p) {
98100
crc = ((crc >> 8) & 0x00FFFFFF) ^ crc32tab[(crc ^ (*p)) & 0xFF ];

0 commit comments

Comments
 (0)