|
79 | 79 | #define ATB_3_IS_FREE(a) (((a) & ATB_MASK_3) == 0)
|
80 | 80 |
|
81 | 81 | #if MICROPY_GC_SPLIT_HEAP
|
82 |
| -#define NEXT_AREA(area) (area->next) |
| 82 | +#define NEXT_AREA(area) ((area)->next) |
83 | 83 | #else
|
84 | 84 | #define NEXT_AREA(area) (NULL)
|
85 | 85 | #endif
|
@@ -129,7 +129,13 @@ STATIC void gc_setup_area(mp_state_mem_area_t *area, void *start, void *end) {
|
129 | 129 | // => T = A * (1 + BLOCKS_PER_ATB / BLOCKS_PER_FTB + BLOCKS_PER_ATB * BYTES_PER_BLOCK)
|
130 | 130 | size_t total_byte_len = (byte *)end - (byte *)start;
|
131 | 131 | #if MICROPY_ENABLE_FINALISER
|
132 |
| - area->gc_alloc_table_byte_len = (total_byte_len - ALLOC_TABLE_GAP_BYTE) * MP_BITS_PER_BYTE / (MP_BITS_PER_BYTE + MP_BITS_PER_BYTE * BLOCKS_PER_ATB / BLOCKS_PER_FTB + MP_BITS_PER_BYTE * BLOCKS_PER_ATB * BYTES_PER_BLOCK); |
| 132 | + area->gc_alloc_table_byte_len = (total_byte_len - ALLOC_TABLE_GAP_BYTE) |
| 133 | + * MP_BITS_PER_BYTE |
| 134 | + / ( |
| 135 | + MP_BITS_PER_BYTE |
| 136 | + + MP_BITS_PER_BYTE * BLOCKS_PER_ATB / BLOCKS_PER_FTB |
| 137 | + + MP_BITS_PER_BYTE * BLOCKS_PER_ATB * BYTES_PER_BLOCK |
| 138 | + ); |
133 | 139 | #else
|
134 | 140 | area->gc_alloc_table_byte_len = (total_byte_len - ALLOC_TABLE_GAP_BYTE) / (1 + MP_BITS_PER_BYTE / 2 * BYTES_PER_BLOCK);
|
135 | 141 | #endif
|
@@ -165,11 +171,19 @@ STATIC void gc_setup_area(mp_state_mem_area_t *area, void *start, void *end) {
|
165 | 171 | #endif
|
166 | 172 |
|
167 | 173 | DEBUG_printf("GC layout:\n");
|
168 |
| - DEBUG_printf(" alloc table at %p, length " UINT_FMT " bytes, " UINT_FMT " blocks\n", MP_STATE_MEM(area).gc_alloc_table_start, MP_STATE_MEM(area).gc_alloc_table_byte_len, MP_STATE_MEM(area).gc_alloc_table_byte_len * BLOCKS_PER_ATB); |
| 174 | + DEBUG_printf(" alloc table at %p, length " UINT_FMT " bytes, " |
| 175 | + UINT_FMT " blocks\n", |
| 176 | + area->gc_alloc_table_start, area->gc_alloc_table_byte_len, |
| 177 | + area->gc_alloc_table_byte_len * BLOCKS_PER_ATB); |
169 | 178 | #if MICROPY_ENABLE_FINALISER
|
170 |
| - DEBUG_printf(" finaliser table at %p, length " UINT_FMT " bytes, " UINT_FMT " blocks\n", MP_STATE_MEM(area).gc_finaliser_table_start, gc_finaliser_table_byte_len, gc_finaliser_table_byte_len * BLOCKS_PER_FTB); |
| 179 | + DEBUG_printf(" finaliser table at %p, length " UINT_FMT " bytes, " |
| 180 | + UINT_FMT " blocks\n", area->gc_finaliser_table_start, |
| 181 | + gc_finaliser_table_byte_len, |
| 182 | + gc_finaliser_table_byte_len * BLOCKS_PER_FTB); |
171 | 183 | #endif
|
172 |
| - DEBUG_printf(" pool at %p, length " UINT_FMT " bytes, " UINT_FMT " blocks\n", MP_STATE_MEM(area).gc_pool_start, gc_pool_block_len * BYTES_PER_BLOCK, gc_pool_block_len); |
| 184 | + DEBUG_printf(" pool at %p, length " UINT_FMT " bytes, " |
| 185 | + UINT_FMT " blocks\n", area->gc_pool_start, |
| 186 | + gc_pool_block_len * BYTES_PER_BLOCK, gc_pool_block_len); |
173 | 187 | }
|
174 | 188 |
|
175 | 189 | void gc_init(void *start, void *end) {
|
|
0 commit comments