code format

This commit is contained in:
vanhauser-thc
2024-02-08 15:13:46 +01:00
parent eaf4a29930
commit 369fce9c85
13 changed files with 6781 additions and 5567 deletions

View File

@ -2,17 +2,15 @@
## Must ## Must
- UI revamp
- hardened_usercopy=0 page_alloc.shuffle=0 - hardened_usercopy=0 page_alloc.shuffle=0
- add value_profile but only enable after 15 minutes without finds - add value_profile but only enable after 15 minutes without finds
- cmplog max len, cmplog max items envs? - cmplog max items env?
- adapt MOpt to new mutation engine - adapt MOpt to new mutation engine
- Update afl->pending_not_fuzzed for MOpt - Update afl->pending_not_fuzzed for MOpt
- cmplog rtn sanity check on fixed length? currently we ignore the length - cmplog rtn sanity check on fixed length? currently we ignore the length
- afl-showmap -f support - afl-showmap -f support
- afl-fuzz multicore wrapper script - afl-fuzz multicore wrapper script
- when trimming then perform crash detection - when trimming then perform crash detection
- problem: either -L0 and/or -p mmopt results in zero new coverage
## Should ## Should

View File

@ -4,13 +4,31 @@
release of the tool. See README.md for the general instruction manual. release of the tool. See README.md for the general instruction manual.
### Version ++4.20a (dev) ### Version ++4.20a (dev)
! A new forkserver communication model is now introduced. afl-fuzz is
backward compatible to old compiled targets if they are not built
for CMPLOG/Redqueen, but new compiled targets will not work with
old afl-fuzz versions!
! Recompiled all targets that are instrumented for CMPLOG/Redqueen!
- AFL++ now supports up to 4 billion coverage edges, up from 6 million.
- New compile option: `make PERFORMANCE=1` - this will enable special
CPU dependent optimizations that make everything more performant - but
the binaries will likely won't work on different platforms. Also
enables a faster hasher if the CPU requirements are met.
- The persistent record feature (see config.h) was expanded to also
support replay, thanks to @quarta-qti !
- afl-fuzz: - afl-fuzz:
- the new deterministic fuzzing feature is now activated by default, - the new deterministic fuzzing feature is now activated by default,
deactivate with -z. Parameters -d and -D are ignored. deactivate with -z. Parameters -d and -D are ignored.
- small improvements to CMPLOG/redqueen
- workround for a bug with MOpt -L when used with -M - in the future
we will either remove or rewrite MOpt.
- afl-cc: - afl-cc:
- added collision free caller instrumentation to LTO mode. activate with - added collision free caller instrumentation to LTO mode. activate with
`AFL_LLVM_LTO_CALLER=1`. You can set a max depth to go through single `AFL_LLVM_LTO_CALLER=1`. You can set a max depth to go through single
block functions with `AFL_LLVM_LTO_CALLER_DEPTH` (default 0) block functions with `AFL_LLVM_LTO_CALLER_DEPTH` (default 0)
- Minor edits to afl-persistent-config
- Prevent temporary files being left behind on aborted afl-whatsup
- More CPU benchmarks added to benchmark/
### Version ++4.10c (release) ### Version ++4.10c (release)

View File

@ -41,13 +41,12 @@
#define CMP_TYPE_INS 0 #define CMP_TYPE_INS 0
#define CMP_TYPE_RTN 1 #define CMP_TYPE_RTN 1
struct cmp_header { struct cmp_header { // 16 bit = 2 bytes
unsigned hits : 6; // up to 63 entries, we have CMP_MAP_H = 32 unsigned hits : 6; // up to 63 entries, we have CMP_MAP_H = 32
unsigned shape : 5; // 31+1 bytes unsigned shape : 5; // 31+1 bytes max
unsigned type : 1; // 4, we use 3: none, rtn, cmp unsigned type : 1; // 2: cmp, rtn
unsigned attribute : 4; // 16 for arithmetic comparison types unsigned attribute : 4; // 16 for arithmetic comparison types
//unsigned reserved : 6;
} __attribute__((packed)); } __attribute__((packed));

View File

