summaryrefslogtreecommitdiff
path: root/yjit_asm.c
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2021-07-13 14:56:02 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:37 -0400
commit350b686a2c6cc8f27466222cf8520a8fda931ea2 (patch)
tree36dbefe0c991e13fcd4c07ee7e10845c2d268d87 /yjit_asm.c
parent2440fafba00b6646b312a0c74798523bfa44bfe9 (diff)
First pass at code page GC object.
Diffstat (limited to 'yjit_asm.c')
-rw-r--r--yjit_asm.c39
1 files changed, 14 insertions, 25 deletions
diff --git a/yjit_asm.c b/yjit_asm.c
index 1b44587e3c..31e1528ff0 100644
--- a/yjit_asm.c
+++ b/yjit_asm.c
@@ -224,18 +224,11 @@ uint8_t* alloc_exec_mem(uint32_t mem_size)
// How many code pages to allocate at once
#define PAGES_PER_ALLOC 512
-typedef struct free_list_node
-{
- uint8_t* page_ptr;
-
- struct free_list_node *next;
-
-} freelist_t;
-
-freelist_t *freelist = NULL;
+// Head of the list of free code pages
+code_page_t *freelist = NULL;
// Allocate a single code page from a pool of free pages
-uint8_t* alloc_code_page()
+code_page_t* alloc_code_page()
{
fprintf(stderr, "allocating code page\n");
@@ -246,29 +239,25 @@ uint8_t* alloc_code_page()
// Do this in reverse order so we allocate our pages in order
for (int i = PAGES_PER_ALLOC - 1; i >= 0; --i) {
- freelist_t* node = malloc(sizeof(freelist_t));
- node->page_ptr = code_chunk + i * CODE_PAGE_SIZE;
- node->next = freelist;
- freelist = node;
+ code_page_t* code_page = malloc(sizeof(code_page_t));
+ code_page->mem_block = code_chunk + i * CODE_PAGE_SIZE;
+ code_page->page_size = CODE_PAGE_SIZE;
+ code_page->_next = freelist;
+ freelist = code_page;
}
}
- freelist_t* free_node = freelist;
- uint8_t* page_ptr = freelist->page_ptr;
-
- freelist = freelist->next;
- free(free_node);
+ code_page_t* free_page = freelist;
+ freelist = freelist->_next;
- return page_ptr;
+ return free_page;
}
// Put a code page back into the allocation pool
-void free_code_page(uint8_t* page_ptr)
+void free_code_page(code_page_t* code_page)
{
- freelist_t* node = malloc(sizeof(freelist_t));
- node->page_ptr = page_ptr;
- node->next = freelist;
- freelist = node;
+ code_page->_next = freelist;
+ freelist = code_page;
}
// Initialize a code block object