Skip to content

Commit b9b134d

Browse files
MaxKellermannnikic
authored andcommitted
ext/opcache/ZendAccelerator: move duplicate code into bzero_aligned()
1 parent 6328176 commit b9b134d

File tree

1 file changed

+38
-74
lines changed

1 file changed

+38
-74
lines changed

ext/opcache/ZendAccelerator.c

Lines changed: 38 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,40 @@ static void preload_restart(void);
139139
# define LOCKVAL(v) (ZCSG(v))
140140
#endif
141141

142+
/**
143+
* Clear AVX/SSE2-aligned memory.
144+
*/
145+
static void bzero_aligned(void *mem, size_t size)
146+
{
147+
#if defined(__x86_64__)
148+
memset(mem, 0, size);
149+
#elif defined(__AVX__)
150+
char *p = (char*)mem;
151+
char *end = p + size;
152+
__m256i ymm0 = _mm256_setzero_si256();
153+
154+
while (p < end) {
155+
_mm256_store_si256((__m256i*)p, ymm0);
156+
_mm256_store_si256((__m256i*)(p+32), ymm0);
157+
p += 64;
158+
}
159+
#elif defined(__SSE2__)
160+
char *p = (char*)mem;
161+
char *end = p + size;
162+
__m128i xmm0 = _mm_setzero_si128();
163+
164+
while (p < end) {
165+
_mm_store_si128((__m128i*)p, xmm0);
166+
_mm_store_si128((__m128i*)(p+16), xmm0);
167+
_mm_store_si128((__m128i*)(p+32), xmm0);
168+
_mm_store_si128((__m128i*)(p+48), xmm0);
169+
p += 64;
170+
}
171+
#else
172+
memset(mem, 0, size);
173+
#endif
174+
}
175+
142176
#ifdef ZEND_WIN32
143177
static time_t zend_accel_get_time(void)
144178
{
@@ -1539,43 +1573,6 @@ static zend_persistent_script *cache_script_in_shared_memory(zend_persistent_scr
15391573

15401574
/* Allocate shared memory */
15411575
ZCG(mem) = zend_shared_alloc_aligned(memory_used);
1542-
#if defined(__AVX__) || defined(__SSE2__)
1543-
if (ZCG(mem)) {
1544-
#if defined(__x86_64__)
1545-
memset(ZCG(mem), 0, memory_used);
1546-
#elif defined(__AVX__)
1547-
{
1548-
char *p = (char*)ZCG(mem);
1549-
char *end = p + memory_used;
1550-
__m256i ymm0 = _mm256_setzero_si256();
1551-
1552-
while (p < end) {
1553-
_mm256_store_si256((__m256i*)p, ymm0);
1554-
_mm256_store_si256((__m256i*)(p+32), ymm0);
1555-
p += 64;
1556-
}
1557-
}
1558-
#else
1559-
{
1560-
char *p = (char*)ZCG(mem);
1561-
char *end = p + memory_used;
1562-
__m128i xmm0 = _mm_setzero_si128();
1563-
1564-
while (p < end) {
1565-
_mm_store_si128((__m128i*)p, xmm0);
1566-
_mm_store_si128((__m128i*)(p+16), xmm0);
1567-
_mm_store_si128((__m128i*)(p+32), xmm0);
1568-
_mm_store_si128((__m128i*)(p+48), xmm0);
1569-
p += 64;
1570-
}
1571-
}
1572-
#endif
1573-
}
1574-
#else
1575-
if (ZCG(mem)) {
1576-
memset(ZCG(mem), 0, memory_used);
1577-
}
1578-
#endif
15791576
if (!ZCG(mem)) {
15801577
zend_shared_alloc_destroy_xlat_table();
15811578
zend_accel_schedule_restart_if_necessary(ACCEL_RESTART_OOM);
@@ -1587,6 +1584,8 @@ static zend_persistent_script *cache_script_in_shared_memory(zend_persistent_scr
15871584
return new_persistent_script;
15881585
}
15891586

1587+
bzero_aligned(ZCG(mem), memory_used);
1588+
15901589
zend_shared_alloc_clear_xlat_table();
15911590

15921591
/* Copy into shared memory */
@@ -4235,48 +4234,13 @@ static zend_persistent_script* preload_script_in_shared_memory(zend_persistent_s
42354234

42364235
/* Allocate shared memory */
42374236
ZCG(mem) = zend_shared_alloc_aligned(memory_used);
4238-
#if defined(__AVX__) || defined(__SSE2__)
4239-
if (ZCG(mem)) {
4240-
#if defined(__x86_64__)
4241-
memset(ZCG(mem), 0, memory_used);
4242-
#elif defined(__AVX__)
4243-
{
4244-
char *p = (char*)ZCG(mem);
4245-
char *end = p + memory_used;
4246-
__m256i ymm0 = _mm256_setzero_si256();
4247-
4248-
while (p < end) {
4249-
_mm256_store_si256((__m256i*)p, ymm0);
4250-
_mm256_store_si256((__m256i*)(p+32), ymm0);
4251-
p += 64;
4252-
}
4253-
}
4254-
#else
4255-
{
4256-
char *p = (char*)ZCG(mem);
4257-
char *end = p + memory_used;
4258-
__m128i xmm0 = _mm_setzero_si128();
4259-
4260-
while (p < end) {
4261-
_mm_store_si128((__m128i*)p, xmm0);
4262-
_mm_store_si128((__m128i*)(p+16), xmm0);
4263-
_mm_store_si128((__m128i*)(p+32), xmm0);
4264-
_mm_store_si128((__m128i*)(p+48), xmm0);
4265-
p += 64;
4266-
}
4267-
}
4268-
#endif
4269-
}
4270-
#else
4271-
if (ZCG(mem)) {
4272-
memset(ZCG(mem), 0, memory_used);
4273-
}
4274-
#endif
42754237
if (!ZCG(mem)) {
42764238
zend_accel_error_noreturn(ACCEL_LOG_FATAL, "Not enough shared memory for preloading. Consider increasing the value for the opcache.memory_consumption directive in php.ini.");
42774239
return NULL;
42784240
}
42794241

4242+
bzero_aligned(ZCG(mem), memory_used);
4243+
42804244
zend_shared_alloc_restore_xlat_table(checkpoint);
42814245

42824246
/* Copy into shared memory */

0 commit comments

Comments
 (0)