summaryrefslogtreecommitdiff
path: root/libhfuzz/instrument.c
diff options
context:
space:
mode:
authorRobert Swiecki <robert@swiecki.net>2017-02-03 02:08:14 +0100
committerRobert Swiecki <robert@swiecki.net>2017-02-03 02:08:14 +0100
commit0ec9811056c4813a61d735f07969c3760610eade (patch)
tree2bf6d9cbaf6e7be3ec71f51f631232fb4e95d9b3 /libhfuzz/instrument.c
parentf5f19844445f1a057a3cad672cda5c3568b3f520 (diff)
downloadhonggfuzz-0ec9811056c4813a61d735f07969c3760610eade.tar.gz
Libhfuzz: get rid of global -msse4.2 for intel
Diffstat (limited to 'libhfuzz/instrument.c')
-rw-r--r--libhfuzz/instrument.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libhfuzz/instrument.c b/libhfuzz/instrument.c
index 1d59b2cc..3bb6073a 100644
--- a/libhfuzz/instrument.c
+++ b/libhfuzz/instrument.c
@@ -17,6 +17,16 @@
#include "../util.h"
+/*
+ * We require SSE4.2 with x86-(32|64) for the 'popcnt', as it's much faster than the software
+ * emulation of gcc/clang
+ */
+#if defined(__x86_64__) || defined(__i386__)
+ #define ATTRIBUTE_X86_REQUIRE_SSE42 __attribute__((__target__("sse4.2")))
+#else
+ #define ATTRIBUTE_X86_REQUIRE_SSE42
+#endif /* defined(__x86_64__) || defined(__i386__) */
+
static feedback_t bbMapFb;
feedback_t *feedback = &bbMapFb;
uint32_t my_thread_no = 0;
@@ -98,6 +108,7 @@ void __sanitizer_cov_trace_pc_indir(void *callee)
}
}
+ATTRIBUTE_X86_REQUIRE_SSE42
void __sanitizer_cov_trace_cmp1(uint8_t Arg1, uint8_t Arg2)
{
uintptr_t pos = (uintptr_t) __builtin_return_address(0) % _HF_PERF_BITMAP_SIZE_16M;
@@ -109,6 +120,7 @@ void __sanitizer_cov_trace_cmp1(uint8_t Arg1, uint8_t Arg2)
}
}
+ATTRIBUTE_X86_REQUIRE_SSE42
void __sanitizer_cov_trace_cmp2(uint16_t Arg1, uint16_t Arg2)
{
uintptr_t pos = (uintptr_t) __builtin_return_address(0) % _HF_PERF_BITMAP_SIZE_16M;
@@ -120,6 +132,7 @@ void __sanitizer_cov_trace_cmp2(uint16_t Arg1, uint16_t Arg2)
}
}
+ATTRIBUTE_X86_REQUIRE_SSE42
void __sanitizer_cov_trace_cmp4(uint32_t Arg1, uint32_t Arg2)
{
uintptr_t pos = (uintptr_t) __builtin_return_address(0) % _HF_PERF_BITMAP_SIZE_16M;
@@ -131,6 +144,7 @@ void __sanitizer_cov_trace_cmp4(uint32_t Arg1, uint32_t Arg2)
}
}
+ATTRIBUTE_X86_REQUIRE_SSE42
void __sanitizer_cov_trace_cmp8(uint64_t Arg1, uint64_t Arg2)
{
uintptr_t pos = (uintptr_t) __builtin_return_address(0) % _HF_PERF_BITMAP_SIZE_16M;
@@ -146,6 +160,7 @@ void __sanitizer_cov_trace_cmp8(uint64_t Arg1, uint64_t Arg2)
* Cases[0] is number of comparison entries
* Cases[1] is length of Val in bits
*/
+ATTRIBUTE_X86_REQUIRE_SSE42
void __sanitizer_cov_trace_switch(uint64_t Val, uint64_t * Cases)
{
for (uint64_t i = 0; i < Cases[0]; i++) {