]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
Compile dump of teddy's nibble masks and reinforcement table in fdr_dump.cpp
authorChang, Harry <harry.chang@intel.com>
Thu, 27 Jul 2017 09:21:05 +0000 (17:21 +0800)
committerMatthew Barr <matthew.barr@intel.com>
Mon, 21 Aug 2017 01:18:43 +0000 (11:18 +1000)
src/fdr/fdr_dump.cpp
src/fdr/teddy_compile.cpp

index 0a4d74154a192ddbf50895019b6273beae23b3aa..f4cd1f44ed5b791034c1fe52da56495ab13c7cc5 100644 (file)
@@ -86,6 +86,45 @@ void dumpConfirms(const void *fdr_base, u32 conf_offset, u32 num_confirms,
     }
 }
 
+static
+void dumpTeddyReinforced(const u8 *rmsk, const u32 num_tables, FILE *f) {
+    // dump reinforcement masks
+    for (u32 b = 0; b < num_tables; b++) {
+        fprintf(f, "    reinforcement table for bucket %u..%u:\n",
+                   b * 8, b * 8 + 7);
+        for (u32 i = 0; i <= N_CHARS; i++) {
+            fprintf(f, "      0x%02x: ", i);
+            for (u32 j = 0; j < 8; j++) {
+                u8 val = rmsk[b * ((N_CHARS + 1) * 8) + i * 8 + j];
+                for (u32 k = 0; k < 8; k++) {
+                    fprintf(f, "%s", ((val >> k) & 0x1) ? "1" : "0");
+                }
+                fprintf(f, " ");
+            }
+            fprintf(f, "\n");
+        }
+        fprintf(f, "\n");
+    }
+}
+
+static
+void dumpTeddyMasks(const u8 *baseMsk, u32 numMasks, u32 maskWidth, FILE *f) {
+    // dump nibble masks
+    fprintf(f, "    nibble masks:\n");
+    for (u32 i = 0; i < numMasks * 2; i++) {
+        fprintf(f, "      -%d%s: ", 1 + i / 2, (i % 2) ? "hi" : "lo");
+        for (u32 j = 0; j < 16 * maskWidth; j++) {
+            u8 val = baseMsk[i * 16 * maskWidth + j];
+            for (u32 k = 0; k < 8; k++) {
+                fprintf(f, "%s", ((val >> k) & 0x1) ? "1" : "0");
+            }
+            fprintf(f, " ");
+        }
+        fprintf(f, "\n");
+    }
+    fprintf(f, "\n");
+}
+
 static
 void dumpTeddy(const Teddy *teddy, FILE *f) {
     fprintf(f, "TEDDY:         %u\n", teddy->engineID);
@@ -105,6 +144,14 @@ void dumpTeddy(const Teddy *teddy, FILE *f) {
             teddy->floodOffset);
     fprintf(f, "\n");
 
+    u32 maskWidth = des->getNumBuckets() / 8;
+    size_t headerSize = sizeof(Teddy);
+    size_t maskLen = des->numMasks * 16 * 2 * maskWidth;
+    const u8 *teddy_base = (const u8 *)teddy;
+    const u8 *baseMsk = teddy_base + ROUNDUP_CL(headerSize);
+    const u8 *rmsk = baseMsk + ROUNDUP_CL(maskLen);
+    dumpTeddyMasks(baseMsk, des->numMasks, maskWidth, f);
+    dumpTeddyReinforced(rmsk, maskWidth, f);
     dumpConfirms(teddy, teddy->confOffset, des->getNumBuckets(), f);
 }
 
index 3709465b8b4dd38402cd272ba535abee6c7f3648..9a1e54a15e0b67436619535f42d2d64c3a3b055a 100644 (file)
@@ -353,26 +353,6 @@ void fillReinforcedMsk(u8 *rmsk, u16 c, u32 j, u8 bmsk) {
     }
 }
 
-#ifdef TEDDY_DEBUG
-static
-void dumpReinforcedMaskTable(const u8 *rmsk, const u32 num_tables) {
-    for (u32 b = 0; b < num_tables; b++) {
-        printf("reinforcement table for bucket %u..%u:\n", b * 8, b * 8 + 7);
-        for (u32 i = 0; i <= N_CHARS; i++) {
-            printf("0x%02x: ", i);
-            for (u32 j = 0; j < REINFORCED_MSK_LEN; j++) {
-                u8 val = rmsk[b * RTABLE_SIZE + i * REINFORCED_MSK_LEN + j];
-                for (u32 k = 0; k < 8; k++) {
-                    printf("%s", ((val >> k) & 0x1) ? "1" : "0");
-                }
-                printf(" ");
-            }
-            printf("\n");
-        }
-    }
-}
-#endif
-
 static
 void fillNibbleMasks(const map<BucketIndex,
                                vector<LiteralIndex>> &bucketToLits,
@@ -543,23 +523,6 @@ bytecode_ptr<FDR> TeddyCompiler::build() {
     u8 *reinforcedMsk = baseMsk + ROUNDUP_CL(maskLen);
     fillReinforcedTable(bucketToLits, lits, reinforcedMsk, maskWidth);
 
-#ifdef TEDDY_DEBUG
-    for (u32 i = 0; i < eng.numMasks * 2; i++) {
-        for (u32 j = 0; j < 16; j++) {
-            u8 val = baseMsk[i * 16 + j];
-            for (u32 k = 0; k < 8; k++) {
-                printf("%s", ((val >> k) & 0x1) ? "1" : "0");
-            }
-            printf(" ");
-        }
-        printf("\n");
-    }
-
-    printf("\n===============================================\n"
-           "reinforced mask table for low boundary (original)\n\n");
-    dumpReinforcedMaskTable(reinforcedMsk, maskWidth);
-#endif
-
     return fdr;
 }