@@ -128,38 +128,42 @@ static zend_always_inline void zend_hash_real_init_mixed_ex(HashTable *ht)
128
128
{
129
129
uint32_t nSize = ht -> nTableSize ;
130
130
131
- ht -> nTableMask = HT_SIZE_TO_MASK ( nSize );
132
- HT_SET_DATA_ADDR ( ht , pemalloc ( HT_SIZE_EX ( nSize , HT_SIZE_TO_MASK (nSize )), GC_FLAGS ( ht ) & IS_ARRAY_PERSISTENT ) );
133
- HT_FLAGS (ht ) |= HASH_FLAG_INITIALIZED ;
134
- if ( EXPECTED ( ht -> nTableMask == HT_SIZE_TO_MASK ( HT_MIN_SIZE ))) {
135
- Bucket * arData = ht -> arData ;
136
-
131
+ if ( EXPECTED ( nSize == HT_MIN_SIZE )) {
132
+ ht -> nTableMask = HT_SIZE_TO_MASK (HT_MIN_SIZE );
133
+ HT_SET_DATA_ADDR (ht , pemalloc ( HT_SIZE_EX ( HT_MIN_SIZE , HT_SIZE_TO_MASK ( HT_MIN_SIZE )), GC_FLAGS ( ht ) & IS_ARRAY_PERSISTENT )) ;
134
+ HT_FLAGS ( ht ) |= HASH_FLAG_INITIALIZED ;
135
+ do {
136
+ Bucket * arData = ht -> arData ;
137
137
#ifdef __SSE2__
138
- __m128i xmm0 = _mm_setzero_si128 ();
139
- xmm0 = _mm_cmpeq_epi8 (xmm0 , xmm0 );
140
- _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -16 ), xmm0 );
141
- _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -12 ), xmm0 );
142
- _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -8 ), xmm0 );
143
- _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -4 ), xmm0 );
138
+ __m128i xmm0 = _mm_setzero_si128 ();
139
+ xmm0 = _mm_cmpeq_epi8 (xmm0 , xmm0 );
140
+ _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -16 ), xmm0 );
141
+ _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -12 ), xmm0 );
142
+ _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -8 ), xmm0 );
143
+ _mm_storeu_si128 ((__m128i * )& HT_HASH_EX (arData , -4 ), xmm0 );
144
144
#else
145
- HT_HASH_EX (arData , -16 ) = -1 ;
146
- HT_HASH_EX (arData , -15 ) = -1 ;
147
- HT_HASH_EX (arData , -14 ) = -1 ;
148
- HT_HASH_EX (arData , -13 ) = -1 ;
149
- HT_HASH_EX (arData , -12 ) = -1 ;
150
- HT_HASH_EX (arData , -11 ) = -1 ;
151
- HT_HASH_EX (arData , -10 ) = -1 ;
152
- HT_HASH_EX (arData , -9 ) = -1 ;
153
- HT_HASH_EX (arData , -8 ) = -1 ;
154
- HT_HASH_EX (arData , -7 ) = -1 ;
155
- HT_HASH_EX (arData , -6 ) = -1 ;
156
- HT_HASH_EX (arData , -5 ) = -1 ;
157
- HT_HASH_EX (arData , -4 ) = -1 ;
158
- HT_HASH_EX (arData , -3 ) = -1 ;
159
- HT_HASH_EX (arData , -2 ) = -1 ;
160
- HT_HASH_EX (arData , -1 ) = -1 ;
145
+ HT_HASH_EX (arData , -16 ) = -1 ;
146
+ HT_HASH_EX (arData , -15 ) = -1 ;
147
+ HT_HASH_EX (arData , -14 ) = -1 ;
148
+ HT_HASH_EX (arData , -13 ) = -1 ;
149
+ HT_HASH_EX (arData , -12 ) = -1 ;
150
+ HT_HASH_EX (arData , -11 ) = -1 ;
151
+ HT_HASH_EX (arData , -10 ) = -1 ;
152
+ HT_HASH_EX (arData , -9 ) = -1 ;
153
+ HT_HASH_EX (arData , -8 ) = -1 ;
154
+ HT_HASH_EX (arData , -7 ) = -1 ;
155
+ HT_HASH_EX (arData , -6 ) = -1 ;
156
+ HT_HASH_EX (arData , -5 ) = -1 ;
157
+ HT_HASH_EX (arData , -4 ) = -1 ;
158
+ HT_HASH_EX (arData , -3 ) = -1 ;
159
+ HT_HASH_EX (arData , -2 ) = -1 ;
160
+ HT_HASH_EX (arData , -1 ) = -1 ;
161
161
#endif
162
+ } while (0 );
162
163
} else {
164
+ ht -> nTableMask = HT_SIZE_TO_MASK (nSize );
165
+ HT_SET_DATA_ADDR (ht , pemalloc (HT_SIZE_EX (nSize , HT_SIZE_TO_MASK (nSize )), GC_FLAGS (ht ) & IS_ARRAY_PERSISTENT ));
166
+ HT_FLAGS (ht ) |= HASH_FLAG_INITIALIZED ;
163
167
HT_HASH_RESET (ht );
164
168
}
165
169
}
0 commit comments