@ -64,6 +64,8 @@ static char *afl_environment_variables[] = {
"AFL_REAL_LD", "AFL_LD_PRELOAD", "AFL_LD_VERBOSE", "AFL_LLVM_ALLOWLIST", "AFL_REAL_LD", "AFL_LD_PRELOAD", "AFL_LD_VERBOSE", "AFL_LLVM_ALLOWLIST",
"AFL_LLVM_DENYLIST", "AFL_LLVM_BLOCKLIST", "AFL_CMPLOG", "AFL_LLVM_CMPLOG", "AFL_LLVM_DENYLIST", "AFL_LLVM_BLOCKLIST", "AFL_CMPLOG", "AFL_LLVM_CMPLOG",
"AFL_GCC_CMPLOG", "AFL_LLVM_INSTRIM", "AFL_LLVM_CALLER", "AFL_LLVM_CTX", "AFL_GCC_CMPLOG", "AFL_LLVM_INSTRIM", "AFL_LLVM_CALLER", "AFL_LLVM_CTX",
"AFL_LLVM_LTO_CALLER", "AFL_LLVM_LTO_CTX", "AFL_LLVM_LTO_CALLER_DEPTH",
"AFL_LLVM_LTO_CTX_DEPTH", "AFL_LLVM_CALLER_DEPTH", "AFL_LLVM_CTX_DEPTH",
"AFL_LLVM_CTX_K", "AFL_LLVM_DICT2FILE", "AFL_LLVM_DICT2FILE_NO_MAIN", "AFL_LLVM_CTX_K", "AFL_LLVM_DICT2FILE", "AFL_LLVM_DICT2FILE_NO_MAIN",
"AFL_LLVM_DOCUMENT_IDS", "AFL_LLVM_INSTRIM_LOOPHEAD", "AFL_LLVM_INSTRUMENT", "AFL_LLVM_DOCUMENT_IDS", "AFL_LLVM_INSTRIM_LOOPHEAD", "AFL_LLVM_INSTRUMENT",
"AFL_LLVM_LTO_AUTODICTIONARY", "AFL_LLVM_AUTODICTIONARY", "AFL_LLVM_LTO_AUTODICTIONARY", "AFL_LLVM_AUTODICTIONARY",

View File

@ -172,56 +172,56 @@
#define T1HA_VERSION_RELEASE 1 #define T1HA_VERSION_RELEASE 1
#ifndef __has_attribute #ifndef __has_attribute
#define __has_attribute(x) (0) #define __has_attribute(x) (0)
#endif #endif
#ifndef __has_include #ifndef __has_include
#define __has_include(x) (0) #define __has_include(x) (0)
#endif #endif
#ifndef __GNUC_PREREQ #ifndef __GNUC_PREREQ
#if defined(__GNUC__) && defined(__GNUC_MINOR__) #if defined(__GNUC__) && defined(__GNUC_MINOR__)
#define __GNUC_PREREQ(maj, min) \ #define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
#else #else
#define __GNUC_PREREQ(maj, min) 0 #define __GNUC_PREREQ(maj, min) 0
#endif #endif
#endif /* __GNUC_PREREQ */ #endif /* __GNUC_PREREQ */
#ifndef __CLANG_PREREQ #ifndef __CLANG_PREREQ
#ifdef __clang__ #ifdef __clang__
#define __CLANG_PREREQ(maj, min) \ #define __CLANG_PREREQ(maj, min) \
((__clang_major__ << 16) + __clang_minor__ >= ((maj) << 16) + (min)) ((__clang_major__ << 16) + __clang_minor__ >= ((maj) << 16) + (min))
#else #else
#define __CLANG_PREREQ(maj, min) (0) #define __CLANG_PREREQ(maj, min) (0)
#endif #endif
#endif /* __CLANG_PREREQ */ #endif /* __CLANG_PREREQ */
#ifndef __LCC_PREREQ #ifndef __LCC_PREREQ
#ifdef __LCC__ #ifdef __LCC__
#define __LCC_PREREQ(maj, min) \ #define __LCC_PREREQ(maj, min) \
((__LCC__ << 16) + __LCC_MINOR__ >= ((maj) << 16) + (min)) ((__LCC__ << 16) + __LCC_MINOR__ >= ((maj) << 16) + (min))
#else #else
#define __LCC_PREREQ(maj, min) (0) #define __LCC_PREREQ(maj, min) (0)
#endif #endif
#endif /* __LCC_PREREQ */ #endif /* __LCC_PREREQ */
/*****************************************************************************/ /*****************************************************************************/
#ifdef _MSC_VER #ifdef _MSC_VER
/* Avoid '16' bytes padding added after data member 't1ha_context::total' /* Avoid '16' bytes padding added after data member 't1ha_context::total'
* and other warnings from std-headers if warning-level > 3. */ * and other warnings from std-headers if warning-level > 3. */
#pragma warning(push, 3) #pragma warning(push, 3)
#endif #endif
#if defined(__cplusplus) && __cplusplus >= 201103L #if defined(__cplusplus) && __cplusplus >= 201103L
#include <climits> #include <climits>
#include <cstddef> #include <cstddef>
#include <cstdint> #include <cstdint>
#else #else
#include <limits.h> #include <limits.h>
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
#endif #endif
/*****************************************************************************/ /*****************************************************************************/
@ -234,18 +234,18 @@
defined(__INTEL__) || defined(__x86_64) || defined(__x86_64__) || \ defined(__INTEL__) || defined(__x86_64) || defined(__x86_64__) || \
defined(__amd64__) || defined(__amd64) || defined(_M_X64) || \ defined(__amd64__) || defined(__amd64) || defined(_M_X64) || \
defined(_M_AMD64) || defined(__IA32__) || defined(__INTEL__) defined(_M_AMD64) || defined(__IA32__) || defined(__INTEL__)
#ifndef __ia32__ #ifndef __ia32__
/* LY: define neutral __ia32__ for x86 and x86-64 archs */ /* LY: define neutral __ia32__ for x86 and x86-64 archs */
#define __ia32__ 1 #define __ia32__ 1
#endif /* __ia32__ */ #endif /* __ia32__ */
#if !defined(__amd64__) && (defined(__x86_64) || defined(__x86_64__) || \ #if !defined(__amd64__) && (defined(__x86_64) || defined(__x86_64__) || \
defined(__amd64) || defined(_M_X64)) defined(__amd64) || defined(_M_X64))
/* LY: define trusty __amd64__ for all AMD64/x86-64 arch */ /* LY: define trusty __amd64__ for all AMD64/x86-64 arch */
#define __amd64__ 1 #define __amd64__ 1
#endif /* __amd64__ */ #endif /* __amd64__ */
#endif /* all x86 */ #endif /* all x86 */
#if !defined(__BYTE_ORDER__) || !defined(__ORDER_LITTLE_ENDIAN__) || \ #if !defined(__BYTE_ORDER__) || !defined(__ORDER_LITTLE_ENDIAN__) || \
!defined(__ORDER_BIG_ENDIAN__) !defined(__ORDER_BIG_ENDIAN__)
/* *INDENT-OFF* */ /* *INDENT-OFF* */
@ -267,160 +267,168 @@
defined(__NETBSD__) || defined(__NetBSD__) || \ defined(__NETBSD__) || defined(__NetBSD__) || \
defined(HAVE_SYS_PARAM_H) || __has_include(<sys/param.h>) defined(HAVE_SYS_PARAM_H) || __has_include(<sys/param.h>)
#include <sys/param.h> #include <sys/param.h>
#endif /* OS */ #endif /* OS */
/* *INDENT-ON* */ /* *INDENT-ON* */
/* clang-format on */ /* clang-format on */
#if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN) #if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN)
#define __ORDER_LITTLE_ENDIAN__ __LITTLE_ENDIAN #define __ORDER_LITTLE_ENDIAN__ __LITTLE_ENDIAN
#define __ORDER_BIG_ENDIAN__ __BIG_ENDIAN #define __ORDER_BIG_ENDIAN__ __BIG_ENDIAN
#define __BYTE_ORDER__ __BYTE_ORDER #define __BYTE_ORDER__ __BYTE_ORDER
#elif defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) #elif defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN)
#define __ORDER_LITTLE_ENDIAN__ _LITTLE_ENDIAN #define __ORDER_LITTLE_ENDIAN__ _LITTLE_ENDIAN
#define __ORDER_BIG_ENDIAN__ _BIG_ENDIAN #define __ORDER_BIG_ENDIAN__ _BIG_ENDIAN
#define __BYTE_ORDER__ _BYTE_ORDER #define __BYTE_ORDER__ _BYTE_ORDER
#else #else
#define __ORDER_LITTLE_ENDIAN__ 1234 #define __ORDER_LITTLE_ENDIAN__ 1234
#define __ORDER_BIG_ENDIAN__ 4321 #define __ORDER_BIG_ENDIAN__ 4321
#if defined(__LITTLE_ENDIAN__) || \ #if defined(__LITTLE_ENDIAN__) || \
(defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \ (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \
defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \ defined(__ARMEL__) || defined(__THUMBEL__) || \
defined(__MIPSEL__) || defined(_MIPSEL) || defined(__MIPSEL) || \ defined(__AARCH64EL__) || defined(__MIPSEL__) || defined(_MIPSEL) || \
defined(_M_ARM) || defined(_M_ARM64) || defined(__e2k__) || \ defined(__MIPSEL) || defined(_M_ARM) || defined(_M_ARM64) || \
defined(__elbrus_4c__) || defined(__elbrus_8c__) || defined(__bfin__) || \ defined(__e2k__) || defined(__elbrus_4c__) || \
defined(__BFIN__) || defined(__ia64__) || defined(_IA64) || \ defined(__elbrus_8c__) || defined(__bfin__) || defined(__BFIN__) || \
defined(__IA64__) || defined(__ia64) || defined(_M_IA64) || \ defined(__ia64__) || defined(_IA64) || defined(__IA64__) || \
defined(__itanium__) || defined(__ia32__) || defined(__CYGWIN__) || \ defined(__ia64) || defined(_M_IA64) || defined(__itanium__) || \
defined(_WIN64) || defined(_WIN32) || defined(__TOS_WIN__) || \ defined(__ia32__) || defined(__CYGWIN__) || defined(_WIN64) || \
defined(__WINDOWS__) defined(_WIN32) || defined(__TOS_WIN__) || defined(__WINDOWS__)
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#elif defined(__BIG_ENDIAN__) || \ #elif defined(__BIG_ENDIAN__) || \
(defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \ (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \
defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ defined(__ARMEB__) || defined(__THUMBEB__) || \
defined(__MIPSEB__) || defined(_MIPSEB) || defined(__MIPSEB) || \ defined(__AARCH64EB__) || defined(__MIPSEB__) || defined(_MIPSEB) || \
defined(__m68k__) || defined(M68000) || defined(__hppa__) || \ defined(__MIPSEB) || defined(__m68k__) || defined(M68000) || \
defined(__hppa) || defined(__HPPA__) || defined(__sparc__) || \ defined(__hppa__) || defined(__hppa) || defined(__HPPA__) || \
defined(__sparc) || defined(__370__) || defined(__THW_370__) || \ defined(__sparc__) || defined(__sparc) || defined(__370__) || \
defined(__s390__) || defined(__s390x__) || defined(__SYSC_ZARCH__) defined(__THW_370__) || defined(__s390__) || defined(__s390x__) || \
#define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__ defined(__SYSC_ZARCH__)
#define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__
#else #else
#error __BYTE_ORDER__ should be defined. #error __BYTE_ORDER__ should be defined.
#endif /* Arch */ #endif /* Arch */
#endif #endif
#endif /* __BYTE_ORDER__ || __ORDER_LITTLE_ENDIAN__ || __ORDER_BIG_ENDIAN__ */ #endif /* __BYTE_ORDER__ || __ORDER_LITTLE_ENDIAN__ || __ORDER_BIG_ENDIAN__ */
/*****************************************************************************/ /*****************************************************************************/
#ifndef __dll_export #ifndef __dll_export
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
#if defined(__GNUC__) || __has_attribute(dllexport) #if defined(__GNUC__) || __has_attribute(dllexport)
#define __dll_export __attribute__((dllexport)) #define __dll_export __attribute__((dllexport))
#else #else
#define __dll_export __declspec(dllexport) #define __dll_export __declspec(dllexport)
#endif #endif
#elif defined(__GNUC__) || __has_attribute(__visibility__) #elif defined(__GNUC__) || __has_attribute(__visibility__)
#define __dll_export __attribute__((__visibility__("default"))) #define __dll_export __attribute__((__visibility__("default")))
#else #else
#define __dll_export #define __dll_export
#endif #endif
#endif /* __dll_export */ #endif /* __dll_export */
#ifndef __dll_import #ifndef __dll_import
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__) #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
#if defined(__GNUC__) || __has_attribute(dllimport) #if defined(__GNUC__) || __has_attribute(dllimport)
#define __dll_import __attribute__((dllimport)) #define __dll_import __attribute__((dllimport))
#else #else
#define __dll_import __declspec(dllimport) #define __dll_import __declspec(dllimport)
#endif #endif
#elif defined(__GNUC__) || __has_attribute(__visibility__) #elif defined(__GNUC__) || __has_attribute(__visibility__)
#define __dll_import __attribute__((__visibility__("default"))) #define __dll_import __attribute__((__visibility__("default")))
#else #else
#define __dll_import #define __dll_import
#endif #endif
#endif /* __dll_import */ #endif /* __dll_import */
#ifndef __force_inline #ifndef __force_inline
#ifdef _MSC_VER #ifdef _MSC_VER
#define __force_inline __forceinline #define __force_inline __forceinline
#elif __GNUC_PREREQ(3, 2) || __has_attribute(__always_inline__) #elif __GNUC_PREREQ(3, 2) || __has_attribute(__always_inline__)
#define __force_inline __inline __attribute__((__always_inline__)) #define __force_inline __inline __attribute__((__always_inline__))
#else #else
#define __force_inline __inline #define __force_inline __inline
#endif #endif
#endif /* __force_inline */ #endif /* __force_inline */
#ifndef T1HA_API #ifndef T1HA_API
#if defined(t1ha_EXPORTS) #if defined(t1ha_EXPORTS)
#define T1HA_API __dll_export #define T1HA_API __dll_export
#elif defined(t1ha_IMPORTS) #elif defined(t1ha_IMPORTS)
#define T1HA_API __dll_import #define T1HA_API __dll_import
#else #else
#define T1HA_API #define T1HA_API
#endif #endif
#endif /* T1HA_API */ #endif /* T1HA_API */
#if defined(_MSC_VER) && defined(__ia32__) #if defined(_MSC_VER) && defined(__ia32__)
#define T1HA_ALIGN_PREFIX __declspec(align(32)) /* required only for SIMD */ #define T1HA_ALIGN_PREFIX __declspec(align(32)) /* required only for SIMD */
#else #else
#define T1HA_ALIGN_PREFIX #define T1HA_ALIGN_PREFIX
#endif /* _MSC_VER */ #endif /* _MSC_VER */
#if defined(__GNUC__) && defined(__ia32__) #if defined(__GNUC__) && defined(__ia32__)
#define T1HA_ALIGN_SUFFIX \ #define T1HA_ALIGN_SUFFIX \
__attribute__((__aligned__(32))) /* required only for SIMD */ __attribute__((__aligned__(32))) /* required only for SIMD */
#else #else
#define T1HA_ALIGN_SUFFIX #define T1HA_ALIGN_SUFFIX
#endif /* GCC x86 */ #endif /* GCC x86 */
#ifndef T1HA_USE_INDIRECT_FUNCTIONS #ifndef T1HA_USE_INDIRECT_FUNCTIONS
/* GNU ELF indirect functions usage control. For more info please see /* GNU ELF indirect functions usage control. For more info please see
* https://en.wikipedia.org/wiki/Executable_and_Linkable_Format * https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
* and https://sourceware.org/glibc/wiki/GNU_IFUNC */ * and https://sourceware.org/glibc/wiki/GNU_IFUNC */
#if defined(__ELF__) && defined(__amd64__) && \ #if defined(__ELF__) && defined(__amd64__) && \
(__has_attribute(__ifunc__) || \ (__has_attribute(__ifunc__) || \
(!defined(__clang__) && defined(__GNUC__) && __GNUC__ >= 4 && \ (!defined(__clang__) && defined(__GNUC__) && __GNUC__ >= 4 && \
!defined(__SANITIZE_ADDRESS__) && !defined(__SSP_ALL__))) !defined(__SANITIZE_ADDRESS__) && !defined(__SSP_ALL__)))
/* Enable gnu_indirect_function by default if : /* Enable gnu_indirect_function by default if :
* - ELF AND x86_64 * - ELF AND x86_64
* - attribute(__ifunc__) is available OR * - attribute(__ifunc__) is available OR
* GCC >= 4 WITHOUT -fsanitize=address NOR -fstack-protector-all */ * GCC >= 4 WITHOUT -fsanitize=address NOR -fstack-protector-all */
#define T1HA_USE_INDIRECT_FUNCTIONS 1 #define T1HA_USE_INDIRECT_FUNCTIONS 1
#else #else
#define T1HA_USE_INDIRECT_FUNCTIONS 0 #define T1HA_USE_INDIRECT_FUNCTIONS 0
#endif #endif
#endif /* T1HA_USE_INDIRECT_FUNCTIONS */ #endif /* T1HA_USE_INDIRECT_FUNCTIONS */
#if __GNUC_PREREQ(4, 0) #if __GNUC_PREREQ(4, 0)
#pragma GCC visibility push(hidden) #pragma GCC visibility push(hidden)
#endif /* __GNUC_PREREQ(4,0) */ #endif /* __GNUC_PREREQ(4,0) */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
typedef union T1HA_ALIGN_PREFIX t1ha_state256 { typedef union T1HA_ALIGN_PREFIX t1ha_state256 {
uint8_t bytes[32];
uint8_t bytes[32];
uint32_t u32[8]; uint32_t u32[8];
uint64_t u64[4]; uint64_t u64[4];
struct { struct {
uint64_t a, b, c, d; uint64_t a, b, c, d;
} n; } n;
} t1ha_state256_t T1HA_ALIGN_SUFFIX; } t1ha_state256_t T1HA_ALIGN_SUFFIX;
typedef struct t1ha_context { typedef struct t1ha_context {
t1ha_state256_t state; t1ha_state256_t state;
t1ha_state256_t buffer; t1ha_state256_t buffer;
size_t partial; size_t partial;
uint64_t total; uint64_t total;
} t1ha_context_t; } t1ha_context_t;
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(pop) #pragma warning(pop)
#endif #endif
/****************************************************************************** /******************************************************************************
@ -443,37 +451,37 @@ T1HA_API int t1ha_selfcheck__t1ha2_atonce(void);
T1HA_API int t1ha_selfcheck__t1ha2_atonce128(void); T1HA_API int t1ha_selfcheck__t1ha2_atonce128(void);
T1HA_API int t1ha_selfcheck__t1ha2_stream(void); T1HA_API int t1ha_selfcheck__t1ha2_stream(void);
T1HA_API int t1ha_selfcheck__t1ha2(void); T1HA_API int t1ha_selfcheck__t1ha2(void);
#endif /* T1HA2_DISABLED */ #endif /* T1HA2_DISABLED */
#ifndef T1HA1_DISABLED #ifndef T1HA1_DISABLED
T1HA_API int t1ha_selfcheck__t1ha1_le(void); T1HA_API int t1ha_selfcheck__t1ha1_le(void);
T1HA_API int t1ha_selfcheck__t1ha1_be(void); T1HA_API int t1ha_selfcheck__t1ha1_be(void);
T1HA_API int t1ha_selfcheck__t1ha1(void); T1HA_API int t1ha_selfcheck__t1ha1(void);
#endif /* T1HA1_DISABLED */ #endif /* T1HA1_DISABLED */
#ifndef T1HA0_DISABLED #ifndef T1HA0_DISABLED
T1HA_API int t1ha_selfcheck__t1ha0_32le(void); T1HA_API int t1ha_selfcheck__t1ha0_32le(void);
T1HA_API int t1ha_selfcheck__t1ha0_32be(void); T1HA_API int t1ha_selfcheck__t1ha0_32be(void);
T1HA_API int t1ha_selfcheck__t1ha0(void); T1HA_API int t1ha_selfcheck__t1ha0(void);
/* Define T1HA0_AESNI_AVAILABLE to 0 for disable AES-NI support. */ /* Define T1HA0_AESNI_AVAILABLE to 0 for disable AES-NI support. */
#ifndef T1HA0_AESNI_AVAILABLE #ifndef T1HA0_AESNI_AVAILABLE
#if defined(__e2k__) || \ #if defined(__e2k__) || \
(defined(__ia32__) && (!defined(_M_IX86) || _MSC_VER > 1800)) (defined(__ia32__) && (!defined(_M_IX86) || _MSC_VER > 1800))
#define T1HA0_AESNI_AVAILABLE 1 #define T1HA0_AESNI_AVAILABLE 1
#else #else
#define T1HA0_AESNI_AVAILABLE 0 #define T1HA0_AESNI_AVAILABLE 0
#endif #endif
#endif /* ifndef T1HA0_AESNI_AVAILABLE */ #endif /* ifndef T1HA0_AESNI_AVAILABLE */
#if T1HA0_AESNI_AVAILABLE #if T1HA0_AESNI_AVAILABLE
T1HA_API int t1ha_selfcheck__t1ha0_ia32aes_noavx(void); T1HA_API int t1ha_selfcheck__t1ha0_ia32aes_noavx(void);
T1HA_API int t1ha_selfcheck__t1ha0_ia32aes_avx(void); T1HA_API int t1ha_selfcheck__t1ha0_ia32aes_avx(void);
#ifndef __e2k__ #ifndef __e2k__
T1HA_API int t1ha_selfcheck__t1ha0_ia32aes_avx2(void); T1HA_API int t1ha_selfcheck__t1ha0_ia32aes_avx2(void);
#endif #endif
#endif /* if T1HA0_AESNI_AVAILABLE */ #endif /* if T1HA0_AESNI_AVAILABLE */
#endif /* T1HA0_DISABLED */ #endif /* T1HA0_DISABLED */
/****************************************************************************** /******************************************************************************
* *
@ -521,7 +529,7 @@ T1HA_API void t1ha2_update(t1ha_context_t *__restrict ctx,
T1HA_API uint64_t t1ha2_final(t1ha_context_t *__restrict ctx, T1HA_API uint64_t t1ha2_final(t1ha_context_t *__restrict ctx,
uint64_t *__restrict extra_result /* optional */); uint64_t *__restrict extra_result /* optional */);
#endif /* T1HA2_DISABLED */ #endif /* T1HA2_DISABLED */
/****************************************************************************** /******************************************************************************
* *
@ -546,7 +554,7 @@ T1HA_API uint64_t t1ha1_le(const void *data, size_t length, uint64_t seed);
/* The big-endian variant. */ /* The big-endian variant. */
T1HA_API uint64_t t1ha1_be(const void *data, size_t length, uint64_t seed); T1HA_API uint64_t t1ha1_be(const void *data, size_t length, uint64_t seed);
#endif /* T1HA1_DISABLED */ #endif /* T1HA1_DISABLED */
/****************************************************************************** /******************************************************************************
* *
@ -589,131 +597,142 @@ uint64_t t1ha0_32le(const void *data, size_t length, uint64_t seed);
/* The big-endian variant for 32-bit CPU. */ /* The big-endian variant for 32-bit CPU. */
uint64_t t1ha0_32be(const void *data, size_t length, uint64_t seed); uint64_t t1ha0_32be(const void *data, size_t length, uint64_t seed);
/* Define T1HA0_AESNI_AVAILABLE to 0 for disable AES-NI support. */ /* Define T1HA0_AESNI_AVAILABLE to 0 for disable AES-NI support. */
#ifndef T1HA0_AESNI_AVAILABLE #ifndef T1HA0_AESNI_AVAILABLE
#if defined(__e2k__) || \ #if defined(__e2k__) || \
(defined(__ia32__) && (!defined(_M_IX86) || _MSC_VER > 1800)) (defined(__ia32__) && (!defined(_M_IX86) || _MSC_VER > 1800))
#define T1HA0_AESNI_AVAILABLE 1 #define T1HA0_AESNI_AVAILABLE 1
#else #else
#define T1HA0_AESNI_AVAILABLE 0 #define T1HA0_AESNI_AVAILABLE 0
#endif #endif
#endif /* T1HA0_AESNI_AVAILABLE */ #endif /* T1HA0_AESNI_AVAILABLE */
/* Define T1HA0_RUNTIME_SELECT to 0 for disable dispatching t1ha0 at runtime. */ /* Define T1HA0_RUNTIME_SELECT to 0 for disable dispatching t1ha0 at runtime.
#ifndef T1HA0_RUNTIME_SELECT */
#if T1HA0_AESNI_AVAILABLE && !defined(__e2k__) #ifndef T1HA0_RUNTIME_SELECT
#define T1HA0_RUNTIME_SELECT 1 #if T1HA0_AESNI_AVAILABLE && !defined(__e2k__)
#else #define T1HA0_RUNTIME_SELECT 1
#define T1HA0_RUNTIME_SELECT 0 #else
#endif #define T1HA0_RUNTIME_SELECT 0
#endif /* T1HA0_RUNTIME_SELECT */ #endif
#endif /* T1HA0_RUNTIME_SELECT */
#if !T1HA0_RUNTIME_SELECT && !defined(T1HA0_USE_DEFINE) #if !T1HA0_RUNTIME_SELECT && !defined(T1HA0_USE_DEFINE)
#if defined(__LCC__) #if defined(__LCC__)
#define T1HA0_USE_DEFINE 1 #define T1HA0_USE_DEFINE 1
#else #else
#define T1HA0_USE_DEFINE 0 #define T1HA0_USE_DEFINE 0
#endif #endif
#endif /* T1HA0_USE_DEFINE */ #endif /* T1HA0_USE_DEFINE */
#if T1HA0_AESNI_AVAILABLE #if T1HA0_AESNI_AVAILABLE
uint64_t t1ha0_ia32aes_noavx(const void *data, size_t length, uint64_t seed); uint64_t t1ha0_ia32aes_noavx(const void *data, size_t length, uint64_t seed);
uint64_t t1ha0_ia32aes_avx(const void *data, size_t length, uint64_t seed); uint64_t t1ha0_ia32aes_avx(const void *data, size_t length, uint64_t seed);
#ifndef __e2k__ #ifndef __e2k__
uint64_t t1ha0_ia32aes_avx2(const void *data, size_t length, uint64_t seed); uint64_t t1ha0_ia32aes_avx2(const void *data, size_t length, uint64_t seed);
#endif #endif
#endif /* T1HA0_AESNI_AVAILABLE */ #endif /* T1HA0_AESNI_AVAILABLE */
#if T1HA0_RUNTIME_SELECT #if T1HA0_RUNTIME_SELECT
typedef uint64_t (*t1ha0_function_t)(const void *, size_t, uint64_t); typedef uint64_t (*t1ha0_function_t)(const void *, size_t, uint64_t);
T1HA_API t1ha0_function_t t1ha0_resolve(void); T1HA_API t1ha0_function_t t1ha0_resolve(void);
#if T1HA_USE_INDIRECT_FUNCTIONS #if T1HA_USE_INDIRECT_FUNCTIONS
T1HA_API uint64_t t1ha0(const void *data, size_t length, uint64_t seed); T1HA_API uint64_t t1ha0(const void *data, size_t length, uint64_t seed);
#else #else
/* Otherwise function pointer will be used. /* Otherwise function pointer will be used.
* Unfortunately this may cause some overhead calling. */ * Unfortunately this may cause some overhead calling. */
T1HA_API extern uint64_t (*t1ha0_funcptr)(const void *data, size_t length, T1HA_API extern uint64_t (*t1ha0_funcptr)(const void *data, size_t length,
uint64_t seed); uint64_t seed);
static __force_inline uint64_t t1ha0(const void *data, size_t length, static __force_inline uint64_t t1ha0(const void *data, size_t length,
uint64_t seed) { uint64_t seed) {
return t1ha0_funcptr(data, length, seed); return t1ha0_funcptr(data, length, seed);
} }
#endif /* T1HA_USE_INDIRECT_FUNCTIONS */
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ #endif /* T1HA_USE_INDIRECT_FUNCTIONS */
#if T1HA0_USE_DEFINE #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \ #if T1HA0_USE_DEFINE
(!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED))
#if defined(T1HA1_DISABLED)
#define t1ha0 t1ha2_atonce
#else
#define t1ha0 t1ha1_be
#endif /* T1HA1_DISABLED */
#else /* 32/64 */
#define t1ha0 t1ha0_32be
#endif /* 32/64 */
#else /* T1HA0_USE_DEFINE */ #if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \
(!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED))
#if defined(T1HA1_DISABLED)
#define t1ha0 t1ha2_atonce
#else
#define t1ha0 t1ha1_be
#endif /* T1HA1_DISABLED */
#else /* 32/64 */
#define t1ha0 t1ha0_32be
#endif /* 32/64 */
#else /* T1HA0_USE_DEFINE */
static __force_inline uint64_t t1ha0(const void *data, size_t length, static __force_inline uint64_t t1ha0(const void *data, size_t length,
uint64_t seed) { uint64_t seed) {
#if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \
(!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED)) #if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \
#if defined(T1HA1_DISABLED) (!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED))
#if defined(T1HA1_DISABLED)
return t1ha2_atonce(data, length, seed); return t1ha2_atonce(data, length, seed);
#else #else
return t1ha1_be(data, length, seed); return t1ha1_be(data, length, seed);
#endif /* T1HA1_DISABLED */ #endif /* T1HA1_DISABLED */
#else /* 32/64 */ #else /* 32/64 */
return t1ha0_32be(data, length, seed); return t1ha0_32be(data, length, seed);
#endif /* 32/64 */ #endif /* 32/64 */
} }
#endif /* !T1HA0_USE_DEFINE */ #endif /* !T1HA0_USE_DEFINE */
#else /* !T1HA0_RUNTIME_SELECT && __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ */ #else /* !T1HA0_RUNTIME_SELECT && __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ */
#if T1HA0_USE_DEFINE #if T1HA0_USE_DEFINE
#if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \ #if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \
(!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED)) (!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED))
#if defined(T1HA1_DISABLED) #if defined(T1HA1_DISABLED)
#define t1ha0 t1ha2_atonce #define t1ha0 t1ha2_atonce
#else #else
#define t1ha0 t1ha1_le #define t1ha0 t1ha1_le
#endif /* T1HA1_DISABLED */ #endif /* T1HA1_DISABLED */
#else /* 32/64 */ #else /* 32/64 */
#define t1ha0 t1ha0_32le #define t1ha0 t1ha0_32le
#endif /* 32/64 */ #endif /* 32/64 */
#else #else
static __force_inline uint64_t t1ha0(const void *data, size_t length, static __force_inline uint64_t t1ha0(const void *data, size_t length,
uint64_t seed) { uint64_t seed) {
#if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \
(!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED)) #if (UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul) && \
#if defined(T1HA1_DISABLED) (!defined(T1HA1_DISABLED) || !defined(T1HA2_DISABLED))
#if defined(T1HA1_DISABLED)
return t1ha2_atonce(data, length, seed); return t1ha2_atonce(data, length, seed);
#else #else
return t1ha1_le(data, length, seed); return t1ha1_le(data, length, seed);
#endif /* T1HA1_DISABLED */ #endif /* T1HA1_DISABLED */
#else /* 32/64 */ #else /* 32/64 */
return t1ha0_32le(data, length, seed); return t1ha0_32le(data, length, seed);
#endif /* 32/64 */ #endif /* 32/64 */
} }
#endif /* !T1HA0_USE_DEFINE */ #endif /* !T1HA0_USE_DEFINE */
#endif /* !T1HA0_RUNTIME_SELECT */ #endif /* !T1HA0_RUNTIME_SELECT */
#endif /* T1HA0_DISABLED */ #endif /* T1HA0_DISABLED */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#if __GNUC_PREREQ(4, 0) #if __GNUC_PREREQ(4, 0)
#pragma GCC visibility pop #pragma GCC visibility pop
#endif /* __GNUC_PREREQ(4,0) */ #endif /* __GNUC_PREREQ(4,0) */

