From 395d6ae650f4e827d0494144494de08bf17f9fa0 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Tue, 28 Feb 2017 13:46:07 +1100 Subject: [PATCH] rose: move dkey info to engine blob --- src/rose/rose_build_bytecode.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index 05e46ca8..871d78c0 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -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 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 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 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);