Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
0066e70
Added runtime/caml/addrmap.h
shakthimaan Jan 19, 2020
e7f0fae
Add and compile runtime/addrmap.c
shakthimaan Jan 19, 2020
9721fee
Remove extern_replay_trail & update extern_* with caml_addrmap_clear
shakthimaan Jan 20, 2020
2261e8f
Remove int typecast in extern.c:writecode16() function
shakthimaan Jan 20, 2020
c758320
Replace trail_{entry, block} with caml_addrmap_* functions
shakthimaan Jan 20, 2020
93a2318
Update caml_output_value_to_{string, malloc} functions
shakthimaan Jan 20, 2020
08fabc8
Add Closure_tag case in extern.c with caml_failwith
shakthimaan Jan 20, 2020
f4a5d35
Re-add caml_output_value_to_bytes ()
shakthimaan Jan 21, 2020
dc16a0f
Add copyright notice and fix 80 column width alignment
shakthimaan Jan 27, 2020
5f4ec29
Use CAMLassert instead of Assert
shakthimaan Feb 2, 2020
af82c91
Retain type cast from OCaml trunk over Multicore OCaml
shakthimaan Feb 2, 2020
db97dab
Use Field over Op_val
shakthimaan Feb 2, 2020
2dfe33a
Remove Closure_tag case in extern.c
shakthimaan Feb 2, 2020
ffc6c50
Use only camly_fatal_error
shakthimaan Feb 2, 2020
3d07255
Re-instantiate const for char * ident in extern.c
shakthimaan Feb 2, 2020
066b486
Re-instantiate the if check for external heap
shakthimaan Feb 2, 2020
09391c5
Explicitly initialize output_location
shakthimaan Feb 2, 2020
7ef0a4c
Specify caml_output_value_to_string using caml_output_value_to_bytes
shakthimaan Feb 2, 2020
b99f375
Re-instantiate code_fragment to handle closures
shakthimaan Feb 3, 2020
777a491
Re-instantiate char const for *identifier in custom.h
shakthimaan Feb 3, 2020
79ac103
Restore compatibility for older MSVC
shakthimaan Feb 12, 2020
4826c96
Updated Changes file
shakthimaan Feb 12, 2020
b8c1955
Use CAML_INTERNALS as suggested by @dra27 and trim spaces
shakthimaan Feb 12, 2020
06f5cac
define CAML_INTERNALS in addrmap.c
shakthimaan Feb 12, 2020
884a25b
Added caml_addrmap_initialize function
shakthimaan Feb 18, 2020
d7eed00
Use large memory and key in addrmap
shakthimaan Feb 28, 2020
2502f03
Remove unused code
shakthimaan Feb 28, 2020
2f56371
Use caml_init_intern_addrmap_size
shakthimaan Feb 28, 2020
314a36e
Partial compilation with ocamlrun fail
shakthimaan Mar 1, 2020
105d4d9
Use Init_intern_addrmap_def
shakthimaan Mar 2, 2020
fd2a5b5
Update shift and mask in resize logic
shakthimaan Mar 2, 2020
354171d
Use load factor 0.9
shakthimaan Mar 5, 2020
342dd3c
Remove unused code in addrmap.h
shakthimaan Mar 5, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ Working version

### Runtime system:

- #9293: Use addrmap hash table for marshaling
(Stephen Dolan and KC Sivaramakrishnan)