View File

@ -47,27 +47,34 @@
#if T1HA0_AESNI_AVAILABLE #if T1HA0_AESNI_AVAILABLE
uint64_t T1HA_IA32AES_NAME(const void *data, uint32_t len) { uint64_t T1HA_IA32AES_NAME(const void *data, uint32_t len) {
uint64_t a = 0; uint64_t a = 0;
uint64_t b = len; uint64_t b = len;
if (likely(len > 32)) { if (likely(len > 32)) {
__m128i x = _mm_set_epi64x(a, b); __m128i x = _mm_set_epi64x(a, b);
__m128i y = _mm_aesenc_si128(x, _mm_set_epi64x(prime_0, prime_1)); __m128i y = _mm_aesenc_si128(x, _mm_set_epi64x(prime_0, prime_1));
const __m128i *v = (const __m128i *)data; const __m128i *v = (const __m128i *)data;
const __m128i *const detent = const __m128i *const detent =
(const __m128i *)((const uint8_t *)data + (len & ~15ul)); (const __m128i *)((const uint8_t *)data + (len & ~15ul));
data = detent; data = detent;
if (len & 16) { if (len & 16) {
x = _mm_add_epi64(x, _mm_loadu_si128(v++)); x = _mm_add_epi64(x, _mm_loadu_si128(v++));
y = _mm_aesenc_si128(x, y); y = _mm_aesenc_si128(x, y);
} }
len &= 15; len &= 15;
if (v + 7 < detent) { if (v + 7 < detent) {
__m128i salt = y; __m128i salt = y;
do { do {
__m128i t = _mm_aesenc_si128(_mm_loadu_si128(v++), salt); __m128i t = _mm_aesenc_si128(_mm_loadu_si128(v++), salt);
t = _mm_aesdec_si128(t, _mm_loadu_si128(v++)); t = _mm_aesdec_si128(t, _mm_loadu_si128(v++));
t = _mm_aesdec_si128(t, _mm_loadu_si128(v++)); t = _mm_aesdec_si128(t, _mm_loadu_si128(v++));
@ -82,86 +89,95 @@ uint64_t T1HA_IA32AES_NAME(const void *data, uint32_t len) {
t = _mm_aesenc_si128(x, t); t = _mm_aesenc_si128(x, t);
x = _mm_add_epi64(y, x); x = _mm_add_epi64(y, x);
y = t; y = t;
} while (v + 7 < detent); } while (v + 7 < detent);
} }
while (v < detent) { while (v < detent) {
__m128i v0y = _mm_add_epi64(y, _mm_loadu_si128(v++)); __m128i v0y = _mm_add_epi64(y, _mm_loadu_si128(v++));
__m128i v1x = _mm_sub_epi64(x, _mm_loadu_si128(v++)); __m128i v1x = _mm_sub_epi64(x, _mm_loadu_si128(v++));
x = _mm_aesdec_si128(x, v0y); x = _mm_aesdec_si128(x, v0y);
y = _mm_aesdec_si128(y, v1x); y = _mm_aesdec_si128(y, v1x);
} }
x = _mm_add_epi64(_mm_aesdec_si128(x, _mm_aesenc_si128(y, x)), y); x = _mm_add_epi64(_mm_aesdec_si128(x, _mm_aesenc_si128(y, x)), y);
#if defined(__x86_64__) || defined(_M_X64) #if defined(__x86_64__) || defined(_M_X64)
#if defined(__SSE4_1__) || defined(__AVX__) #if defined(__SSE4_1__) || defined(__AVX__)
a = _mm_extract_epi64(x, 0); a = _mm_extract_epi64(x, 0);
b = _mm_extract_epi64(x, 1); b = _mm_extract_epi64(x, 1);
#else #else
a = _mm_cvtsi128_si64(x); a = _mm_cvtsi128_si64(x);
b = _mm_cvtsi128_si64(_mm_unpackhi_epi64(x, x)); b = _mm_cvtsi128_si64(_mm_unpackhi_epi64(x, x));
#endif #endif
#else #else
#if defined(__SSE4_1__) || defined(__AVX__) #if defined(__SSE4_1__) || defined(__AVX__)
a = (uint32_t)_mm_extract_epi32(x, 0) | (uint64_t)_mm_extract_epi32(x, 1) a = (uint32_t)_mm_extract_epi32(x, 0) | (uint64_t)_mm_extract_epi32(x, 1)
<< 32; << 32;
b = (uint32_t)_mm_extract_epi32(x, 2) | (uint64_t)_mm_extract_epi32(x, 3) b = (uint32_t)_mm_extract_epi32(x, 2) | (uint64_t)_mm_extract_epi32(x, 3)
<< 32; << 32;
#else #else
a = (uint32_t)_mm_cvtsi128_si32(x); a = (uint32_t)_mm_cvtsi128_si32(x);
a |= (uint64_t)_mm_cvtsi128_si32(_mm_shuffle_epi32(x, 1)) << 32; a |= (uint64_t)_mm_cvtsi128_si32(_mm_shuffle_epi32(x, 1)) << 32;
x = _mm_unpackhi_epi64(x, x); x = _mm_unpackhi_epi64(x, x);
b = (uint32_t)_mm_cvtsi128_si32(x); b = (uint32_t)_mm_cvtsi128_si32(x);
b |= (uint64_t)_mm_cvtsi128_si32(_mm_shuffle_epi32(x, 1)) << 32; b |= (uint64_t)_mm_cvtsi128_si32(_mm_shuffle_epi32(x, 1)) << 32;
#endif #endif
#endif #endif
#ifdef __AVX__ #ifdef __AVX__
_mm256_zeroupper(); _mm256_zeroupper();
#elif !(defined(_X86_64_) || defined(__x86_64__) || defined(_M_X64) || \ #elif !(defined(_X86_64_) || defined(__x86_64__) || defined(_M_X64) || \
defined(__e2k__)) defined(__e2k__))
_mm_empty(); _mm_empty();
#endif #endif
} }
const uint64_t *v = (const uint64_t *)data; const uint64_t *v = (const uint64_t *)data;
switch (len) { switch (len) {
default:
mixup64(&a, &b, fetch64_le_unaligned(v++), prime_4); default:
/* fall through */ mixup64(&a, &b, fetch64_le_unaligned(v++), prime_4);
case 24: /* fall through */
case 23: case 24:
case 22: case 23:
case 21: case 22:
case 20: case 21:
case 19: case 20:
case 18: case 19:
case 17: case 18:
mixup64(&b, &a, fetch64_le_unaligned(v++), prime_3); case 17:
/* fall through */ mixup64(&b, &a, fetch64_le_unaligned(v++), prime_3);
case 16: /* fall through */
case 15: case 16:
case 14: case 15:
case 13: case 14:
case 12: case 13:
case 11: case 12:
case 10: case 11:
case 9: case 10:
mixup64(&a, &b, fetch64_le_unaligned(v++), prime_2); case 9:
/* fall through */ mixup64(&a, &b, fetch64_le_unaligned(v++), prime_2);
case 8: /* fall through */
case 7: case 8:
case 6: case 7:
case 5: case 6:
case 4: case 5:
case 3: case 4:
case 2: case 3:
case 1: case 2:
mixup64(&b, &a, tail64_le_unaligned(v, len), prime_1); case 1:
/* fall through */ mixup64(&b, &a, tail64_le_unaligned(v, len), prime_1);
case 0: /* fall through */
return final64(a, b); case 0:
return final64(a, b);
} }
} }
#endif /* T1HA0_AESNI_AVAILABLE */ #endif /* T1HA0_AESNI_AVAILABLE */
#undef T1HA_IA32AES_NAME #undef T1HA_IA32AES_NAME

