OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [boehm-gc/] [include/] [gc_typed.h] - Blame information for rev 721

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 721 jeremybenn
/*
2
 * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers
3
 * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
4
 * Copyright 1996 Silicon Graphics.  All rights reserved.
5
 *
6
 * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
7
 * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
8
 *
9
 * Permission is hereby granted to use or copy this program
10
 * for any purpose,  provided the above notices are retained on all copies.
11
 * Permission to modify the code and to distribute modified code is granted,
12
 * provided the above notices are retained, and a notice that the code was
13
 * modified is included with the above copyright notice.
14
 */
15
/*
16
 * Some simple primitives for allocation with explicit type information.
17
 * Facilities for dynamic type inference may be added later.
18
 * Should be used only for extremely performance critical applications,
19
 * or if conservative collector leakage is otherwise a problem (unlikely).
20
 * Note that this is implemented completely separately from the rest
21
 * of the collector, and is not linked in unless referenced.
22
 * This does not currently support GC_DEBUG in any interesting way.
23
 */
24
/* Boehm, May 19, 1994 2:13 pm PDT */
25
 
26
#ifndef _GC_TYPED_H
27
# define _GC_TYPED_H
28
# ifndef _GC_H
29
#   include "gc.h"
30
# endif
31
 
32
#ifdef __cplusplus
33
  extern "C" {
34
#endif
35
typedef GC_word * GC_bitmap;
36
        /* The least significant bit of the first word is one if        */
37
        /* the first word in the object may be a pointer.               */
38
 
39
# define GC_WORDSZ (8*sizeof(GC_word))
40
# define GC_get_bit(bm, index) \
41
                (((bm)[index/GC_WORDSZ] >> (index%GC_WORDSZ)) & 1)
42
# define GC_set_bit(bm, index) \
43
                (bm)[index/GC_WORDSZ] |= ((GC_word)1 << (index%GC_WORDSZ))
44
# define GC_WORD_OFFSET(t, f) (offsetof(t,f)/sizeof(GC_word))
45
# define GC_WORD_LEN(t) (sizeof(t)/ sizeof(GC_word))
46
# define GC_BITMAP_SIZE(t) ((GC_WORD_LEN(t) + GC_WORDSZ-1)/GC_WORDSZ)
47
 
48
typedef GC_word GC_descr;
49
 
50
GC_API GC_descr GC_make_descriptor GC_PROTO((GC_bitmap bm, size_t len));
51
                /* Return a type descriptor for the object whose layout */
52
                /* is described by the argument.                        */
53
                /* The least significant bit of the first word is one   */
54
                /* if the first word in the object may be a pointer.    */
55
                /* The second argument specifies the number of          */
56
                /* meaningful bits in the bitmap.  The actual object    */
57
                /* may be larger (but not smaller).  Any additional     */
58
                /* words in the object are assumed not to contain       */
59
                /* pointers.                                            */
60
                /* Returns a conservative approximation in the          */
61
                /* (unlikely) case of insufficient memory to build      */
62
                /* the descriptor.  Calls to GC_make_descriptor         */
63
                /* may consume some amount of a finite resource.  This  */
64
                /* is intended to be called once per type, not once     */
65
                /* per allocation.                                      */
66
 
67
/* It is possible to generate a descriptor for a C type T with  */
68
/* word aligned pointer fields f1, f2, ... as follows:                  */
69
/*                                                                      */
70
/* GC_descr T_descr;                                                    */
71
/* GC_word T_bitmap[GC_BITMAP_SIZE(T)] = {0};                           */
72
/* GC_set_bit(T_bitmap, GC_WORD_OFFSET(T,f1));                          */
73
/* GC_set_bit(T_bitmap, GC_WORD_OFFSET(T,f2));                          */
74
/* ...                                                                  */
75
/* T_descr = GC_make_descriptor(T_bitmap, GC_WORD_LEN(T));              */
76
 
77
GC_API GC_PTR GC_malloc_explicitly_typed
78
                        GC_PROTO((size_t size_in_bytes, GC_descr d));
79
                /* Allocate an object whose layout is described by d.   */
80
                /* The resulting object MAY NOT BE PASSED TO REALLOC.   */
81
                /* The returned object is cleared.                      */
82
 
83
GC_API GC_PTR GC_malloc_explicitly_typed_ignore_off_page
84
                        GC_PROTO((size_t size_in_bytes, GC_descr d));
85
 
86
GC_API GC_PTR GC_calloc_explicitly_typed
87
                        GC_PROTO((size_t nelements,
88
                                  size_t element_size_in_bytes,
89
                                  GC_descr d));
90
        /* Allocate an array of nelements elements, each of the */
91
        /* given size, and with the given descriptor.           */
92
        /* The elemnt size must be a multiple of the byte       */
93
        /* alignment required for pointers.  E.g. on a 32-bit   */
94
        /* machine with 16-bit aligned pointers, size_in_bytes  */
95
        /* must be a multiple of 2.                             */
96
        /* Returned object is cleared.                          */
97
 
98
#ifdef GC_DEBUG
99
#   define GC_MALLOC_EXPLICITLY_TYPED(bytes, d) GC_MALLOC(bytes)
100
#   define GC_CALLOC_EXPLICITLY_TYPED(n, bytes, d) GC_MALLOC(n*bytes)
101
#else
102
#  define GC_MALLOC_EXPLICITLY_TYPED(bytes, d) \
103
        GC_malloc_explicitly_typed(bytes, d)
104
#  define GC_CALLOC_EXPLICITLY_TYPED(n, bytes, d) \
105
        GC_calloc_explicitly_typed(n, bytes, d)
106
#endif /* !GC_DEBUG */
107
 
108
#ifdef __cplusplus
109
  } /* matches extern "C" */
110
#endif
111
 
112
#endif /* _GC_TYPED_H */
113
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.