]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
rose: use bytecode_ptr for interpreter programs
authorJustin Viiret <justin.viiret@intel.com>
Tue, 4 Apr 2017 01:19:07 +0000 (11:19 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 05:19:36 +0000 (15:19 +1000)
src/rose/rose_build_bytecode.cpp
src/rose/rose_build_program.cpp
src/rose/rose_build_program.h

index 13d485eafdcf7e20a7a7bc2c8c8ca9e84c532053..98e1ef704d71d1e94790674d8bd2b1ceae59073c 100644 (file)
@@ -2567,11 +2567,10 @@ u32 writeProgram(build_context &bc, RoseProgram &&program) {
     recordResources(bc.resources, program);
     recordLongLiterals(bc.longLiterals, program);
 
-    u32 len = 0;
-    auto prog_bytecode = writeProgram(bc.engine_blob, program, &len);
-    u32 offset = bc.engine_blob.add(prog_bytecode.get(), len,
-                                    ROSE_INSTR_MIN_ALIGN);
-    DEBUG_PRINTF("prog len %u written at offset %u\n", len, offset);
+    auto prog_bytecode = writeProgram(bc.engine_blob, program);
+    u32 offset = bc.engine_blob.add(prog_bytecode);
+    DEBUG_PRINTF("prog len %zu written at offset %u\n", prog_bytecode.size(),
+                 offset);
     bc.program_cache.emplace(move(program), offset);
     return offset;
 }
index 2fb76c7760ccf61d44ce84fdab16e61f0e1b3e0a..bca867f096b09157bd241f8c4334619e0373260c 100644 (file)
@@ -639,12 +639,14 @@ OffsetMap makeOffsetMap(const RoseProgram &program, u32 *total_len) {
     return offset_map;
 }
 
-aligned_unique_ptr<char>
-writeProgram(RoseEngineBlob &blob, const RoseProgram &program, u32 *total_len) {
-    const auto offset_map = makeOffsetMap(program, total_len);
-    DEBUG_PRINTF("%zu instructions, len %u\n", program.size(), *total_len);
-
-    auto bytecode = aligned_zmalloc_unique<char>(*total_len);
+bytecode_ptr<char> writeProgram(RoseEngineBlob &blob,
+                                const RoseProgram &program) {
+    u32 total_len = 0;
+    const auto offset_map = makeOffsetMap(program, &total_len);
+    DEBUG_PRINTF("%zu instructions, len %u\n", program.size(), total_len);
+
+    auto bytecode = make_zeroed_bytecode_ptr<char>(total_len,
+                                                   ROSE_INSTR_MIN_ALIGN);
     char *ptr = bytecode.get();
 
     for (const auto &ri : program) {
index 3931f095e0bb90b592b6a556be2b6e564a85830f..062332318dd3121b482ca745275e09a24c78e52b 100644 (file)
@@ -32,7 +32,7 @@
 #include "rose_build_impl.h"
 #include "rose_program.h"
 #include "som/som_operation.h"
-#include "util/alloc.h"
+#include "util/bytecode_ptr.h"
 #include "util/container.h"
 #include "util/hash.h"
 #include "util/make_unique.h"
@@ -2328,8 +2328,8 @@ public:
     }
 };
 
-aligned_unique_ptr<char>
-writeProgram(RoseEngineBlob &blob, const RoseProgram &program, u32 *total_len);
+bytecode_ptr<char> writeProgram(RoseEngineBlob &blob,
+                                const RoseProgram &program);
 
 class RoseProgramHash {
 public: