Fix possible crash during array comparison with HackArrCompatCheckCompare
[hiphop-php.git] / hphp / util / hash.cpp
blob73730079ff5e43b173311f8b8f7787b45d4dc634
1 /*
2 +----------------------------------------------------------------------+
3 | HipHop for PHP |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-present Facebook, Inc. (http://www.facebook.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
16 #include "hphp/util/hash.h"
17 #include <folly/CpuId.h>
19 namespace HPHP {
21 bool IsHWHashSupported() {
22 #ifdef USE_HWCRC
23 #if defined __SSE4_2__
24 return true;
25 #else
26 static folly::CpuId cpuid;
27 return cpuid.sse42();
28 #endif
29 #else
30 return false;
31 #endif
34 #if !defined(USE_HWCRC) || !(defined(__SSE4_2__) || \
35 defined(ENABLE_AARCH64_CRC))
36 NEVER_INLINE
37 strhash_t hash_string_cs_fallback(const char *arKey, uint32_t nKeyLength) {
38 #ifdef USE_HWCRC
39 if (IsHWHashSupported()) {
40 return hash_string_cs_unaligned_crc(arKey, nKeyLength);
42 #endif
43 uint64_t h[2];
44 MurmurHash3::hash128<true>(arKey, nKeyLength, 0, h);
45 return strhash_t(h[0] & STRHASH_MASK);
48 NEVER_INLINE
49 strhash_t hash_string_i_fallback(const char *arKey, uint32_t nKeyLength) {
50 #ifdef USE_HWCRC
51 if (IsHWHashSupported()) {
52 return hash_string_i_unaligned_crc(arKey, nKeyLength);
54 #endif
55 uint64_t h[2];
56 MurmurHash3::hash128<false>(arKey, nKeyLength, 0, h);
57 return strhash_t(h[0] & STRHASH_MASK);
60 #endif