diff src/share/vm/adlc/output_c.cpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents db2e64ca2d5a
children 0702f188baeb
line wrap: on
line diff
--- a/src/share/vm/adlc/output_c.cpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/src/share/vm/adlc/output_c.cpp	Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1884,7 +1884,6 @@
   bool          _doing_emit_hi;
   bool          _doing_emit_lo;
   bool          _may_reloc;
-  bool          _must_reloc;
   reloc_format  _reloc_form;
   const char *  _reloc_type;
   bool          _processing_noninput;
@@ -1923,7 +1922,6 @@
     _doing_emit_hi = false;
     _doing_emit_lo = false;
     _may_reloc     = false;
-    _must_reloc    = false;
     _reloc_form    = RELOC_NONE;
     _reloc_type    = AdlcVMDeps::none_reloc_type();
     _strings_to_emit.clear();
@@ -2195,7 +2193,7 @@
 
           _reg_status = LITERAL_ACCESSED;
           emit_rep_var( rep_var );
-          fprintf(_fp,"->disp_is_oop())");
+          fprintf(_fp,"->disp_reloc())");
 
           // skip trailing $Address
           _strings_to_emit.iter();
@@ -2232,14 +2230,6 @@
   }
 
 
-  void gen_emit_x_reloc(const char *d32_lo_hi ) {
-    fprintf(_fp,"emit_%s_reloc(cbuf, ", d32_lo_hi );
-    emit_replacement();             fprintf(_fp,", ");
-    emit_reloc_type( _reloc_type ); fprintf(_fp,", ");
-    fprintf(_fp, "%d", _reloc_form);fprintf(_fp, ");");
-  }
-
-
   void emit() {
     //
     //   "emit_d32_reloc(" or "emit_hi_reloc" or "emit_lo_reloc"
@@ -2254,10 +2244,6 @@
         fprintf( _fp, "emit_%s(cbuf, ", d32_hi_lo );
         emit_replacement(); fprintf(_fp, ")");
       }
-      else if ( _must_reloc ) {
-        // Must emit relocation information
-        gen_emit_x_reloc( d32_hi_lo );
-      }
       else {
         // Emit RUNTIME CHECK to see if value needs relocation info
         // If emitting a relocatable address, use 'emit_d32_reloc'
@@ -2266,10 +2252,15 @@
                 && !(_doing_disp && _doing_constant),
                 "Must be emitting either a displacement or a constant");
         fprintf(_fp,"\n");
-        fprintf(_fp,"if ( opnd_array(%d)->%s_is_oop() ) {\n",
+        fprintf(_fp,"if ( opnd_array(%d)->%s_reloc() != relocInfo::none ) {\n",
                 _operand_idx, disp_constant);
         fprintf(_fp,"  ");
-        gen_emit_x_reloc( d32_hi_lo ); fprintf(_fp,"\n");
+        fprintf(_fp,"emit_%s_reloc(cbuf, ", d32_hi_lo );
+        emit_replacement();             fprintf(_fp,", ");
+        fprintf(_fp,"opnd_array(%d)->%s_reloc(), ",
+                _operand_idx, disp_constant);
+        fprintf(_fp, "%d", _reloc_form);fprintf(_fp, ");");
+        fprintf(_fp,"\n");
         fprintf(_fp,"} else {\n");
         fprintf(_fp,"  emit_%s(cbuf, ", d32_hi_lo);
         emit_replacement(); fprintf(_fp, ");\n"); fprintf(_fp,"}");