History

Move some basic offset functions to header files for inlining ease Replace enum_pointer_field functions with custom implementations - GC now has custom implementation - other implementations use template<> version Fix misuse of shared_ptr<type_descriptor_t> in various built-in types Observed 5 - 8 % improvement in GC for compiler scenario.

arr committed 9 years ago

Commit cd2748b1 parent 3dd1c8210 files · +115 −160Browse files

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

Unified · Split

src/vm/stack.cpp+3−3
@@ -106,7 +106,7 @@ namespace · 105 unmodified lines
106 };106 };
107}107}
108 108
109vm_frame_t::vm_frame_t(std::shared_ptr<const type_descriptor_t> &td)109vm_frame_t::vm_frame_t(std::shared_ptr<const type_descriptor_t> td)
110 : frame_type{ std::move(td) }110 : frame_type{ std::move(td) }
111{111{
112 assert(frame_type != nullptr);112 assert(frame_type != nullptr);
@@ -222,7 +222,7 @@ vm_frame_t *vm_stack_t::alloc_frame(std::shared_ptr<const type_descriptor_t> fra · 109 unmodified lines
222 if (page_top_frame == nullptr)222 if (page_top_frame == nullptr)
223 {223 {
224 auto new_frame_addr = layout->top_page->stack_data();224 auto new_frame_addr = layout->top_page->stack_data();
225 new_frame = ::new(new_frame_addr)vm_frame_t{ frame_type };225 new_frame = ::new(new_frame_addr)vm_frame_t{ std::move(frame_type) };
226 }226 }
227 else227 else
228 {228 {
@@ -233,7 +233,7 @@ vm_frame_t *vm_stack_t::alloc_frame(std::shared_ptr<const type_descriptor_t> fra · 4 unmodified lines
233 if ((new_frame_addr_maybe + new_frame_size) >= layout->top_page->page_limit_addr)233 if ((new_frame_addr_maybe + new_frame_size) >= layout->top_page->page_limit_addr)
234 new_frame_addr_maybe = reinterpret_cast<std::uintptr_t>(layout->new_page());234 new_frame_addr_maybe = reinterpret_cast<std::uintptr_t>(layout->new_page());
235 235
236 new_frame = ::new(reinterpret_cast<void *>(new_frame_addr_maybe))vm_frame_t{ frame_type };236 new_frame = ::new(reinterpret_cast<void *>(new_frame_addr_maybe))vm_frame_t{ std::move(frame_type) };
237 }237 }
238 238
239 // Record the top frame on the page239 // Record the top frame on the page