History

Code clean-up Optimization in allocation pointer enumeration. - Removed needless division - Marked bitset<> as const, now indexing is a constexpr.

arr committed 10 years ago

Commit 8506dc61 parent 992a33f5 files · +14 −19Browse files

Showing the changes to src/vm/vm_memory.cpp (1 of 5 files). Show all

Unified · Split

src/vm/vm_memory.cpp+8−10
@@ -140,20 +140,18 @@ void disvm::runtime::free_memory(void *memory) · 139 unmodified lines
140140 void disvm::runtime::init_memory(const type_descriptor_t &type_desc, void *data)
141141 {
142142 assert(data != nullptr);
143− auto memory_word_len = std::size_t{ type_desc.size_in_bytes / sizeof(word_t) };
144− if (memory_word_len == 0)
143+ if (type_desc.size_in_bytes == 0)
145144 return;
146145
147146 debug::assign_debug_memory(data, type_desc.size_in_bytes);
148147
149148 auto memory = reinterpret_cast<word_t *>(data);
150− assert((memory_word_len / sizeof(word_t)) <= static_cast<std::size_t>(type_desc.size_in_bytes)); // type desc is in bytes convert len to bytes from words.
151149 for (auto i = word_t{ 0 }; i < type_desc.map_in_bytes; ++i, memory += 8)
152150 {
153151 const auto words8 = type_desc.pointer_map[i];
154152 if (words8 != 0)
155153 {
156− auto flags = std::bitset<sizeof(words8) * 8>{ words8 };
154+ const auto flags = std::bitset<sizeof(words8) * 8>{ words8 };
157155
158156 // Enumerating the flags in reverse order so memory access is linear.
159157 if (flags[7]) memory[0] = runtime_constants::nil;
@@ -414,19 +412,19 @@ static std::shared_ptr<const type_descriptor_t> intrinsic_type_desc::type<vm_thr · 254 unmodified lines
414412
415413 vm_alloc_instance_finalizer_t type_descriptor_t::no_finalizer = nullptr;
416414
417−std::shared_ptr<const type_descriptor_t> type_descriptor_t::create(const word_t size)
415+std::shared_ptr<const type_descriptor_t> type_descriptor_t::create(const word_t size_in_bytes)
418416 {
419− return type_descriptor_t::create(size, 0, nullptr);
417+ return type_descriptor_t::create(size_in_bytes, 0, nullptr);
420418 }
421419
422−std::shared_ptr<const type_descriptor_t> type_descriptor_t::create(const word_t size, const std::vector<byte_t> &pointer_map)
420+std::shared_ptr<const type_descriptor_t> type_descriptor_t::create(const word_t size_in_bytes, const std::vector<byte_t> &pointer_map)
423421 {
424422 assert(pointer_map.size() < static_cast<std::size_t>(std::numeric_limits<word_t>::max()));
425− return type_descriptor_t::create(size, static_cast<word_t>(pointer_map.size()), pointer_map.data());
423+ return type_descriptor_t::create(size_in_bytes, static_cast<word_t>(pointer_map.size()), pointer_map.data());
426424 }
427425
428426 std::shared_ptr<const type_descriptor_t> type_descriptor_t::create(
429− const word_t size,
427+ const word_t size_in_bytes,
430428 const word_t pointer_map_length,
431429 const byte_t *pointer_map,
432430 const vm_alloc_instance_finalizer_t finalizer)
@@ -453,7 +451,7 @@ std::shared_ptr<const type_descriptor_t> type_descriptor_t::create( · 20 unmodified lines
453451 pointer_map_local[i] = pointer_map[i];
454452 }
455453
456− auto new_type = ::new(new_type_memory) type_descriptor_t{ size, pointer_map_length, pointer_map_local, finalizer };
454+ auto new_type = ::new(new_type_memory) type_descriptor_t{ size_in_bytes, pointer_map_length, pointer_map_local, finalizer };
457455 return std::shared_ptr<type_descriptor_t>{ new_type, deleter };
458456 }
459457