- #9119: Make [caml_stat_resize_noexc] compatible with the [realloc]
API when the old block is NULL.
(Jacques-Henri Jourdan, review by Xavier Leroy)
Expand Down
40 changes: 32 additions & 8 deletions runtime/.depend
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,15 @@ io_b.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_b.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_b.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_b.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down Expand Up @@ -448,12 +451,15 @@ io_bd.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_bd.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_bd.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_bd.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down Expand Up @@ -750,12 +756,15 @@ io_bi.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_bi.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_bi.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_bi.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down Expand Up @@ -1047,12 +1056,15 @@ io_bpic.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_bpic.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_bpic.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_bpic.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down Expand Up @@ -1303,12 +1315,15 @@ io_n.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_n.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_n.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_n.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down Expand Up @@ -1596,12 +1611,15 @@ io_nd.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_nd.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_nd.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_nd.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down Expand Up @@ -1889,12 +1907,15 @@ io_ni.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_ni.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_ni.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_ni.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down Expand Up @@ -2182,12 +2203,15 @@ io_npic.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \
caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \
caml/domain.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \
caml/signals.h caml/sys.h
addrmap_npic.$(O): addrmap.c caml/config.h caml/m.h caml/s.h caml/memory.h \
caml/compatibility.h caml/config.h caml/misc.h caml/mlvalues.h \
caml/domain_state.h caml/domain_state.tbl caml/domain.h caml/addrmap.h
extern_npic.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/config.h caml/custom.h caml/fail.h caml/gc.h caml/intext.h \
caml/io.h caml/io.h caml/md5.h caml/memory.h caml/gc.h caml/major_gc.h \
caml/freelist.h caml/minor_gc.h caml/address_class.h caml/domain.h \
caml/misc.h caml/mlvalues.h caml/reverse.h
caml/misc.h caml/mlvalues.h caml/reverse.h caml/addrmap.h
intern_npic.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \
caml/s.h caml/mlvalues.h caml/domain_state.h caml/domain_state.tbl \
caml/callback.h caml/config.h caml/custom.h caml/fail.h caml/gc.h \
Expand Down
6 changes: 3 additions & 3 deletions runtime/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ BYTECODE_C_SOURCES := $(addsuffix .c, \
interp misc stacks fix_code startup_aux startup_byt freelist major_gc \
minor_gc memory alloc roots_byt globroots fail_byt signals \
signals_byt printexc backtrace_byt backtrace compare ints \
floats str array io extern intern hash sys meta parsing gc_ctrl md5 obj \
lexing callback debugger weak compact finalise custom dynlink \
floats str array io addrmap extern intern hash sys meta parsing gc_ctrl \
md5 obj lexing callback debugger weak compact finalise custom dynlink \
spacetime_byt afl $(UNIX_OR_WIN32) bigarray main memprof domain)

