#ifndef __JV_BOEHM_GC__
#define __JV_BOEHM_GC__
#define JV_MARKOBJ_DECL void *_Jv_MarkObj (void *, void *, void *, void *)
#define JV_MARKARRAY_DECL void *_Jv_MarkArray (void *, void *, void *, void *)
extern "C"
{
JV_MARKOBJ_DECL;
JV_MARKARRAY_DECL;
};
#include <gcj/javaprims.h>
#include <java/lang/Class.h>
#include <string.h>
extern "C" void * GC_gcj_malloc(size_t, void *);
extern "C" void * GC_malloc_atomic(size_t);
#ifdef THREAD_LOCAL_ALLOC
extern "C" void * GC_local_gcj_malloc(size_t, void *);
extern "C" void * GC_local_malloc_atomic(size_t);
#endif
inline void *
_Jv_AllocObj (jsize size, jclass klass)
{
#ifdef THREAD_LOCAL_ALLOC
return GC_local_gcj_malloc (size, klass->vtable);
#else
return GC_gcj_malloc (size, klass->vtable);
#endif
}
inline void *
_Jv_AllocPtrFreeObj (jsize size, jclass klass)
{
#ifdef JV_HASH_SYNCHRONIZATION
# ifdef THREAD_LOCAL_ALLOC
void * obj = GC_local_malloc_atomic(size);
# else
void * obj = GC_malloc_atomic(size);
# endif
*((_Jv_VTable **) obj) = klass->vtable;
#else
# ifdef THREAD_LOCAL_ALLOC
void * obj = GC_local_gcj_malloc(size, klass->vtable);
# else
void * obj = GC_gcj_malloc(size, klass->vtable);
# endif
#endif
return obj;
}
#endif