297 Commits

Author SHA1 Message Date
Matthew Barr
d2416736cb Use intrinsic to get correct movq everywhere
The real trick here is that _mm_set_epi64x() (note the 'x') takes a 64-bit
value - not a ptr to a 128-bit value like the non-x - so compilers don't
twist themselves in knots with alignment or whatever confuses them.
2017-04-26 15:16:03 +10:00
Wang, Xiang W
90216921b0 FDR: front end loop improvement 2017-04-26 15:11:10 +10:00
Justin Viiret
dc50ab291b container: allow sort_and_unique to have a comparator 2017-04-26 15:04:31 +10:00
Alex Coyte
fddcdbb129 determinisation: use unordered_map to hold state set -> id mapping 2017-04-26 14:59:22 +10:00
Matthew Barr
9363ae7486 Clear upper half of AVX register before libm call
Clearing the upper half of the AVX register is required before calling SSE
code to avoid AVX-to-SSE transition penalties.
2017-04-26 14:59:22 +10:00
Alex Coyte
bbd64f98ae allow streams to marked as exhausted in more cases
At stream boundaries, we can mark streams as exhausted if there are no
groups active and there are no other ways to report matches. This allows us
to stop maintaining the history buffer on subsequent stream writes.
Previously, streams were only marked as exhausted if a pure highlander case
reported all patterns or the outfix in a sole outfix case died.
2017-04-26 14:44:53 +10:00
Justin Viiret
7c2627f2c2 flat_set/map: make erase() take const_iterator 2017-04-26 14:41:30 +10:00
Justin Viiret
1db7f30296 flat_base: move swap() 2017-04-26 14:41:30 +10:00
Justin Viiret
f8166fac25 flat_base: take more common operations 2017-04-26 14:41:30 +10:00
Justin Viiret
a38ac6a52f flat_base: take more common operations 2017-04-26 14:41:30 +10:00
Justin Viiret
adfb9fe3f9 flat_set: move comp/data helpers to base 2017-04-26 14:41:30 +10:00
Justin Viiret
3fb5a3702e flat_set/map: use boost::totally_ordered 2017-04-26 14:41:30 +10:00
Justin Viiret
f520599ab7 flat_map: add value_comp() 2017-04-26 14:41:30 +10:00
Justin Viiret
27adea2224 flat_map: small doc fix 2017-04-26 14:41:30 +10:00
Justin Viiret
a55c03d1f4 flat_set/map: back with small_vector 2017-04-26 14:41:30 +10:00
Justin Viiret
5f60812c9b flat_set: cheesy tuple-based ebo 2017-04-26 14:41:30 +10:00
Justin Viiret
843ead266f flat_set: modernize iter_wrapper ctors 2017-04-26 14:41:30 +10:00
Justin Viiret
988ea6b4e1 rose: role aliasing improvements
These changes improve the performance of the role aliasing passes on
very large cases and fix a couple of small errors in the left and right
merge passes as well.
2017-04-26 14:41:30 +10:00
Justin Viiret
68a35ff3b8 rose: give longer literals to accel analysis 2017-04-26 14:41:29 +10:00
Matthew Barr
46f74300f2 update copyright year 2017-01-17 11:38:09 +11:00
Matthew Barr
988ee0eb55 MSVC requires the attribute before the type 2017-01-06 11:24:12 +11:00
Matthew Barr
8334745063 SSE2 preprocessor test for MSVC
MSVC doesn't define __SSE2__ but we can figure it out from
other macros.
2016-12-14 15:35:44 +11:00
Matthew Barr
c3a73446ee Fat runtime 2016-12-14 15:34:54 +11:00
Matthew Barr
2214296b7f Convert compile-time code to not require SIMD 2016-12-14 15:29:01 +11:00
Matthew Barr
e993fe1eb0 Remove erroneous semicolon 2016-12-14 15:28:58 +11:00
Justin Viiret
e271781d95 multibit, fatbit: make _size build-time only
This commit makes mmbit_size() and fatbit_size compile-time only, and
adds a resource limit for very large multibits.
2016-12-14 15:28:54 +11:00
Alex Coyte
e51b6d23b9 introduce Sheng-McClellan hybrid 2016-12-14 15:27:18 +11:00
Matthew Barr
99e14df117 Fix combine2x128 2016-12-02 11:33:48 +11:00
Alex Coyte
32c826e9c6 have single dump function per engine 2016-12-02 11:32:36 +11:00
Alex Coyte
1614c73eeb Implement some ue2_graph functions using TMP rather than friends
This helps work around issues with some compilers
2016-12-02 11:32:24 +11:00
Alex Coyte
530d84c6f3 allow edge_descriptors to be created from pair<edge_descriptor, bool> 2016-12-02 11:32:20 +11:00
Alex Coyte
e1e9010cac Introduce custom adjacency-list based graph 2016-12-02 11:31:33 +11:00
Alex Coyte
47f53f63a7 simple pass to pick up paths redundant with those from cyclic's succs 2016-12-02 11:24:30 +11:00
Justin Viiret
8869dee643 rose: simplify long lit table, add bloom filter
Replaces the original long lit hash table (used in streaming mode) with a
smaller, simpler linear probing approach. Adds a bloom filter in front
of it to reduce time spent on false positives.

Sizing of both the hash table and bloom filter are done based on max
load.
2016-10-28 14:52:45 +11:00
Justin Viiret
68bf473e2e fdr: move long literal handling into Rose
Move the hash table used for long literal support in streaming mode from
FDR to Rose, and introduce new instructions CHECK_LONG_LIT and
CHECK_LONG_LIT_NOCASE for doing literal confirm for long literals.

This simplifies FDR confirm, and guarantees that HWLM matchers will only
be used for literals < 256 bytes long.
2016-10-28 14:52:26 +11:00
Matthew Barr
7d3eff8648 extern "C" for mask1bit table 2016-10-28 14:51:49 +11:00
Alex Coyte
c94899dd44 allow sets of tops on edges 2016-10-28 14:51:46 +11:00
Alex Coyte
aca89e66d2 hinted insert operations for flat_set 2016-10-28 14:48:55 +11:00
Matthew Barr
7849b9d611 MSVC prefers the attrib at the beginning 2016-10-28 14:48:31 +11:00
Xu, Chi
04d79629de rose: add shufti-based lookaround instructions
More lookaround specialisations that use the shufti approach.
2016-10-28 14:46:27 +11:00
Justin Viiret
9139123642 rose: move sparse iter cache to RoseEngineBlob
This enables its use for iterators written by instructions.
2016-10-28 14:45:32 +11:00
Justin Viiret
13b6023a18 hash: add hash_all variadic tpl func, use in rose 2016-10-28 14:45:28 +11:00
Justin Viiret
3bfef988fe container.h: include <vector> 2016-10-28 14:45:11 +11:00
Alex Coyte
e74b141e95 rework load_m128_from_u64a() 2016-10-28 14:44:16 +11:00
Alex Coyte
a08e1dd690 Introduce a 64-bit LimEx model.
On 64-bit platforms, the Limex 64 model is implemented in normal GPRs.
On 32-bit platforms, however, 128-bit SSE registers are used for the
runtime implementation.
2016-10-28 14:44:12 +11:00
Justin Viiret
3cf4199879 debug: always use %zu in format string for size_t 2016-10-28 14:43:34 +11:00
Xu, Chi
b96d5c23d1 rose: add new instruction CHECK_MASK_32
This is a specialisation of the "lookaround" code.
2016-10-28 14:43:33 +11:00
Alex Coyte
702f256b39 remove exceptionMap from LimExNFA 2016-08-10 15:11:15 +10:00
Alex Coyte
5c5ec905cc violet: initial implementation 2016-08-10 15:01:08 +10:00
Justin Viiret
49bb3b5c82 simd_utils: setbit/clearbit by loading 1-bit mask 2016-08-10 14:52:56 +10:00