NATIVE_C_SOURCES := $(addsuffix .c, \
startup_aux startup_nat main fail_nat roots_nat signals \
signals_nat misc freelist major_gc minor_gc memory alloc compare ints \
floats str array io extern intern hash sys parsing gc_ctrl md5 obj \
floats str array io addrmap extern intern hash sys parsing gc_ctrl md5 obj \
lexing $(UNIX_OR_WIN32) printexc callback weak compact finalise custom \
globroots backtrace_nat backtrace dynlink_nat debugger meta \
dynlink clambda_checks spacetime_nat spacetime_snapshot afl bigarray \
Expand Down
168 changes: 168 additions & 0 deletions runtime/addrmap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
/**************************************************************************/
/* */
/* OCaml */
/* */
/* KC Sivaramakrishnan, Indian Institute of Technology, Madras */
/* Stephen Dolan, University of Cambridge */
/* */
/* Copyright 2020 Indian Institute of Technology, Madras */
/* Copyright 2020 University of Cambridge */
/* */
/* All rights reserved. This file is distributed under the terms of */
/* the GNU Lesser General Public License version 2.1, with the */
/* special exception on linking described in the file LICENSE. */
/* */
/**************************************************************************/

#define CAML_INTERNALS

#include "caml/config.h"
#include "caml/memory.h"
#include "caml/addrmap.h"
#include "caml/startup_aux.h"

int addrmap_page_table_initialize(struct addrmap_page_table *t, mlsize_t count)
{
uintnat pagesize = Page(count * 4);

t->size = 1;
t->shift = 8 * sizeof(uintnat);

/* Aim for initial load factor between 1/4 and 1/2 */
while (t->size < 2 * pagesize) {
t->size <<= 1;
t->shift -= 1;
}
t->mask = t->size - 1;
t->occupancy = 0;

/* Allocate for entries */
mlsize_t sz = t->size;
CAMLassert(sz > 0 && (sz & (sz - 1)) == 0); /* sz must be a power of 2 */
t->entries = caml_stat_alloc(sizeof(struct addrmap_entry) * sz);
for (int i = 0; i < sz; i++) {
t->entries[i].key = ADDRMAP_INVALID_KEY;
t->entries[i].value = ADDRMAP_NOT_PRESENT;
}

if (t->entries == NULL)
return -1;
else
return 0;
}

void display_addrmap(struct addrmap_page_table* t)
{
mlsize_t i;

printf("Display addrmap page table entries\n");
printf("size = %ld\n", t->size);
printf("occupancy = %ld\n", t->occupancy);
for (i = 0; i < t->size; i++)
printf("addrmap_page_table.entries[%ld] = %ld:%ld\n", i, t->entries[i].key, t->entries[i].value);
printf("\n\n");
}

int addrmap_page_table_resize(struct addrmap_page_table* t)
{
struct addrmap_entry* new_entries;
uintnat i, h, new_size, new_shift, new_mask;

caml_gc_message (0x08, "Growing page table to %"
ARCH_INTNAT_PRINTF_FORMAT "u entries\n",
t->size);

new_size = t->size * 2;
new_shift = t->shift - 1;
new_mask = new_size - 1;
new_entries = caml_stat_alloc(sizeof(struct addrmap_entry) * new_size);

for (int i = 0; i < new_size; i++) {
new_entries[i].key = ADDRMAP_INVALID_KEY;
new_entries[i].value = ADDRMAP_NOT_PRESENT;
}

for (i = 0; i < t->size; i++) {
struct addrmap_entry e = t->entries[i];
if (e.key != ADDRMAP_INVALID_KEY) {
h = Hash(Page(e.key), new_shift);

if (new_entries[h].key == ADDRMAP_INVALID_KEY) {
new_entries[h].key = t->entries[i].key;
new_entries[h].value = t->entries[i].value;
}
else {
while (1) {
h = (h + 1) & new_mask;
if (new_entries[h].key == ADDRMAP_INVALID_KEY) {
new_entries[h].key = t->entries[i].key;
new_entries[h].value = t->entries[i].value;
break;
}
}
}
}
}

t->size = new_size;
t->shift = new_shift;
t->mask = new_mask;

caml_stat_free(t->entries);
t->entries = new_entries;
return 0;
}

value* addrmap_page_table_lookup(struct addrmap_page_table* t, value key)
{
uintnat h; /* e, i; */

h = Hash(Page(key), t->shift);
/* The first hit is almost always successful, so optimize for this case */
if (t->entries[h].key == ADDRMAP_INVALID_KEY) {
t->entries[h].key = key;
t->occupancy++;
}
if (t->entries[h].key == key) {
return &t->entries[h].value;
}

while (1) {
h = (h + 1) & t->mask;
if (t->entries[h].key == ADDRMAP_INVALID_KEY) {
t->entries[h].key = key;
t->occupancy++;
}
if (t->entries[h].key == key) {
return &t->entries[h].value;
}
}

return NULL;
}

void caml_addrmap_clear(struct addrmap_page_table* t) {
caml_stat_free(t->entries);
t->entries = NULL;
t->occupancy = 0;
t->mask = 0;
t->shift = 0;
t->size = 0;
}

void caml_addrmap_initialize(struct addrmap_page_table* t) {
addrmap_page_table_initialize(t, caml_init_intern_addrmap_size);
}

value* caml_addrmap_insert_pos(struct addrmap_page_table* t, value key) {
CAMLassert(Is_block(key));

/* Resize to keep load factor around 0.9 */
if (t->occupancy > 0.9 * t->size) {

if (addrmap_page_table_resize(t) != 0) {
return NULL;
}
}
return addrmap_page_table_lookup(t, key);
}
62 changes: 62 additions & 0 deletions runtime/caml/addrmap.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/**************************************************************************/
/* */
/* OCaml */
/* */
/* Stephen Dolan, University of Cambridge */
/* */
/* Copyright 2020 Indian Institute of Technology, Madras */
/* Copyright 2020 University of Cambridge */
/* */
/* All rights reserved. This file is distributed under the terms of */
/* the GNU Lesser General Public License version 2.1, with the */
/* special exception on linking described in the file LICENSE. */
/* */
/**************************************************************************/

#ifndef CAML_ADDRMAP_H
#define CAML_ADDRMAP_H

#ifdef CAML_INTERNALS

#include "mlvalues.h"

#define Page(p) ((uintnat) (p) >> 2)

/* Multiplicative Fibonacci hashing
(Knuth, TAOCP vol 3, section 6.4, page 518).
HASH_FACTOR is (sqrt(5) - 1) / 2 * 2^wordsize. */
#ifdef ARCH_SIXTYFOUR
#define HASH_FACTOR 11400714819323198486UL
#else
#define HASH_FACTOR 2654435769UL
#endif
#define Hash(key,shift) (((key) * HASH_FACTOR) >> shift)

struct addrmap_entry { value key, value; };

struct addrmap_page_table {
mlsize_t size; /* size == 1 << (wordsize - shift) */
int shift;
mlsize_t mask; /* mask == size - 1 */
mlsize_t occupancy;
struct addrmap_entry* entries; /* [size] */
};

value* caml_addrmap_lookup(struct addrmap_page_table* t, value key);

#define ADDRMAP_NOT_PRESENT ((value)(0))
#define ADDRMAP_INVALID_KEY ((value)(0))

value* caml_addrmap_insert_pos(struct addrmap_page_table* t, value v);

void caml_addrmap_clear(struct addrmap_page_table* t);

void caml_addrmap_initialize(struct addrmap_page_table* t);

void display_addrmap(struct addrmap_page_table* t);
value* addrmap_page_table_lookup(struct addrmap_page_table* t, value key);
int addrmap_page_table_resize(struct addrmap_page_table* t);

#endif /* CAML_INTERNALS */

#endif /* CAML_ADDRMAP_H */
Loading