Merge branch 'generalize-alloc-via-ok_freelist'
authorIvan Maidanski <ivmai@mail.ru>
Thu, 30 Jun 2016 07:50:59 +0000 (10:50 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 30 Jun 2016 07:59:22 +0000 (10:59 +0300)
* mark.c (GC_n_kinds): Resolve merge conflict.

1  2 
include/private/gc_priv.h
malloc.c
mallocx.c
mark.c
misc.c

@@@ -1238,9 -1229,14 +1229,14 @@@ struct _GC_arrays 
    size_t _size_map[MAXOBJBYTES+1];
          /* Number of granules to allocate when asked for a certain      */
          /* number of bytes.                                             */
+ # ifdef STUBBORN_ALLOC
+ #   define GC_sobjfreelist GC_arrays._sobjfreelist
+     ptr_t _sobjfreelist[MAXOBJGRANULES+1];
+                           /* Free list for immutable objects.   */
+ # endif
  # ifdef MARK_BIT_PER_GRANULE
  #   define GC_obj_map GC_arrays._obj_map
 -    short * _obj_map[MAXOBJGRANULES+1];
 +    unsigned short * _obj_map[MAXOBJGRANULES + 1];
                         /* If not NULL, then a pointer to a map of valid */
                         /* object addresses.                             */
                         /* _obj_map[sz_in_granules][i] is                */
diff --cc malloc.c
Simple merge
diff --cc mallocx.c
Simple merge
diff --cc mark.c
--- 1/mark.c
--- 2/mark.c
+++ b/mark.c
@@@ -47,41 -47,45 +47,37 @@@ GC_INNER unsigned GC_n_mark_procs = GC_
  /* GC_init is called.                                                   */
  /* It's done here, since we need to deal with mark descriptors.         */
  GC_INNER struct obj_kind GC_obj_kinds[MAXOBJKINDS] = {
              { &GC_freelists[PTRFREE][0], 0 /* filled in dynamically */,
/* PTRFREE */ { &GC_aobjfreelist[0], 0 /* filled in dynamically */,
 -                0 | GC_DS_LENGTH, FALSE, FALSE
 +                /* 0 | */ GC_DS_LENGTH, FALSE, FALSE
                  /*, */ OK_DISCLAIM_INITZ },
-               { &GC_freelists[NORMAL][0], 0,
 -/* NORMAL  */ { &GC_objfreelist[0], 0,
 -                0 | GC_DS_LENGTH,  /* Adjusted in GC_init for EXTRA_BYTES */
++/* NORMAL */  { &GC_objfreelist[0], 0,
 +                /* 0 | */ GC_DS_LENGTH,
 +                                /* adjusted in GC_init for EXTRA_BYTES  */
                  TRUE /* add length to descr */, TRUE
                  /*, */ OK_DISCLAIM_INITZ },
-               { &GC_freelists[UNCOLLECTABLE][0], 0,
+ /* UNCOLLECTABLE */
+               { &GC_uobjfreelist[0], 0,
 -                0 | GC_DS_LENGTH, TRUE /* add length to descr */, TRUE
 +                /* 0 | */ GC_DS_LENGTH, TRUE /* add length to descr */, TRUE
                  /*, */ OK_DISCLAIM_INITZ },
  # ifdef GC_ATOMIC_UNCOLLECTABLE
-               { &GC_freelists[AUNCOLLECTABLE][0], 0,
 -   /* AUNCOLLECTABLE */
+               { &GC_auobjfreelist[0], 0,
 -                0 | GC_DS_LENGTH, FALSE /* add length to descr */, FALSE
 +                /* 0 | */ GC_DS_LENGTH, FALSE /* add length to descr */, FALSE
                  /*, */ OK_DISCLAIM_INITZ },
  # endif
  # ifdef STUBBORN_ALLOC
-               { (void **)&GC_freelists[STUBBORN][0], 0,
 -/*STUBBORN*/ { (void **)&GC_sobjfreelist[0], 0,
 -                0 | GC_DS_LENGTH, TRUE /* add length to descr */, TRUE
++              { (void **)&GC_sobjfreelist[0], 0,
 +                /* 0 | */ GC_DS_LENGTH, TRUE /* add length to descr */, TRUE
                  /*, */ OK_DISCLAIM_INITZ },
  # endif
  };
  
- #if 0
 -# ifdef GC_ATOMIC_UNCOLLECTABLE
 -#   ifdef STUBBORN_ALLOC
 -#     define GC_N_KINDS_INITIAL_VALUE 5
 -#   else
 -#     define GC_N_KINDS_INITIAL_VALUE 4
 -#   endif
 +# ifdef STUBBORN_ALLOC
 +#   define GC_N_KINDS_INITIAL_VALUE (STUBBORN+1)
  # else
 -#   ifdef STUBBORN_ALLOC
 -#     define GC_N_KINDS_INITIAL_VALUE 4
 -#   else
 -#     define GC_N_KINDS_INITIAL_VALUE 3
 -#   endif
 -# endif /* !GC_ATOMIC_UNCOLLECTABLE */
 +#   define GC_N_KINDS_INITIAL_VALUE STUBBORN
 +# endif
- #endif
- /* TODO: Add new API function to allocate kinds in range        */
- /* GC_N_KINDS_INITIAL_VALUE .. PREDEFINED_KINDS-1 (if any)      */
- /* which do not need allocation of a free list.                 */
  
- GC_INNER unsigned GC_n_kinds = PREDEFINED_KINDS;
+ GC_INNER unsigned GC_n_kinds = GC_N_KINDS_INITIAL_VALUE;
  
  # ifndef INITIAL_MARK_STACK_SIZE
  #   define INITIAL_MARK_STACK_SIZE (1*HBLKSIZE)
diff --cc misc.c
Simple merge