java-tree.h (uses_jv_markobj_p): Declare.

* java-tree.h (uses_jv_markobj_p): Declare.
	* class.c (uses_jv_markobj_p): Removed.
	* boehm.c (PROCEDURE_OBJECT_DESCRIPTOR): New define.
	(get_boehm_type_descriptor): Use it.
	(uses_jv_markobj_p): Moved from class.c.  Return bool.

From-SVN: r113549
This commit is contained in:
Tom Tromey 2006-05-05 00:59:48 +00:00 committed by Tom Tromey
parent d31f43306b
commit b11382213a
4 changed files with 36 additions and 19 deletions

View File

@ -1,3 +1,11 @@
2006-05-04 Tom Tromey <tromey@redhat.com>
* java-tree.h (uses_jv_markobj_p): Declare.
* class.c (uses_jv_markobj_p): Removed.
* boehm.c (PROCEDURE_OBJECT_DESCRIPTOR): New define.
(get_boehm_type_descriptor): Use it.
(uses_jv_markobj_p): Moved from class.c. Return bool.
2006-05-04 Tom Tromey <tromey@redhat.com>
* java-tree.def (THIS_EXPR): Now a tcc_expression.

View File

@ -40,6 +40,14 @@ static void mark_reference_fields (tree, unsigned HOST_WIDE_INT *,
static void set_bit (unsigned HOST_WIDE_INT *, unsigned HOST_WIDE_INT *,
unsigned int);
/* A procedure-based object descriptor. We know that our
`kind' is 0, and `env' is likewise 0, so we have a simple
computation. From the GC sources:
(((((env) << LOG_MAX_MARK_PROCS) | (proc_index)) << DS_TAG_BITS) \
| DS_PROC)
Here DS_PROC == 2. */
#define PROCEDURE_OBJECT_DESCRIPTOR 2
/* Treat two HOST_WIDE_INT's as a contiguous bitmap, with bit 0 being
the least significant. This function sets bit N in the bitmap. */
static void
@ -220,15 +228,25 @@ get_boehm_type_descriptor (tree type)
}
else
{
/* Compute a procedure-based object descriptor. We know that our
`kind' is 0, and `env' is likewise 0, so we have a simple
computation. From the GC sources:
(((((env) << LOG_MAX_MARK_PROCS) | (proc_index)) << DS_TAG_BITS) \
| DS_PROC)
Here DS_PROC == 2. */
procedure_object_descriptor:
value = build_int_cst (value_type, 2);
value = build_int_cst (value_type, PROCEDURE_OBJECT_DESCRIPTOR);
}
return value;
}
/* The fourth (index of 3) element in the vtable is the GC descriptor.
A value of 2 indicates that the class uses _Jv_MarkObj. */
bool
uses_jv_markobj_p (tree dtable)
{
tree v;
/* FIXME: what do we return if !flag_use_boehm_gc ? */
gcc_assert (flag_use_boehm_gc);
/* FIXME: this is wrong if TARGET_VTABLE_USES_DESCRIPTORS. However,
this function is only used with flag_reduced_reflection. No
point in asserting unless we hit the bad case. */
gcc_assert (!flag_reduced_reflection || TARGET_VTABLE_USES_DESCRIPTORS == 0);
v = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (dtable), 3)->value;
return (PROCEDURE_OBJECT_DESCRIPTOR == TREE_INT_CST_LOW (v));
}

View File

@ -1611,16 +1611,6 @@ supers_all_compiled (tree type)
return 1;
}
/* The forth (index of 3) element in the vtable is the GC descriptor.
A value of 2 indicates that the class uses _Jv_MarkObj. */
static int
uses_jv_markobj_p(tree dtable)
{
tree v;
v = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (dtable), 3)->value;
return (2 == TREE_INT_CST_LOW (v));
}
void
make_class_data (tree type)
{
@ -1659,7 +1649,7 @@ make_class_data (tree type)
&& !flag_indirect_dispatch)
{
tree dtable = get_dispatch_table (type, this_class_addr);
uses_jv_markobj = uses_jv_markobj_p(dtable);
uses_jv_markobj = uses_jv_markobj_p (dtable);
dtable_decl = build_dtable_decl (type);
DECL_INITIAL (dtable_decl) = dtable;
TREE_STATIC (dtable_decl) = 1;

View File

@ -1,6 +1,6 @@
/* Definitions for parsing and type checking for the GNU compiler for
the Java(TM) language.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GCC.
@ -1358,6 +1358,7 @@ extern void java_debug_context (void);
extern void safe_layout_class (tree);
extern tree get_boehm_type_descriptor (tree);
extern bool uses_jv_markobj_p (tree);
extern bool class_has_finalize_method (tree);
extern void java_check_methods (tree);
extern void init_jcf_parse (void);