File diff suppressed because it is too large Load Diff

View File

@ -43,8 +43,8 @@
#pragma once #pragma once
#if defined(_MSC_VER) && _MSC_VER > 1800 #if defined(_MSC_VER) && _MSC_VER > 1800
#pragma warning(disable : 4464) /* relative include path contains '..' */ #pragma warning(disable : 4464) /* relative include path contains '..' */
#endif /* MSVC */ #endif /* MSVC */
#include "t1ha.h" #include "t1ha.h"
/***************************************************************************/ /***************************************************************************/
@ -59,18 +59,19 @@ extern const uint64_t t1ha_refval_2atonce[81];
extern const uint64_t t1ha_refval_2atonce128[81]; extern const uint64_t t1ha_refval_2atonce128[81];
extern const uint64_t t1ha_refval_2stream[81]; extern const uint64_t t1ha_refval_2stream[81];
extern const uint64_t t1ha_refval_2stream128[81]; extern const uint64_t t1ha_refval_2stream128[81];
#endif /* T1HA2_DISABLED */ #endif /* T1HA2_DISABLED */
#ifndef T1HA1_DISABLED #ifndef T1HA1_DISABLED
extern const uint64_t t1ha_refval_64le[81]; extern const uint64_t t1ha_refval_64le[81];
extern const uint64_t t1ha_refval_64be[81]; extern const uint64_t t1ha_refval_64be[81];
#endif /* T1HA1_DISABLED */ #endif /* T1HA1_DISABLED */
#ifndef T1HA0_DISABLED #ifndef T1HA0_DISABLED
extern const uint64_t t1ha_refval_32le[81]; extern const uint64_t t1ha_refval_32le[81];
extern const uint64_t t1ha_refval_32be[81]; extern const uint64_t t1ha_refval_32be[81];
#if T1HA0_AESNI_AVAILABLE #if T1HA0_AESNI_AVAILABLE
extern const uint64_t t1ha_refval_ia32aes_a[81]; extern const uint64_t t1ha_refval_ia32aes_a[81];
extern const uint64_t t1ha_refval_ia32aes_b[81]; extern const uint64_t t1ha_refval_ia32aes_b[81];
#endif /* T1HA0_AESNI_AVAILABLE */ #endif /* T1HA0_AESNI_AVAILABLE */
#endif /* T1HA0_DISABLED */ #endif /* T1HA0_DISABLED */

