summaryrefslogtreecommitdiff
path: root/wsutil/ws_mempbrk.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames@darkjames.pl>2014-06-09 23:18:24 +0200
committerAnders Broman <a.broman58@gmail.com>2014-06-10 08:12:43 +0000
commit4571283379857f1a1a783ea037ffaeb5a19562b8 (patch)
treef394f9f6c1be14f01c2e6feb19ff3033f1af7f7d /wsutil/ws_mempbrk.c
parent8878d7778e6fb10bf9e6ce20af16f4e247e51e04 (diff)
downloadwireshark-4571283379857f1a1a783ea037ffaeb5a19562b8.tar.gz
CPUID improvements
- Make ws_cpuid() return boolean when CPUID is support or no, this way it's easier for caller to determinate if it works (and can use cpuinfo[X] or no). - Add function ws_cpuid_sse42(), use it in ws_mempbrk() [cached] & version information. Change-Id: I4e77699f9f3d11bb9b2e8ea599e48d3c5ad84ed7 Reviewed-on: https://code.wireshark.org/review/2088 Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'wsutil/ws_mempbrk.c')
-rw-r--r--wsutil/ws_mempbrk.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/wsutil/ws_mempbrk.c b/wsutil/ws_mempbrk.c
index 0a0656d8ab..c167166689 100644
--- a/wsutil/ws_mempbrk.c
+++ b/wsutil/ws_mempbrk.c
@@ -51,19 +51,16 @@ WS_DLL_PUBLIC const guint8 *
ws_mempbrk(const guint8* haystack, size_t haystacklen, const guint8 *needles)
{
#ifdef HAVE_SSE42
- guint32 CPUInfo[4];
- guint32 bSSE42Extensions;
-
+ static int have_sse42 = -1;
#endif
if (*needles == 0)
return NULL;
#ifdef HAVE_SSE42
- ws_cpuid(CPUInfo, 1);
-
- bSSE42Extensions = (CPUInfo[2] & 0x100000);
+ if G_UNLIKELY(have_sse42 < 0)
+ have_sse42 = ws_cpuid_sse42();
- if (haystacklen >= 16 && bSSE42Extensions)
+ if (haystacklen >= 16 && have_sse42)
return _ws_mempbrk_sse42(haystack, haystacklen, needles);
#endif