diff options
author | Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com> | 2021-07-13 14:56:02 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:37 -0400 |
commit | 350b686a2c6cc8f27466222cf8520a8fda931ea2 (patch) | |
tree | 36dbefe0c991e13fcd4c07ee7e10845c2d268d87 /yjit_asm.c | |
parent | 2440fafba00b6646b312a0c74798523bfa44bfe9 (diff) |
First pass at code page GC object.
Diffstat (limited to 'yjit_asm.c')
-rw-r--r-- | yjit_asm.c | 39 |
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 |