Showing the changes to src/vm/stack.cpp (1 of 11 files). Show all
Unified · Split
| @@ -19,7 +19,7 @@ namespace · 18 unmodified lines | |||
| 19 | struct vm_stack_page | 19 | struct vm_stack_page |
| 20 | { | 20 | { |
| 21 | vm_stack_page *prev_page; | 21 | vm_stack_page *prev_page; |
| 22 | uintptr_t page_limit_addr; | 22 | std::uintptr_t page_limit_addr; |
| 23 | vm_frame_t *page_top_frame; // Do not free. This is used as a tracking pointer. | 23 | vm_frame_t *page_top_frame; // Do not free. This is used as a tracking pointer. |
| 24 | 24 | ||
| 25 | void *stack_data() const | 25 | void *stack_data() const |
| @@ -30,7 +30,7 @@ namespace · 4 unmodified lines | |||
| 30 | 30 | ||
| 31 | bool contains_frame(const vm_frame_t *frame) const | 31 | bool contains_frame(const vm_frame_t *frame) const |
| 32 | { | 32 | { |
| 33 | return reinterpret_cast<uintptr_t>(stack_data()) <= reinterpret_cast<uintptr_t>(frame) && reinterpret_cast<uintptr_t>(frame) < page_limit_addr; | 33 | return reinterpret_cast<std::uintptr_t>(stack_data()) <= reinterpret_cast<std::uintptr_t>(frame) && reinterpret_cast<std::uintptr_t>(frame) < page_limit_addr; |
| 34 | } | 34 | } |
| 35 | }; | 35 | }; |
| 36 | 36 | ||
| @@ -66,16 +66,17 @@ namespace · 29 unmodified lines | |||
| 66 | void *new_page() | 66 | void *new_page() |
| 67 | { | 67 | { |
| 68 | auto current_stack_page = top_page; | 68 | auto current_stack_page = top_page; |
| 69 | top_page = alloc_memory<vm_stack_page>(sizeof(vm_stack_page) + stack_page_size); | 69 | top_page = calloc_memory<vm_stack_page>(sizeof(vm_stack_page) + stack_page_size); |
| 70 | 70 | ||
| 71 | // Initialize the stack allocation. | 71 | // Initialize the stack allocation. |
| 72 | top_page->prev_page = current_stack_page; | 72 | top_page->prev_page = current_stack_page; |
| 73 | 73 | ||
| 74 | // The top frame member is only for tracking and so is initialized to null. | 74 | // The top frame member is only for tracking and so is initialized to null. |
| 75 | top_page->page_top_frame = nullptr; | 75 | top_page->page_top_frame = nullptr; |
| 76 | top_page->page_limit_addr = reinterpret_cast<uintptr_t>(top_page)+stack_page_size; | 76 | top_page->page_limit_addr = reinterpret_cast<std::uintptr_t>(top_page)+stack_page_size; |
| 77 | 77 | ||
| 78 | debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "alloc: vm stack alloc: %#" PRIxPTR " %#" PRIxPTR "\n", top_page, top_page->page_limit_addr); | 78 | if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>()) |
| 79 | debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "alloc: vm stack alloc: %#" PRIxPTR " %#" PRIxPTR "\n", top_page, top_page->page_limit_addr); | ||
| 79 | 80 | ||
| 80 | return top_page->stack_data(); | 81 | return top_page->stack_data(); |
| 81 | } | 82 | } |
| @@ -87,7 +88,9 @@ namespace · 5 unmodified lines | |||
| 87 | assert(current_stack_page != nullptr); | 88 | assert(current_stack_page != nullptr); |
| 88 | 89 | ||
| 89 | free_memory(top_page); | 90 | free_memory(top_page); |
| 90 | debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "free: vm stack alloc\n"); | 91 | |
| 92 | if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>()) | ||
| 93 | debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "free: vm stack alloc\n"); | ||
| 91 | 94 | ||
| 92 | // Set the top page | 95 | // Set the top page |
| 93 | top_page = current_stack_page; | 96 | top_page = current_stack_page; |
| @@ -158,7 +161,7 @@ vm_module_ref_t *&vm_frame_t::prev_module_ref() const · 64 unmodified lines | |||
| 158 | 161 | ||
| 159 | pointer_t vm_frame_t::fixed_point_register_1() const | 162 | pointer_t vm_frame_t::fixed_point_register_1() const |
| 160 | { | 163 | { |
| 161 | const auto offset = runtime_constants::fixed_point_register_1_frame_offset; | 164 | const auto offset = vm_frame_constants::fixed_point_register_1_frame_offset; |
| 162 | assert(offset < frame_type->size_in_bytes); | 165 | assert(offset < frame_type->size_in_bytes); |
| 163 | 166 | ||
| 164 | auto p = reinterpret_cast<uint8_t *>(base()) + offset; | 167 | auto p = reinterpret_cast<uint8_t *>(base()) + offset; |
| @@ -167,7 +170,7 @@ pointer_t vm_frame_t::fixed_point_register_1() const · 2 unmodified lines | |||
| 167 | 170 | ||
| 168 | pointer_t vm_frame_t::fixed_point_register_2() const | 171 | pointer_t vm_frame_t::fixed_point_register_2() const |
| 169 | { | 172 | { |
| 170 | const auto offset = runtime_constants::fixed_point_register_2_frame_offset; | 173 | const auto offset = vm_frame_constants::fixed_point_register_2_frame_offset; |
| 171 | assert(offset < frame_type->size_in_bytes); | 174 | assert(offset < frame_type->size_in_bytes); |
| 172 | 175 | ||
| 173 | auto p = reinterpret_cast<uint8_t *>(base()) + offset; | 176 | auto p = reinterpret_cast<uint8_t *>(base()) + offset; |
| @@ -210,16 +213,17 @@ vm_frame_t *vm_stack_t::alloc_frame(std::shared_ptr<const type_descriptor_t> fra · 36 unmodified lines | |||
| 210 | vm_frame_t *new_frame; | 213 | vm_frame_t *new_frame; |
| 211 | if (page_top_frame == nullptr) | 214 | if (page_top_frame == nullptr) |
| 212 | { | 215 | { |
| 213 | new_frame = ::new(layout->top_page->stack_data())vm_frame_t{ frame_type }; | 216 | auto new_frame_addr = layout->top_page->stack_data(); |
| 217 | new_frame = ::new(new_frame_addr)vm_frame_t{ frame_type }; | ||
| 214 | } | 218 | } |
| 215 | else | 219 | else |
| 216 | { | 220 | { |
| 217 | auto current_page_top_frame_addr = reinterpret_cast<std::size_t>(page_top_frame); | 221 | auto current_page_top_frame_addr = reinterpret_cast<std::uintptr_t>(page_top_frame); |
| 218 | auto new_frame_addr_maybe = current_page_top_frame_addr + (sizeof(vm_frame_t) + page_top_frame->frame_type->size_in_bytes); | 222 | auto new_frame_addr_maybe = current_page_top_frame_addr + (sizeof(vm_frame_t) + page_top_frame->frame_type->size_in_bytes); |
| 219 | 223 | ||
| 220 | // If the new frame is not going to fit on the current page, create a new page. | 224 | // If the new frame is not going to fit on the current page, create a new page. |
| 221 | if ((new_frame_addr_maybe + new_frame_size) >= layout->top_page->page_limit_addr) | 225 | if ((new_frame_addr_maybe + new_frame_size) >= layout->top_page->page_limit_addr) |
| 222 | new_frame_addr_maybe = reinterpret_cast<uintptr_t>(layout->new_page()); | 226 | new_frame_addr_maybe = reinterpret_cast<std::uintptr_t>(layout->new_page()); |
| 223 | 227 | ||
| 224 | new_frame = ::new(reinterpret_cast<void *>(new_frame_addr_maybe))vm_frame_t{ frame_type }; | 228 | new_frame = ::new(reinterpret_cast<void *>(new_frame_addr_maybe))vm_frame_t{ frame_type }; |
| 225 | } | 229 | } |