@@ -182,33 +182,42 @@ static void unmask(char *msg, size_t msg_len, char mask[static 4])
182
182
}
183
183
#endif
184
184
185
- if (sizeof (void * ) == 8 && msg_len >= 8 ) {
185
+ #if __SIZEOF_POINTER__ == 8
186
+
186
187
#if defined(__SSE_4_1__ )
187
- /* We're far away enough from the AVX2 path that it's
188
- * probably better to use mask128 instead of mask256
189
- * here. */
190
- const __int64 mask64 = _mm_extract_epi64 (mask128 , 0 );
188
+ /* We're far away enough from the AVX2 path that it's
189
+ * probably better to use mask128 instead of mask256
190
+ * here. */
191
+ const uint64_t mask64 = _mm_extract_epi64 (mask128 , 0 );
191
192
#else
192
- const uint32_t mask32 = string_as_uint32 (mask );
193
- const uint64_t mask64 = (uint64_t )mask32 << 32 | (uint64_t )mask32 ;
193
+ const uint32_t mask32 = string_as_uint32 (mask );
194
+ const uint64_t mask64 = (uint64_t )mask32 << 32 | (uint64_t )mask32 ;
195
+ #define HAS_MASK32
194
196
#endif
197
+
198
+ if (msg_len >= 8 ) {
195
199
do {
196
200
uint64_t v = string_as_uint64 (msg );
197
- v ^= ( uint64_t ) mask64 ;
201
+ v ^= mask64 ;
198
202
msg = mempcpy (msg , & v , sizeof (v ));
199
203
msg_len -= 8 ;
200
204
} while (msg_len >= 8 );
201
205
}
206
+ #endif
202
207
203
208
if (msg_len >= 4 ) {
204
- #if defined(__SSE_4_1__ )
209
+ #if defined(HAS_MASK32 )
210
+ /* do nothing */
211
+ #elif __SIZEOF_POINTER__ == 8
212
+ const uint32_t mask32 = (uint32_t )mask64 ;
213
+ #elif defined(__SSE_4_1__ )
205
214
const uint32_t mask32 = _mm_extract_epi32 (mask128 , 0 );
206
215
#else
207
216
const uint32_t mask32 = string_as_uint32 (mask );
208
217
#endif
209
218
do {
210
219
uint32_t v = string_as_uint32 (msg );
211
- v ^= ( uint32_t ) mask32 ;
220
+ v ^= mask32 ;
212
221
msg = mempcpy (msg , & v , sizeof (v ));
213
222
msg_len -= 4 ;
214
223
} while (msg_len >= 4 );
@@ -225,7 +234,7 @@ static void unmask(char *msg, size_t msg_len, char mask[static 4])
225
234
default :
226
235
__builtin_unreachable ();
227
236
}
228
- #undef MASK32_SET
237
+ #undef HAS_MASK32
229
238
}
230
239
231
240
static void send_websocket_pong (struct lwan_request * request , uint16_t header )
0 commit comments