* Patch: FYI: clean up uses_jv_markobj_p a little
@ 2006-05-05 0:59 Tom Tromey
0 siblings, 0 replies; only message in thread
From: Tom Tromey @ 2006-05-05 0:59 UTC (permalink / raw)
To: Java Patch List; +Cc: Gcc Patch List
I'm checking this in on the trunk.
uses_jv_markobj_p has been bothering me a little bit. It uses 2
unnamed constants, which is kind of lame. This patch removes one of
them and documents a couple scenarios where the code is incorrect at
the moment (this isn't severe as it is only used with
flag_reduced_reflection).
Tom
Index: ChangeLog
from 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.
Index: class.c
===================================================================
--- class.c (revision 113541)
+++ class.c (working copy)
@@ -1611,16 +1611,6 @@
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 @@
&& !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;
Index: java-tree.h
===================================================================
--- java-tree.h (revision 113541)
+++ java-tree.h (working copy)
@@ -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 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);
Index: boehm.c
===================================================================
--- boehm.c (revision 113541)
+++ boehm.c (working copy)
@@ -40,6 +40,14 @@
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 @@
}
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));
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-05-05 0:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-05-05 0:59 Patch: FYI: clean up uses_jv_markobj_p a little Tom Tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).