From b6047ea5d4ba0c01eccc91beab09688ffd13b328 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Tue, 4 Apr 2017 11:19:07 +1000 Subject: [PATCH] rose: use bytecode_ptr for interpreter programs --- src/rose/rose_build_bytecode.cpp | 9 ++++----- src/rose/rose_build_program.cpp | 12 +++++++----- src/rose/rose_build_program.h | 6 +++--- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index 13d485ea..98e1ef70 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -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; } diff --git a/src/rose/rose_build_program.cpp b/src/rose/rose_build_program.cpp index 2fb76c77..bca867f0 100644 --- a/src/rose/rose_build_program.cpp +++ b/src/rose/rose_build_program.cpp @@ -639,12 +639,14 @@ OffsetMap makeOffsetMap(const RoseProgram &program, u32 *total_len) { return offset_map; } -aligned_unique_ptr -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); +bytecode_ptr 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 = aligned_zmalloc_unique(*total_len); + auto bytecode = make_zeroed_bytecode_ptr(total_len, + ROSE_INSTR_MIN_ALIGN); char *ptr = bytecode.get(); for (const auto &ri : program) { diff --git a/src/rose/rose_build_program.h b/src/rose/rose_build_program.h index 3931f095..06233231 100644 --- a/src/rose/rose_build_program.h +++ b/src/rose/rose_build_program.h @@ -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 -writeProgram(RoseEngineBlob &blob, const RoseProgram &program, u32 *total_len); +bytecode_ptr writeProgram(RoseEngineBlob &blob, + const RoseProgram &program); class RoseProgramHash { public: