]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
rose: move dkey info to engine blob
authorJustin Viiret <justin.viiret@intel.com>
Tue, 28 Feb 2017 02:46:07 +0000 (13:46 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 05:11:10 +0000 (15:11 +1000)
src/rose/rose_build_bytecode.cpp

index 05e46ca8df918320b9f8a282b95980968b006a5f..871d78c0aa8587007dea0a86ecd9d1ec4934ad4e 100644 (file)
@@ -2709,6 +2709,15 @@ void writeLookaroundTables(build_context &bc, RoseEngine &proto) {
         bc.engine_blob.add(begin(reach_table), end(reach_table));
 }
 
+static
+void writeDkeyInfo(const ReportManager &rm, build_context &bc,
+                   RoseEngine &proto) {
+    const auto inv_dkeys = rm.getDkeyToReportTable();
+    proto.invDkeyOffset = bc.engine_blob.add(begin(inv_dkeys), end(inv_dkeys));
+    proto.dkeyCount = rm.numDkeys();
+    proto.dkeyLogSize = fatbit_size(proto.dkeyCount);
+}
+
 static
 bool hasBoundaryReports(const BoundaryReports &boundary) {
     if (!boundary.report_at_0.empty()) {
@@ -5384,6 +5393,7 @@ aligned_unique_ptr<RoseEngine> RoseBuildImpl::buildFinalEngine(u32 minWidth) {
     addSomRevNfas(bc, proto, ssm);
 
     writeLookaroundTables(bc, proto);
+    writeDkeyInfo(rm, bc, proto);
 
     // Enforce role table resource limit.
     if (num_vertices(g) > cc.grey.limitRoseRoleCount) {
@@ -5488,14 +5498,8 @@ aligned_unique_ptr<RoseEngine> RoseBuildImpl::buildFinalEngine(u32 minWidth) {
     u32 state_scatter_aux_offset = currOffset;
     currOffset += aux_size(state_scatter);
 
-    currOffset = ROUNDUP_N(currOffset, alignof(ReportID));
-    proto.invDkeyOffset = currOffset;
-    currOffset += rm.numDkeys() * sizeof(ReportID);
-
     proto.historyRequired = verify_u32(historyRequired);
     proto.ekeyCount = rm.numEkeys();
-    proto.dkeyCount = rm.numDkeys();
-    proto.dkeyLogSize = fatbit_size(proto.dkeyCount);
 
     proto.somHorizon = ssm.somPrecision();
     proto.somLocationCount = ssm.numSomSlots();
@@ -5584,8 +5588,6 @@ aligned_unique_ptr<RoseEngine> RoseBuildImpl::buildFinalEngine(u32 minWidth) {
         memcpy(ptr + proto.sbmatcherOffset, sbtable.get(), sbsize);
     }
 
-    copy_bytes(ptr + proto.invDkeyOffset, rm.getDkeyToReportTable());
-
     write_out(&engine->state_init, (char *)engine.get(), state_scatter,
               state_scatter_aux_offset);