hotspot/src/share/vm/interpreter/interpreterRuntime.hpp

Print this page
rev 611 : Merge
   1 #ifdef USE_PRAGMA_IDENT_HDR
   2 #pragma ident "@(#)interpreterRuntime.hpp       1.143 07/05/05 17:05:38 JVM"
   3 #endif
   4 /*
   5  * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
   6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   7  *
   8  * This code is free software; you can redistribute it and/or modify it
   9  * under the terms of the GNU General Public License version 2 only, as
  10  * published by the Free Software Foundation.
  11  *
  12  * This code is distributed in the hope that it will be useful, but WITHOUT
  13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15  * version 2 for more details (a copy is included in the LICENSE file that
  16  * accompanied this code).
  17  *
  18  * You should have received a copy of the GNU General Public License version
  19  * 2 along with this work; if not, write to the Free Software Foundation,
  20  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  21  *
  22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  23  * CA 95054 USA or visit www.sun.com if you need additional information or
  24  * have any questions.
  25  *  
  26  */
  27 
  28 // The InterpreterRuntime is called by the interpreter for everything
  29 // that cannot/should not be dealt with in assembly and needs C support.
  30 
  31 class InterpreterRuntime: AllStatic {
  32   friend class BytecodeClosure; // for method and bcp
  33   friend class PrintingClosure; // for method and bcp
  34 
  35  private:
  36   // Helper functions to access current interpreter state
  37   static frame     last_frame(JavaThread *thread)    { return thread->last_frame(); }  
  38   static methodOop method(JavaThread *thread)        { return last_frame(thread).interpreter_frame_method(); }
  39   static address   bcp(JavaThread *thread)           { return last_frame(thread).interpreter_frame_bcp(); }
  40   static void      set_bcp_and_mdp(address bcp, JavaThread*thread);
  41   static Bytecodes::Code code(JavaThread *thread)       { return Bytecodes::code_at(bcp(thread)); }



  42   static bool      already_resolved(JavaThread *thread) { return cache_entry(thread)->is_resolved(code(thread)); }
  43   static int       one_byte_index(JavaThread *thread)   { return bcp(thread)[1]; }
  44   static int       two_byte_index(JavaThread *thread)   { return Bytes::get_Java_u2(bcp(thread) + 1); }
  45   static int       number_of_dimensions(JavaThread *thread)  { return bcp(thread)[3]; }
  46   static ConstantPoolCacheEntry* cache_entry(JavaThread *thread)  { return method(thread)->constants()->cache()->entry_at(Bytes::get_native_u2(bcp(thread) + 1)); }
  47   static void      note_trap(JavaThread *thread, int reason, TRAPS);
  48 
  49  public:
  50   // Constants
  51   static void    ldc           (JavaThread* thread, bool wide);
  52 
  53   // Allocation
  54   static void    _new          (JavaThread* thread, constantPoolOopDesc* pool, int index);
  55   static void    newarray      (JavaThread* thread, BasicType type, jint size);
  56   static void    anewarray     (JavaThread* thread, constantPoolOopDesc* pool, int index, jint size);
  57   static void    multianewarray(JavaThread* thread, jint* first_size_address);
  58   static void    register_finalizer(JavaThread* thread, oopDesc* obj);
  59 
  60   // Quicken instance-of and check-cast bytecodes
  61   static void    quicken_io_cc(JavaThread* thread);


   1 #ifdef USE_PRAGMA_IDENT_HDR
   2 #pragma ident "@(#)interpreterRuntime.hpp       1.143 07/05/05 17:05:38 JVM"
   3 #endif
   4 /*
   5  * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
   6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   7  *
   8  * This code is free software; you can redistribute it and/or modify it
   9  * under the terms of the GNU General Public License version 2 only, as
  10  * published by the Free Software Foundation.
  11  *
  12  * This code is distributed in the hope that it will be useful, but WITHOUT
  13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15  * version 2 for more details (a copy is included in the LICENSE file that
  16  * accompanied this code).
  17  *
  18  * You should have received a copy of the GNU General Public License version
  19  * 2 along with this work; if not, write to the Free Software Foundation,
  20  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  21  *
  22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  23  * CA 95054 USA or visit www.sun.com if you need additional information or
  24  * have any questions.
  25  *  
  26  */
  27 
  28 // The InterpreterRuntime is called by the interpreter for everything
  29 // that cannot/should not be dealt with in assembly and needs C support.
  30 
  31 class InterpreterRuntime: AllStatic {
  32   friend class BytecodeClosure; // for method and bcp
  33   friend class PrintingClosure; // for method and bcp
  34 
  35  private:
  36   // Helper functions to access current interpreter state
  37   static frame     last_frame(JavaThread *thread)    { return thread->last_frame(); }  
  38   static methodOop method(JavaThread *thread)        { return last_frame(thread).interpreter_frame_method(); }
  39   static address   bcp(JavaThread *thread)           { return last_frame(thread).interpreter_frame_bcp(); }
  40   static void      set_bcp_and_mdp(address bcp, JavaThread*thread);
  41   static Bytecodes::Code code(JavaThread *thread)    {
  42     // pass method to avoid calling unsafe bcp_to_method (partial fix 4926272)
  43     return Bytecodes::code_at(bcp(thread), method(thread));
  44   }
  45   static bool      already_resolved(JavaThread *thread) { return cache_entry(thread)->is_resolved(code(thread)); }
  46   static int       one_byte_index(JavaThread *thread)   { return bcp(thread)[1]; }
  47   static int       two_byte_index(JavaThread *thread)   { return Bytes::get_Java_u2(bcp(thread) + 1); }
  48   static int       number_of_dimensions(JavaThread *thread)  { return bcp(thread)[3]; }
  49   static ConstantPoolCacheEntry* cache_entry(JavaThread *thread)  { return method(thread)->constants()->cache()->entry_at(Bytes::get_native_u2(bcp(thread) + 1)); }
  50   static void      note_trap(JavaThread *thread, int reason, TRAPS);
  51 
  52  public:
  53   // Constants
  54   static void    ldc           (JavaThread* thread, bool wide);
  55 
  56   // Allocation
  57   static void    _new          (JavaThread* thread, constantPoolOopDesc* pool, int index);
  58   static void    newarray      (JavaThread* thread, BasicType type, jint size);
  59   static void    anewarray     (JavaThread* thread, constantPoolOopDesc* pool, int index, jint size);
  60   static void    multianewarray(JavaThread* thread, jint* first_size_address);
  61   static void    register_finalizer(JavaThread* thread, oopDesc* obj);
  62 
  63   // Quicken instance-of and check-cast bytecodes
  64   static void    quicken_io_cc(JavaThread* thread);