[m-rev.] for post commit review by Quan: region headers
Zoltan Somogyi
zs at csse.unimelb.edu.au
Thu Dec 20 18:37:44 AEDT 2007
runtime/mercury_region.[ch]:
Misc cleanups of rbmm stuff.
runtime/mercury_types.h:
library/region_builtin.m:
Conform to the changes in mercury_region.h.
Zoltan.
cvs diff: Diffing .
cvs diff: Diffing analysis
cvs diff: Diffing bindist
cvs diff: Diffing boehm_gc
cvs diff: Diffing boehm_gc/Mac_files
cvs diff: Diffing boehm_gc/cord
cvs diff: Diffing boehm_gc/cord/private
cvs diff: Diffing boehm_gc/doc
cvs diff: Diffing boehm_gc/include
cvs diff: Diffing boehm_gc/include/private
cvs diff: Diffing boehm_gc/libatomic_ops-1.2
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/doc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/tests
cvs diff: Diffing boehm_gc/tests
cvs diff: Diffing boehm_gc/windows-untested
cvs diff: Diffing boehm_gc/windows-untested/vc60
cvs diff: Diffing boehm_gc/windows-untested/vc70
cvs diff: Diffing boehm_gc/windows-untested/vc71
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
cvs diff: Diffing compiler/notes
cvs diff: Diffing debian
cvs diff: Diffing debian/patches
cvs diff: Diffing deep_profiler
cvs diff: Diffing deep_profiler/notes
cvs diff: Diffing doc
cvs diff: Diffing extras
cvs diff: Diffing extras/base64
cvs diff: Diffing extras/cgi
cvs diff: Diffing extras/complex_numbers
cvs diff: Diffing extras/complex_numbers/samples
cvs diff: Diffing extras/complex_numbers/tests
cvs diff: Diffing extras/concurrency
cvs diff: Diffing extras/curs
cvs diff: Diffing extras/curs/samples
cvs diff: Diffing extras/curses
cvs diff: Diffing extras/curses/sample
cvs diff: Diffing extras/dynamic_linking
cvs diff: Diffing extras/error
cvs diff: Diffing extras/fixed
cvs diff: Diffing extras/gator
cvs diff: Diffing extras/gator/generations
cvs diff: Diffing extras/gator/generations/1
cvs diff: Diffing extras/graphics
cvs diff: Diffing extras/graphics/easyx
cvs diff: Diffing extras/graphics/easyx/samples
cvs diff: Diffing extras/graphics/mercury_allegro
cvs diff: Diffing extras/graphics/mercury_allegro/examples
cvs diff: Diffing extras/graphics/mercury_allegro/samples
cvs diff: Diffing extras/graphics/mercury_allegro/samples/demo
cvs diff: Diffing extras/graphics/mercury_allegro/samples/mandel
cvs diff: Diffing extras/graphics/mercury_allegro/samples/pendulum2
cvs diff: Diffing extras/graphics/mercury_allegro/samples/speed
cvs diff: Diffing extras/graphics/mercury_glut
cvs diff: Diffing extras/graphics/mercury_opengl
cvs diff: Diffing extras/graphics/mercury_tcltk
cvs diff: Diffing extras/graphics/samples
cvs diff: Diffing extras/graphics/samples/calc
cvs diff: Diffing extras/graphics/samples/gears
cvs diff: Diffing extras/graphics/samples/maze
cvs diff: Diffing extras/graphics/samples/pent
cvs diff: Diffing extras/lazy_evaluation
cvs diff: Diffing extras/lex
cvs diff: Diffing extras/lex/samples
cvs diff: Diffing extras/lex/tests
cvs diff: Diffing extras/log4m
cvs diff: Diffing extras/logged_output
cvs diff: Diffing extras/moose
cvs diff: Diffing extras/moose/samples
cvs diff: Diffing extras/moose/tests
cvs diff: Diffing extras/mopenssl
cvs diff: Diffing extras/morphine
cvs diff: Diffing extras/morphine/non-regression-tests
cvs diff: Diffing extras/morphine/scripts
cvs diff: Diffing extras/morphine/source
cvs diff: Diffing extras/net
cvs diff: Diffing extras/odbc
cvs diff: Diffing extras/posix
cvs diff: Diffing extras/posix/samples
cvs diff: Diffing extras/quickcheck
cvs diff: Diffing extras/quickcheck/tutes
cvs diff: Diffing extras/references
cvs diff: Diffing extras/references/samples
cvs diff: Diffing extras/references/tests
cvs diff: Diffing extras/solver_types
cvs diff: Diffing extras/solver_types/library
cvs diff: Diffing extras/trailed_update
cvs diff: Diffing extras/trailed_update/samples
cvs diff: Diffing extras/trailed_update/tests
cvs diff: Diffing extras/windows_installer_generator
cvs diff: Diffing extras/windows_installer_generator/sample
cvs diff: Diffing extras/windows_installer_generator/sample/images
cvs diff: Diffing extras/xml
cvs diff: Diffing extras/xml/samples
cvs diff: Diffing extras/xml_stylesheets
cvs diff: Diffing java
cvs diff: Diffing java/runtime
cvs diff: Diffing library
Index: library/region_builtin.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/library/region_builtin.m,v
retrieving revision 1.5
diff -u -r1.5 region_builtin.m
--- library/region_builtin.m 8 Dec 2007 11:37:05 -0000 1.5
+++ library/region_builtin.m 20 Dec 2007 07:09:08 -0000
@@ -49,7 +49,7 @@
:- pragma foreign_decl("C", "#include \"mercury_region.h\"").
-:- pragma foreign_type("C", region, "MR_Region *",
+:- pragma foreign_type("C", region, "MR_RegionHeader *",
[can_pass_as_mercury_type]).
:- pragma foreign_proc("C",
cvs diff: Diffing mdbcomp
cvs diff: Diffing profiler
cvs diff: Diffing robdd
cvs diff: Diffing runtime
Index: runtime/mercury_region.c
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_region.c,v
retrieving revision 1.6
diff -u -r1.6 mercury_region.c
--- runtime/mercury_region.c 19 Dec 2007 16:35:24 -0000 1.6
+++ runtime/mercury_region.c 20 Dec 2007 07:10:10 -0000
@@ -20,7 +20,7 @@
#define word_sizeof(s) (sizeof(s) / sizeof(MR_Word))
MR_RegionPage *MR_region_free_page_list;
-MR_Region *MR_live_region_list;
+MR_RegionHeader *MR_live_region_list;
MR_RegionIteFixedFrame *MR_region_ite_sp = NULL;
MR_RegionDisjFixedFrame *MR_region_disj_sp = NULL;
@@ -59,13 +59,14 @@
static MR_RegionPage *MR_region_get_free_page(void);
static void MR_region_nullify_entries_in_commit_stack(
- MR_Region *region);
+ MR_RegionHeader *region);
static void MR_region_nullify_in_commit_frame(
MR_RegionCommitFixedFrame *frame,
- MR_Region *region);
-static void MR_region_nullify_in_ite_frame(MR_Region *region);
+ MR_RegionHeader *region);
+static void MR_region_nullify_in_ite_frame(
+ MR_RegionHeader *region);
-static void MR_region_extend_region(MR_Region *);
+static void MR_region_extend_region(MR_RegionHeader *);
#ifdef MR_RBMM_DEBUG
static int MR_region_get_frame_number(MR_Word *);
@@ -79,11 +80,12 @@
static void MR_region_get_new_pages_and_new_words(
MR_RegionSnapshot *snapshot, int *new_pages,
int *new_words);
+
/*---------------------------------------------------------------------------*/
/* Page operations. */
static MR_RegionPage *
-MR_region_request_pages()
+MR_region_request_pages(void)
{
MR_RegionPage *pages;
int bytes_to_request;
@@ -139,23 +141,23 @@
** Region_Struct.
*/
-MR_Region *
+MR_RegionHeader *
MR_region_create_region(void)
{
MR_RegionPage *page;
- MR_Region *region;
+ MR_RegionHeader *region;
/* This is the first page of the region. */
page = MR_region_get_free_page();
/*
** In the first page, we will store the region header, which occupies
- ** word_sizeof(MR_Region) words from the start of the data area of the
- ** page.
+ ** word_sizeof(MR_RegionHeader) words from the start of the data area
+ ** of the page.
*/
- region = (MR_Region *) (page->MR_regionpage_space);
+ region = (MR_RegionHeader *) (page->MR_regionpage_space);
region->MR_region_next_available_word = (MR_Word *)
- (page->MR_regionpage_space + word_sizeof(MR_Region));
+ (page->MR_regionpage_space + word_sizeof(MR_RegionHeader));
region->MR_region_last_page = page;
region->MR_region_removal_counter = 1;
region->MR_region_sequence_number = MR_region_sequence_number++;
@@ -183,7 +185,7 @@
}
static void
-MR_region_nullify_entries_in_commit_stack(MR_Region *region)
+MR_region_nullify_entries_in_commit_stack(MR_RegionHeader *region)
{
MR_RegionCommitFixedFrame *frame;
@@ -196,13 +198,13 @@
static void
MR_region_nullify_in_commit_frame(MR_RegionCommitFixedFrame *commit_frame,
- MR_Region *region)
+ MR_RegionHeader *region)
{
- MR_RegionCommitSave *commit_save;
- int i;
+ MR_RegionCommitSave *commit_save;
+ int i;
commit_save = ( MR_RegionCommitSave *) (
- ( MR_Word *) commit_frame + MR_REGION_COMMIT_FRAME_FIXED_SIZE);
+ (MR_Word *) commit_frame + MR_REGION_COMMIT_FRAME_FIXED_SIZE);
/*
** Loop through the saved regions and nullify the entry of the input
@@ -210,7 +212,8 @@
*/
for (i = 0; i < commit_frame->MR_rcff_num_saved_regions; i++) {
if (commit_save != NULL &&
- commit_save->MR_commit_save_region == region) {
+ commit_save->MR_commit_save_region == region)
+ {
commit_save->MR_commit_save_region = NULL;
break;
} else {
@@ -220,7 +223,7 @@
}
static void
-MR_region_nullify_in_ite_frame(MR_Region *region)
+MR_region_nullify_in_ite_frame(MR_RegionHeader *region)
{
MR_RegionIteFixedFrame *ite_frame;
MR_RegionIteProtect *ite_prot;
@@ -247,7 +250,7 @@
}
void
-MR_region_destroy_region(MR_Region *region)
+MR_region_destroy_region(MR_RegionHeader *region)
{
if (region->MR_region_commit_frame != NULL) {
MR_region_nullify_entries_in_commit_stack(region);
@@ -279,7 +282,7 @@
** This method is to be called at the start of the then part of an ite with
** semidet condition (most of the times).
** XXX At that point we will only check if the region is disj-protected or not.
-** At that point we do not have to check whether this ite-protected region is
+** At that point we do not have to check whether this ite-protected region is
** disj-protected or not. It is because the region is protected for this ite
** only if it has not been protected before the ite and from the start of
** this ite to the point when this method is called, i.e., the condition, the
@@ -288,7 +291,7 @@
*/
void
-MR_remove_undisjprotected_region_ite_then_semidet(MR_Region *region)
+MR_remove_undisjprotected_region_ite_then_semidet(MR_RegionHeader *region)
{
/*
MR_region_debug_try_remove_region(region);
@@ -312,7 +315,7 @@
*/
void
-MR_remove_undisjprotected_region_ite_then_nondet(MR_Region *region)
+MR_remove_undisjprotected_region_ite_then_nondet(MR_RegionHeader *region)
{
MR_region_debug_try_remove_region(region);
@@ -327,7 +330,7 @@
}
void
-MR_region_remove_region(MR_Region *region)
+MR_region_remove_region(MR_RegionHeader *region)
{
MR_region_debug_try_remove_region(region);
@@ -340,12 +343,13 @@
/*
** This logical removal happens in a commit operation. If the region
- ** is *new* since the start of the commit we mark the region so that it
- ** will be destroyed at the commit point.
+ ** is *new* since the start of the commit we mark the region so that
+ ** it will be destroyed at the commit point.
*/
if (MR_region_commit_sp != NULL &&
- MR_region_commit_sp->MR_rcff_saved_sequence_number <=
- region->MR_region_sequence_number) {
+ MR_region_commit_sp->MR_rcff_saved_sequence_number <=
+ region->MR_region_sequence_number)
+ {
region->MR_region_destroy_at_commit = 1;
}
/*if (MR_region_commit_sp != NULL) {
@@ -357,12 +361,13 @@
}
MR_Word *
-MR_region_alloc(MR_Region *region, unsigned int words)
+MR_region_alloc(MR_RegionHeader *region, unsigned int words)
{
MR_Word *allocated_cell;
if (MR_region_available_space(region->MR_region_last_page,
- region->MR_region_next_available_word) < words) {
+ region->MR_region_next_available_word) < words)
+ {
MR_region_extend_region(region);
}
@@ -378,9 +383,10 @@
}
static void
-MR_region_extend_region(MR_Region *region)
+MR_region_extend_region(MR_RegionHeader *region)
{
MR_RegionPage *page;
+
page = MR_region_get_free_page();
region->MR_region_last_page->MR_regionpage_next = page;
region->MR_region_last_page = page;
@@ -393,7 +399,7 @@
MR_RegionCommitSave *first_commit_save)
{
MR_RegionCommitSave *commit_save;
- MR_Region *region;
+ MR_RegionHeader *region;
int i;
commit_save = first_commit_save;
@@ -405,7 +411,7 @@
** XXX Because we save only regions that are live at entry, not
** live at exit, and not protected at entry, at the commit point it
** must be the case that a logical removal has happened to the
- ** region, So just need to destroy it at commit.
+ ** region, So just need to destroy it at commit.
*/
MR_region_destroy_region(region);
}
@@ -419,7 +425,7 @@
void
MR_commit_success_destroy_marked_new_regions(MR_Word saved_region_seq_number)
{
- MR_Region *region;
+ MR_RegionHeader *region;
region = MR_live_region_list;
while (region != NULL &&
@@ -438,13 +444,14 @@
}
int
-MR_region_is_disj_protected(MR_Region *region)
+MR_region_is_disj_protected(MR_RegionHeader *region)
{
if (MR_region_disj_sp != NULL &&
- MR_region_disj_sp->MR_rdff_saved_sequence_number >
- region->MR_region_sequence_number) {
+ MR_region_disj_sp->MR_rdff_saved_sequence_number >
+ region->MR_region_sequence_number)
+ {
return MR_TRUE;
- }
+ }
return MR_FALSE;
}
/*---------------------------------------------------------------------------*/
@@ -467,34 +474,34 @@
}
void
-MR_region_create_region_msg(MR_Region *region)
+MR_region_create_region_msg(MR_RegionHeader *region)
{
printf("Create region #%d (%d).\n", region->MR_region_sequence_number,
region);
}
void
-MR_region_try_remove_region_msg(MR_Region *region)
+MR_region_try_remove_region_msg(MR_RegionHeader *region)
{
printf("Try removing region ");
MR_region_region_struct_removal_info_msg(region);
}
void
-MR_region_destroy_region_msg(MR_Region *region)
+MR_region_destroy_region_msg(MR_RegionHeader *region)
{
printf("Destroy region #%d.\n", region->MR_region_sequence_number);
}
void
-MR_region_logically_remove_region_msg(MR_Region *region)
+MR_region_logically_remove_region_msg(MR_RegionHeader *region)
{
printf("Logically remove region #%d.\n",
region->MR_region_sequence_number);
}
void
-MR_region_region_struct_removal_info_msg(MR_Region *region)
+MR_region_region_struct_removal_info_msg(MR_RegionHeader *region)
{
printf("#%d (%d)\n", region->MR_region_sequence_number, region);
printf("\tLogically removed: %d\n", region->MR_region_logical_removed);
@@ -516,7 +523,7 @@
void
MR_region_push_ite_frame_msg(MR_RegionIteFixedFrame *ite_frame)
{
- int frame_number;
+ int frame_number;
frame_number = MR_region_get_frame_number( (MR_Word *) ite_frame);
printf("Push ite frame #%d: %d\n", frame_number, ite_frame);
@@ -538,7 +545,7 @@
(MR_Word *) (ite_frame->MR_riff_previous_ite_frame)),
ite_frame->MR_riff_previous_ite_frame);
printf("\tSaved sequence number: %d\n",
- ite_frame->MR_riff_saved_sequence_number);
+ ite_frame->MR_riff_saved_sequence_number);
MR_region_ite_frame_protected_regions_msg(ite_frame);
MR_region_ite_frame_snapshots_msg(ite_frame);
}
@@ -618,8 +625,8 @@
void
MR_region_disj_frame_snapshots_msg(MR_RegionDisjFixedFrame *disj_frame)
{
- MR_RegionSnapshot *snapshot;
- int i;
+ MR_RegionSnapshot *snapshot;
+ int i;
if (disj_frame->MR_rdff_num_snapshots > 10) {
printf("Number of snapshots: %d\n", disj_frame->MR_rdff_num_snapshots);
@@ -657,7 +664,7 @@
MR_region_commit_frame_msg(MR_RegionCommitFixedFrame *commit_frame)
{
MR_RegionCommitSave *commit_save;
- int i;
+ int i;
printf("Commit frame #%d: %d\n",
MR_region_get_frame_number((MR_Word *)commit_frame), commit_frame);
@@ -680,8 +687,8 @@
printf("\tNumber of saved regions: %d\n",
commit_frame->MR_rcff_num_saved_regions);
- for (i = 0; i < commit_frame->MR_rcff_num_saved_regions; i++,
- commit_save++)
+ for (i = 0; i < commit_frame->MR_rcff_num_saved_regions;
+ i++, commit_save++)
{
printf("Slot: %d, region: %d\n", commit_save,
commit_save->MR_commit_save_region);
@@ -693,7 +700,7 @@
MR_RegionCommitFixedFrame *commit_frame)
{
MR_RegionCommitSave *commit_save;
- int i;
+ int i;
/*
** This check is for development, when it becomes more stable, the
@@ -713,7 +720,6 @@
printf("\tAt slot: %d, saved region: %d\n", commit_save,
commit_save->MR_commit_save_region);
}
-
}
void
@@ -730,7 +736,7 @@
void
MR_region_fill_ite_protect_msg(MR_RegionIteProtect *ite_prot,
- MR_Region *region)
+ MR_RegionHeader *region)
{
if (ite_prot == NULL) {
printf("\tNot protect region #%d.\n",
@@ -738,12 +744,12 @@
} else {
printf("\tAt slot: %d, protect region #%d.\n", ite_prot,
region->MR_region_sequence_number);
- }
+ }
}
void
MR_region_fill_ite_snapshot_removed_msg(MR_RegionSnapshot *snapshot,
- MR_Region *region)
+ MR_RegionHeader *region)
{
if (snapshot == NULL) {
printf("\tNot take snapshot of region #%d.\n",
@@ -751,12 +757,12 @@
} else {
printf("\tAt slot: %d, save snapshot of region #%d.\n", snapshot,
region->MR_region_sequence_number);
- }
+ }
}
void
MR_region_fill_ite_snapshot_not_removed_msg(MR_RegionSnapshot *snapshot,
- MR_Region *region)
+ MR_RegionHeader *region)
{
printf("\tAt slot: %d, save snapshot of region #%d.\n", snapshot,
region->MR_region_sequence_number);
@@ -764,7 +770,7 @@
void
MR_region_fill_disj_snapshot_msg(MR_RegionSnapshot *snapshot,
- MR_Region *region)
+ MR_RegionHeader *region)
{
printf("\tAt slot: %d, save snapshot of region #%d.\n", snapshot,
region->MR_region_sequence_number);
@@ -772,18 +778,18 @@
void
MR_region_fill_commit_msg(MR_RegionCommitSave *commit_save,
- MR_Region *region)
+ MR_RegionHeader *region)
{
if (commit_save == NULL) {
printf("\tNot save region #%d.\n", region->MR_region_sequence_number);
} else {
printf("\tAt slot: %d, save region #%d.\n", commit_save,
region->MR_region_sequence_number);
- }
+ }
}
void
-MR_region_ite_unprotect_msg(MR_Region *region)
+MR_region_ite_unprotect_msg(MR_RegionHeader *region)
{
MR_RegionIteFixedFrame *old_ite_frame;
MR_RegionIteFixedFrame *new_ite_frame;
@@ -831,7 +837,7 @@
}
void
-MR_region_profile_destroyed_region(MR_Region *region)
+MR_region_profile_destroyed_region(MR_RegionHeader *region)
{
int allocated_size_of_region;
@@ -853,7 +859,7 @@
{
int new_words;
int new_pages;
- MR_Region *restoring_region;
+ MR_RegionHeader *restoring_region;
MR_region_get_new_pages_and_new_words(snapshot, &new_pages, &new_words);
MR_region_update_profiling_unit(&MR_rbmmp_pages_used, -new_pages);
@@ -957,17 +963,17 @@
printf("Pages instant reclaimed thanks to snapshot: %d.\n",
MR_rbmmp_pages_snapshot_instant_reclaimed);
MR_region_print_profiling_unit("Ite frames used:",
- &MR_rbmmp_num_ite_frames);
+ &MR_rbmmp_num_ite_frames);
MR_region_print_profiling_unit("Disj frames used:",
- &MR_rbmmp_num_disj_frames);
+ &MR_rbmmp_num_disj_frames);
MR_region_print_profiling_unit("Commit frames used:",
- &MR_rbmmp_num_commit_frames);
+ &MR_rbmmp_num_commit_frames);
MR_region_print_profiling_unit("Words used by ite frames:",
- &MR_rbmmp_words_used_by_ite_frames);
+ &MR_rbmmp_words_used_by_ite_frames);
MR_region_print_profiling_unit("Words used by disj frames:",
- &MR_rbmmp_words_used_by_disj_frames);
+ &MR_rbmmp_words_used_by_disj_frames);
MR_region_print_profiling_unit("Words used by commit frames:",
- &MR_rbmmp_words_used_by_commit_frames);
+ &MR_rbmmp_words_used_by_commit_frames);
}
#else /* Not define MR_RBMM_PROFILING. */
@@ -979,7 +985,7 @@
}
void
-MR_region_profile_destroyed_region(MR_Region *r)
+MR_region_profile_destroyed_region(MR_RegionHeader *r)
{
/* do nothing */
}
@@ -1013,7 +1019,7 @@
MR_region_get_new_pages_and_new_words(MR_RegionSnapshot *snapshot,
int *new_pages, int *new_words)
{
- MR_Region *restoring_region;
+ MR_RegionHeader *restoring_region;
MR_RegionPage *first_new_page;
restoring_region = snapshot->MR_snapshot_region;
@@ -1029,7 +1035,7 @@
snapshot->MR_snapshot_saved_next_available_word));
} else {
*new_pages = 0;
- *new_words = restoring_region->MR_region_next_available_word -
+ *new_words = restoring_region->MR_region_next_available_word -
snapshot->MR_snapshot_saved_next_available_word;
}
}
Index: runtime/mercury_region.h
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_region.h,v
retrieving revision 1.7
diff -u -r1.7 mercury_region.h
--- runtime/mercury_region.h 19 Dec 2007 16:35:24 -0000 1.7
+++ runtime/mercury_region.h 20 Dec 2007 07:06:18 -0000
@@ -51,7 +51,7 @@
#define MR_REGION_ITE_SNAPSHOT_SIZE 3
/*
** XXX The MR_REGION_DISJ_PROT_SIZE is no longer used. It should be removed
-** when the runtime support for RBMM becomes more stable. When removing it
+** when the runtime support for RBMM becomes more stable. When removing it,
** remember to make the compiler/options.m consistent with the removal here.
*/
#define MR_REGION_DISJ_PROT_SIZE 0
@@ -80,11 +80,12 @@
};
/*
-** A region is implemented as a single-linked list of (region) pages.
-** The information of the region itself (pointer to next available word,
-** removal counter, some other operational data) is stored in its first page.
+** A region is implemented as a singly-linked list of region pages.
+** All the information about the region itself is contained in the
+** region's header, which is stored at the start of the region's first page.
*/
-struct MR_Region_Struct {
+
+struct MR_RegionHeader_Struct {
/*
** Pointer to the last page of the region, i.e., the newest or last added
** page. This is needed when we need to enlarge the region.
@@ -128,8 +129,8 @@
*/
MR_Word MR_region_destroy_at_commit;
- MR_Region *MR_region_previous_region;
- MR_Region *MR_region_next_region;
+ MR_RegionHeader *MR_region_previous_region;
+ MR_RegionHeader *MR_region_next_region;
};
/*---------------------------------------------------------------------------*/
@@ -167,24 +168,24 @@
*/
struct MR_RegionSnapshot_Struct {
- MR_Region *MR_snapshot_region;
+ MR_RegionHeader *MR_snapshot_region;
MR_RegionPage *MR_snapshot_saved_last_page;
MR_Word *MR_snapshot_saved_next_available_word;
};
/* Protection information in an ite frame. */
struct MR_RegionIteProtect_Struct {
- MR_Region *MR_ite_prot_region;
+ MR_RegionHeader *MR_ite_prot_region;
};
/* Protection information in a disj frame. */
struct MR_RegionDisjProtect_Struct {
- MR_Region *MR_disj_prot_region;
+ MR_RegionHeader *MR_disj_prot_region;
};
/* Save information in a commit frame */
struct MR_RegionCommitSave_Struct {
- MR_Region *MR_commit_save_region;
+ MR_RegionHeader *MR_commit_save_region;
};
/*---------------------------------------------------------------------------*/
@@ -196,7 +197,7 @@
extern MR_RegionPage *MR_region_free_page_list;
/* The live regions are linked in a list. */
-extern MR_Region *MR_live_region_list;
+extern MR_RegionHeader *MR_live_region_list;
extern MR_Word MR_region_sequence_number;
@@ -208,10 +209,10 @@
/*---------------------------------------------------------------------------*/
/* Create a region. */
-extern MR_Region *MR_region_create_region(void);
+extern MR_RegionHeader *MR_region_create_region(void);
/* Destroy a region, i.e., physically deallocate the region. */
-extern void MR_region_destroy_region(MR_Region *);
+extern void MR_region_destroy_region(MR_RegionHeader *);
/*
** Remove a region.
@@ -219,14 +220,14 @@
** logically removed, i.e., we mark it as removed but not actually deallocate.
*/
-extern void MR_region_remove_region(MR_Region *);
+extern void MR_region_remove_region(MR_RegionHeader *);
extern void MR_remove_undisjprotected_region_ite_then_semidet(
- MR_Region *);
+ MR_RegionHeader *);
extern void MR_remove_undisjprotected_region_ite_then_nondet(
- MR_Region *);
+ MR_RegionHeader *);
/* Allocate a number of words into a region. */
-extern MR_Word *MR_region_alloc(MR_Region *, unsigned int);
+extern MR_Word *MR_region_alloc(MR_RegionHeader *, unsigned int);
#define MR_alloc_in_region(dest, region, num) \
MR_tag_alloc_in_region(dest, 0, region, num) \
@@ -234,14 +235,16 @@
#define MR_tag_alloc_in_region(dest, tag, region, num) \
do { \
(dest) = (MR_Word) MR_mkword((tag), (MR_Word) \
- MR_region_alloc((MR_Region *) (region), (num))); \
+ MR_region_alloc((MR_RegionHeader *) (region), (num))); \
} while (0)
+#define MR_region_page_end(region_page) \
+ ((region_page)->MR_regionpage_space + MR_REGION_PAGE_SPACE_SIZE)
+
#define MR_region_available_space(region_last_page, next_available_word)\
- ((region_last_page->MR_regionpage_space) + \
- MR_REGION_PAGE_SPACE_SIZE - next_available_word) \
+ (MR_region_page_end(region_last_page) - next_available_word)
-extern int MR_region_is_disj_protected(MR_Region *region);
+extern int MR_region_is_disj_protected(MR_RegionHeader *region);
/*---------------------------------------------------------------------------*/
/*
@@ -306,11 +309,11 @@
#define MR_region_fill_ite_protect(ite_sp, region_ptr, \
num_protected_regions, region_slot_reg) \
do { \
- MR_Region *region; \
+ MR_RegionHeader *region; \
MR_RegionIteProtect *ite_prot; \
\
MR_region_debug_start("fill_ite_protect"); \
- region = (MR_Region *) (region_ptr); \
+ region = (MR_RegionHeader *) (region_ptr); \
if (!MR_region_is_disj_protected(region) && \
region->MR_region_ite_protected == NULL) \
{ \
@@ -347,12 +350,12 @@
#define MR_region_fill_ite_snapshot_removed(ite_sp, region_ptr, \
num_snapshots, snapshot_block) \
do { \
- MR_Region *region; \
+ MR_RegionHeader *region; \
MR_RegionSnapshot *snapshot; \
\
MR_region_debug_start( \
"fill_ite_snapshot_removed"); \
- region = (MR_Region *) (region_ptr); \
+ region = (MR_RegionHeader *) (region_ptr); \
snapshot = (MR_RegionSnapshot *) (snapshot_block); \
if (region->MR_region_ite_protected != NULL || \
MR_region_is_disj_protected(region)) \
@@ -373,12 +376,12 @@
#define MR_region_fill_ite_snapshot_not_removed(ite_sp, region_ptr, \
num_snapshots, snapshot_block) \
do { \
- MR_Region *region; \
+ MR_RegionHeader *region; \
MR_RegionSnapshot *snapshot; \
\
MR_region_debug_start( \
"fill_ite_snapshot_not_removed"); \
- region = (MR_Region *) (region_ptr); \
+ region = (MR_RegionHeader *) (region_ptr); \
snapshot = (MR_RegionSnapshot *) (snapshot_block); \
MR_save_snapshot(region, snapshot); \
MR_region_profile_fill_ite_snapshot; \
@@ -398,11 +401,11 @@
#define MR_region_fill_disj_snapshot(disj_sp, region_ptr, \
num_snapshots, snapshot_block) \
do { \
- MR_Region *region; \
+ MR_RegionHeader *region; \
MR_RegionSnapshot *snapshot; \
\
MR_region_debug_start("fill_disj_snapshot"); \
- region = (MR_Region *) (region_ptr); \
+ region = (MR_RegionHeader *) (region_ptr); \
snapshot = (MR_RegionSnapshot *) (snapshot_block); \
MR_save_snapshot(region, snapshot); \
MR_region_profile_fill_disj_snapshot; \
@@ -420,11 +423,11 @@
#define MR_region_fill_commit(commit_sp, region_ptr, \
num_saved_region_reg, region_slot_reg) \
do { \
- MR_Region *region; \
+ MR_RegionHeader *region; \
MR_RegionCommitSave *commit_save; \
\
MR_region_debug_start("fill_commit"); \
- region = (MR_Region *) (region_ptr); \
+ region = (MR_RegionHeader *) (region_ptr); \
if (!MR_region_is_disj_protected(region) && \
region->MR_region_ite_protected == NULL) \
{ \
@@ -642,7 +645,7 @@
do { \
MR_RegionCommitFixedFrame *top_commit_frame; \
MR_RegionCommitSave *commit_save; \
- MR_Region *region; \
+ MR_RegionHeader *region; \
int i; \
\
MR_region_debug_start("use_region_commit_failure"); \
@@ -716,7 +719,7 @@
#define MR_region_ite_unprotect(top_ite_frame) \
do { \
MR_RegionIteProtect *ite_prot; \
- MR_Region *protected_region; \
+ MR_RegionHeader *protected_region; \
int i; \
\
MR_region_debug_start("ite_unprotect"); \
@@ -821,7 +824,7 @@
#define MR_restore_snapshots(num_snapshots, first_snapshot) \
do { \
MR_RegionSnapshot *snapshot; \
- MR_Region *restoring_region; \
+ MR_RegionHeader *restoring_region; \
MR_RegionPage *saved_last_page; \
MR_RegionPage *first_new_page; \
int i; \
@@ -848,7 +851,7 @@
#define MR_region_frame_destroy_new_regions(saved_sequence_number) \
do { \
- MR_Region *region; \
+ MR_RegionHeader *region; \
\
region = MR_live_region_list; \
while (region != NULL && \
@@ -1030,11 +1033,11 @@
#endif /* End of not define MR_RBMM_DEBUG */
-extern void MR_region_create_region_msg(MR_Region *region);
-extern void MR_region_try_remove_region_msg(MR_Region *region);
-extern void MR_region_region_struct_removal_info_msg(MR_Region *region);
-extern void MR_region_destroy_region_msg(MR_Region *region);
-extern void MR_region_logically_remove_region_msg(MR_Region *region);
+extern void MR_region_create_region_msg(MR_RegionHeader *region);
+extern void MR_region_try_remove_region_msg(MR_RegionHeader *region);
+extern void MR_region_region_struct_removal_info_msg(MR_RegionHeader *region);
+extern void MR_region_destroy_region_msg(MR_RegionHeader *region);
+extern void MR_region_logically_remove_region_msg(MR_RegionHeader *region);
extern void MR_region_push_ite_frame_msg(MR_RegionIteFixedFrame *ite_frame);
extern void MR_region_ite_frame_msg(MR_RegionIteFixedFrame *ite_frame);
@@ -1063,15 +1066,16 @@
extern void MR_region_end_msg(const char *);
extern void MR_region_fill_ite_protect_msg(MR_RegionIteProtect *,
- MR_Region *);
+ MR_RegionHeader *);
extern void MR_region_fill_ite_snapshot_not_removed_msg(
- MR_RegionSnapshot *, MR_Region *);
+ MR_RegionSnapshot *, MR_RegionHeader *);
extern void MR_region_fill_ite_snapshot_removed_msg(MR_RegionSnapshot *,
- MR_Region *);
+ MR_RegionHeader *);
extern void MR_region_fill_disj_snapshot_msg(MR_RegionSnapshot *,
- MR_Region *);
-extern void MR_region_fill_commit_msg(MR_RegionCommitSave *, MR_Region *);
-extern void MR_region_ite_unprotect_msg(MR_Region *);
+ MR_RegionHeader *);
+extern void MR_region_fill_commit_msg(MR_RegionCommitSave *,
+ MR_RegionHeader *);
+extern void MR_region_ite_unprotect_msg(MR_RegionHeader *);
extern void MR_region_restore_from_snapshot_msg(MR_RegionSnapshot *);
/*---------------------------------------------------------------------------*/
@@ -1262,7 +1266,7 @@
extern void MR_region_update_profiling_unit(
MR_RegionProfUnit *profiling_unit, int quantity);
-extern void MR_region_profile_destroyed_region(MR_Region *);
+extern void MR_region_profile_destroyed_region(MR_RegionHeader *);
extern void MR_region_profile_restore_from_snapshot(MR_RegionSnapshot *);
extern void MR_region_profile_increase_counter(unsigned int *);
extern int MR_region_get_number_of_pages(MR_RegionPage *,
Index: runtime/mercury_types.h
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_types.h,v
retrieving revision 1.53
diff -u -r1.53 mercury_types.h
--- runtime/mercury_types.h 15 Oct 2007 08:14:56 -0000 1.53
+++ runtime/mercury_types.h 20 Dec 2007 06:21:16 -0000
@@ -295,7 +295,7 @@
typedef struct MR_ProcTableInfo_Struct MR_ProcTableInfo;
typedef MR_ProcTableInfo *MR_ProcTableInfoPtr;
-typedef struct MR_Region_Struct MR_Region;
+typedef struct MR_RegionHeader_Struct MR_RegionHeader;
typedef struct MR_RegionPage_Struct MR_RegionPage;
typedef struct MR_RegionSnapshot_Struct MR_RegionSnapshot;
typedef struct MR_RegionIteFixedFrame_Struct MR_RegionIteFixedFrame;
cvs diff: Diffing runtime/GETOPT
cvs diff: Diffing runtime/machdeps
cvs diff: Diffing samples
cvs diff: Diffing samples/c_interface
cvs diff: Diffing samples/c_interface/c_calls_mercury
cvs diff: Diffing samples/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/mercury_calls_c
cvs diff: Diffing samples/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/standalone_c
cvs diff: Diffing samples/diff
cvs diff: Diffing samples/muz
cvs diff: Diffing samples/rot13
cvs diff: Diffing samples/solutions
cvs diff: Diffing samples/solver_types
cvs diff: Diffing samples/tests
cvs diff: Diffing samples/tests/c_interface
cvs diff: Diffing samples/tests/c_interface/c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/tests/c_interface/mercury_calls_c
cvs diff: Diffing samples/tests/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/tests/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/tests/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/tests/diff
cvs diff: Diffing samples/tests/muz
cvs diff: Diffing samples/tests/rot13
cvs diff: Diffing samples/tests/solutions
cvs diff: Diffing samples/tests/toplevel
cvs diff: Diffing scripts
cvs diff: Diffing slice
cvs diff: Diffing ssdb
cvs diff: Diffing tests
cvs diff: Diffing tests/benchmarks
cvs diff: Diffing tests/debugger
cvs diff: Diffing tests/debugger/declarative
cvs diff: Diffing tests/dppd
cvs diff: Diffing tests/general
cvs diff: Diffing tests/general/accumulator
cvs diff: Diffing tests/general/string_format
cvs diff: Diffing tests/general/structure_reuse
cvs diff: Diffing tests/grade_subdirs
cvs diff: Diffing tests/hard_coded
cvs diff: Diffing tests/hard_coded/exceptions
cvs diff: Diffing tests/hard_coded/purity
cvs diff: Diffing tests/hard_coded/sub-modules
cvs diff: Diffing tests/hard_coded/typeclasses
cvs diff: Diffing tests/invalid
cvs diff: Diffing tests/invalid/purity
cvs diff: Diffing tests/misc_tests
cvs diff: Diffing tests/mmc_make
cvs diff: Diffing tests/mmc_make/lib
cvs diff: Diffing tests/par_conj
cvs diff: Diffing tests/recompilation
cvs diff: Diffing tests/tabling
cvs diff: Diffing tests/term
cvs diff: Diffing tests/trailing
cvs diff: Diffing tests/valid
cvs diff: Diffing tests/warnings
cvs diff: Diffing tools
cvs diff: Diffing trace
cvs diff: Diffing util
cvs diff: Diffing vim
cvs diff: Diffing vim/after
cvs diff: Diffing vim/ftplugin
cvs diff: Diffing vim/syntax
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list