File diff suppressed because it is too large Load Diff

View File

@ -1967,6 +1967,7 @@ static u8 cmp_fuzz(afl_state_t *afl, u32 key, u8 *orig_buf, u8 *buf, u8 *cbuf,
continue; continue;
} }
#endif #endif
#ifdef _DEBUG #ifdef _DEBUG
@ -2789,6 +2790,7 @@ static u8 rtn_fuzz(afl_state_t *afl, u32 key, u8 *orig_buf, u8 *buf, u8 *cbuf,
continue; continue;
} }
#endif #endif
t = taint; t = taint;

View File

@ -402,7 +402,9 @@ static void usage(u8 *argv0, int more_help) {
#endif #endif
#ifdef _AFL_SPECIAL_PERFORMANCE #ifdef _AFL_SPECIAL_PERFORMANCE
SAYF("Compiled with special performance options for this specific system, it might not work on other platforms!\n"); SAYF(
"Compiled with special performance options for this specific system, it "
"might not work on other platforms!\n");
#endif #endif
SAYF("For additional help please consult %s/README.md :)\n\n", doc_path); SAYF("For additional help please consult %s/README.md :)\n\n", doc_path);

View File

@ -3,18 +3,17 @@
#include "types.h" #include "types.h"
#ifdef _HAVE_AVX2 #ifdef _HAVE_AVX2
#define T1HA0_AESNI_AVAILABLE 1 #define T1HA0_AESNI_AVAILABLE 1
#define T1HA_USE_FAST_ONESHOT_READ 1 #define T1HA_USE_FAST_ONESHOT_READ 1
#define T1HA_USE_INDIRECT_FUNCTIONS 1 #define T1HA_USE_INDIRECT_FUNCTIONS 1
#define T1HA_IA32AES_NAME XXH3_64bits #define T1HA_IA32AES_NAME XXH3_64bits
#include "t1ha0_ia32aes_b.h" #include "t1ha0_ia32aes_b.h"
#else #else
#define XXH_INLINE_ALL #define XXH_INLINE_ALL
#include "xxhash.h" #include "xxhash.h"
#undef XXH_INLINE_ALL #undef XXH_INLINE_ALL
#endif #endif
void rand_set_seed(afl_state_t *afl, s64 init_seed) { void rand_set_seed(afl_state_t *afl, s64 init_seed) {
afl->init_seed = init_seed; afl->init_seed = init_seed;

View File

@ -13,30 +13,41 @@
#undef XXH_INLINE_ALL #undef XXH_INLINE_ALL
int main() { int main() {
char *data = malloc(4097);
char *data = malloc(4097);
struct timespec start, end; struct timespec start, end;
long long duration; long long duration;
int i; int i;
uint64_t res; uint64_t res;
clock_gettime(CLOCK_MONOTONIC, &start); clock_gettime(CLOCK_MONOTONIC, &start);
for (i = 0; i < 100000000; ++i) { for (i = 0; i < 100000000; ++i) {
res = XXH3_64bits(data, 4097);
memcpy(data + 16, (char*)&res, 8); res = XXH3_64bits(data, 4097);
memcpy(data + 16, (char *)&res, 8);
} }
clock_gettime(CLOCK_MONOTONIC, &end); clock_gettime(CLOCK_MONOTONIC, &end);
duration = (end.tv_sec - start.tv_sec) * 1000000000LL + (end.tv_nsec - start.tv_nsec); duration = (end.tv_sec - start.tv_sec) * 1000000000LL +
(end.tv_nsec - start.tv_nsec);
printf("xxh3 duration: %lld ns\n", duration); printf("xxh3 duration: %lld ns\n", duration);
memset(data, 0, 4097); memset(data, 0, 4097);
clock_gettime(CLOCK_MONOTONIC, &start); clock_gettime(CLOCK_MONOTONIC, &start);
for (i = 0; i < 100000000; ++i) { for (i = 0; i < 100000000; ++i) {
res = t1ha0_ia32aes(data, 4097);
memcpy(data + 16, (char*)&res, 8); res = t1ha0_ia32aes(data, 4097);
memcpy(data + 16, (char *)&res, 8);
} }
clock_gettime(CLOCK_MONOTONIC, &end); clock_gettime(CLOCK_MONOTONIC, &end);
duration = (end.tv_sec - start.tv_sec) * 1000000000LL + (end.tv_nsec - start.tv_nsec); duration = (end.tv_sec - start.tv_sec) * 1000000000LL +
(end.tv_nsec - start.tv_nsec);
printf("t1ha0_ia32aes duration: %lld ns\n", duration); printf("t1ha0_ia32aes duration: %lld ns\n", duration);
return 0; return 0;
} }