You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by xl...@apache.org on 2007/03/17 08:17:03 UTC

svn commit: r519252 - /harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/compressed_ref.cpp

Author: xli
Date: Sat Mar 17 00:17:03 2007
New Revision: 519252

URL: http://svn.apache.org/viewvc?view=rev&rev=519252
Log:
H3417 - GCv5 64-bit support

Added:
    harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/compressed_ref.cpp   (with props)

Added: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/compressed_ref.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/compressed_ref.cpp?view=auto&rev=519252
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/compressed_ref.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/compressed_ref.cpp Sat Mar 17 00:17:03 2007
@@ -0,0 +1,72 @@
+/*
+ *  Copyright 2005-2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+/**
+ * @author Xiao-Feng Li, 2007/01/24
+ */
+
+#include "gc_common.h"
+#include "../utils/vector_block.h"
+#include "../utils/sync_pool.h"
+#include "../thread/collector.h"
+#include "../thread/mutator.h"
+#include "compressed_ref.h"
+
+typedef struct Uncompressed_Root{
+  Partial_Reveal_Object **p_ref;   /* pointing to the uncompressed address of the root object */
+  REF ref;  /* temporal compressed pointer pointing to the root object */
+}Compressed_Root;
+
+POINTER_SIZE_INT vtable_base = 0;
+POINTER_SIZE_INT HEAP_NULL = 0;
+
+void gc_set_uncompressed_rootset(GC *gc)
+{
+  Pool *rootset_pool = gc->metadata->gc_uncompressed_rootset_pool;
+  
+  pool_put_entry(rootset_pool, gc->uncompressed_root_set);
+  gc->uncompressed_root_set = NULL;
+  
+  pool_iterator_init(rootset_pool);
+  while(Vector_Block *root_set = pool_iterator_next(rootset_pool)){
+    POINTER_SIZE_INT *iter = vector_block_iterator_init(root_set);
+    for(; !vector_block_iterator_end(root_set, iter); iter = vector_block_iterator_advance(root_set, iter)){
+      iter = vector_block_iterator_advance(root_set, iter);
+      assert(!vector_block_iterator_end(root_set, iter));
+      /* add the pointer to ref of Uncmpressed_Root to rootset */
+      gc_compressed_rootset_add_entry(gc, (REF *)iter);
+    }
+  }
+}
+
+void gc_fix_uncompressed_rootset(GC *gc)
+{
+  Pool *rootset_pool = gc->metadata->gc_uncompressed_rootset_pool;
+  
+  pool_iterator_init(rootset_pool);
+  while(Vector_Block *root_set = pool_iterator_next(rootset_pool)){
+    POINTER_SIZE_INT *iter = vector_block_iterator_init(root_set);
+    for(; !vector_block_iterator_end(root_set, iter); iter = vector_block_iterator_advance(root_set, iter)){
+      Partial_Reveal_Object **p_ref = (Partial_Reveal_Object **)*iter;
+      iter = vector_block_iterator_advance(root_set, iter);
+      assert(!vector_block_iterator_end(root_set, iter));
+      REF ref = (REF)*iter;
+      Partial_Reveal_Object *p_obj = uncompress_ref(ref);
+      *p_ref = p_obj;
+    }
+  }
+}
+

Propchange: harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/compressed_ref.cpp
------------------------------------------------------------------------------
    svn:eol-style = native