You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2008/03/06 08:00:39 UTC
svn commit: r634179 - in /harmony/enhanced/drlvm/trunk/vm:
include/jit_import.h include/jit_intf.h include/jit_runtime_support.h
include/open/rt_helpers.h include/open/rt_types.h
vmcore/include/jit_export.h vmcore/include/jit_export_rt.h
Author: varlax
Date: Wed Mar 5 23:00:16 2008
New Revision: 634179
URL: http://svn.apache.org/viewvc?rev=634179&view=rev
Log:
Extracted helper enums and JIT-VM interface types to separate headers, to relax binding between module-specific headers.
Added:
harmony/enhanced/drlvm/trunk/vm/include/open/rt_helpers.h
- copied, changed from r633370, harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h
harmony/enhanced/drlvm/trunk/vm/include/open/rt_types.h (with props)
Modified:
harmony/enhanced/drlvm/trunk/vm/include/jit_import.h
harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h
harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h
harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export.h
harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export_rt.h
Modified: harmony/enhanced/drlvm/trunk/vm/include/jit_import.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/jit_import.h?rev=634179&r1=634178&r2=634179&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/jit_import.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/jit_import.h Wed Mar 5 23:00:16 2008
@@ -298,25 +298,6 @@
#define CODE_BLOCK_HEAT_MAX 20
/**
- * @sa method_allocate_code_block
- */
-
-typedef enum Code_Allocation_ActionEnum {
- CAA_Simulate,
- CAA_Allocate
-}Code_Allocation_Action;
-
-//
-// Code block heat - used when a method is split into hot and cold parts
-//
-typedef enum {
- CodeBlockHeatMin,
- CodeBlockHeatDefault,
- CodeBlockHeatMax
-} CodeBlockHeat;
-
-
-/**
* This function allows allocation of multiple chunks of code with different
* heat values. The JIT is responsible for specifying ids that are unique
* within the same method.
Modified: harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h?rev=634179&r1=634178&r2=634179&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/jit_intf.h Wed Mar 5 23:00:16 2008
@@ -40,20 +40,6 @@
#include "jit_export.h"
#include "jit_import.h"
-//
-// The implementation of those types is private to the VM.
-// The JIT uses them as handles.
-//
-
-
-typedef
-enum Method_Side_Effects {
- MSE_Unknown,
- MSE_True,
- MSE_False,
- MSE_True_Null_Param
-} Method_Side_Effects; //Method_Side_Effects
-
//////////////// begin C interface
//
@@ -289,18 +275,6 @@
// Deprecated. Please use vector_first_element_offset instead.
//VMEXPORT int get_array_offset(Java_Type element_type);
-
-/**
- * One entry of correspondence table between native addresses and bytecode
- * locations.
- */
-struct AddrLocation {
- /** Native code address. */
- void* start_addr;
-
- /** Bytecode location. */
- uint16 location;
-};
/**
* Adds information about inlined method.
Modified: harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h?rev=634179&r1=634178&r2=634179&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h Wed Mar 5 23:00:16 2008
@@ -15,725 +15,22 @@
* limitations under the License.
*/
+/**
+* @file
+* @brief Declaration of access interfaces to runtime helpers provided by VM.
+*/
+
#ifndef _JIT_RUNTIME_SUPPORT_H_
#define _JIT_RUNTIME_SUPPORT_H_
#include "open/types.h"
+#include "open/rt_helpers.h"
#include "jni_types.h"
-/**
- * This is a complete set of functions used by the code generated by the JIT.
- * The address of a function is obtained from the VM by invoking the
- * function <code>vm_get_rt_support_addr</code> (see below).
- *
- * We should also note which exceptions can be thrown by each
- * of those function.
- *
- * If changes are made to enum <code>VM_RT_SUPPORT</code> below, the list of
- * descriptions in <code>tr_helper_info.cpp</code> must also be changed.
- */
-
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
-typedef
-enum VM_RT_SUPPORT {
-
-/** Void id marker */
- VM_RT_UNKNOWN=0,
-
-/**
- * Object creation routines.
- */
-
- VM_RT_NEW_RESOLVED_USING_VTABLE_AND_SIZE=100,
-/**
- * @param The parameters are the following:
- * \arg Size of the instance to be created
- * \arg <code>Allocation_Handle</code> for the class whose instance we want to create
- *
- * @return Reference to the new object.
- *
- * Like <code>VM_RT_NEW_VECTOR_USING_VTABLE</code>, allocates a new object of
- * a class, but also takes a size argument. The size can be obtained using
- * class_get_boxed_data_size(Class_Handle).
- * This function should be used for classes which inherit the finalize method
- * of <code>java.lang.Object</code>.
- */
-
- VM_RT_NEW_VECTOR_USING_VTABLE=101,
-/**
- * @param The parameters are the following:
- * \arg Vector length
- * \arg <code>Allocation_Handle</code> for the vector class
- *
- * @return Reference to the new object.
- *
- * Like <code>VM_RT_NEW_VECTOR</code> creates a vector
- * (zero-based, one dimensional array) of the given type,
- * but takes a <code>Allocation_Handle</code> instead of a
- * <code>Class_Handle</code>.
- */
- VM_RT_MULTIANEWARRAY_RESOLVED=102,
- /**
- * There is a variable # of arguments:
- * \arg Class handle
- * \arg Number of dimensions
- * \arg Count_n
- * \arg ...
- * \arg Count_1
- *
- * @return Reference to the new object.
- *
- * This is <code>__cdecl</code> function and the caller must pop the arguments.
- * Create a multidimensional Java array.
- */
-
- VM_RT_LDC_STRING=103,
-/**
- * @param The parameters are the following:
- * \arg Class handle of the class owning the const pool
- * \arg Const pool index pointing to a CONSTANT_Class.
- *
- * @return \arg Reference to the String object.
- * \arg Reference to the const string represented by an entry in the
- * const pool.
- */
-
-/////
-// Exception throwing routines
-/////
-
- VM_RT_THROW=200,
-/**
- * @param Object reference
- *
- * @return None.
- *
- * The only argument is a reference to the exception to be thrown.
- * Throw the exception without modifying the stack trace associated
- * with the exception object. This function is appropriate for the
- * JVML athrow instruction.
- * This function never returns.
- */
-
- VM_RT_THROW_SET_STACK_TRACE=210,
-
-/**
- * @param Object reference.
- *
- * @return None.
- *
- * The only argument is a reference to the exception to be thrown.
- * Throw the exception and set the stack trace associated
- * with the exception object. This function is appropriate for the
- * CIL throw instruction.
- *
- *This function never returns.
- */
-
- VM_RT_THROW_LAZY=201,
-/**
- * @param The parameters are the following:
- * \arg Method handle
- * \arg ...
- * \arg arg 2
- * \arg arg 1
- * \arg Class handle
- *
- * @return None.
- *
- * The arguments to the constructor are pushed the same way they would have
- * been pushed to invoke the constructor, except that the (non-existing)
- * this pointer is replaced with the class handle of the exception.
- * The method handle representing the constructor is pushed last.
- *
- * This function never returns.
- */
-
- VM_RT_IDX_OUT_OF_BOUNDS=202,
-
-/**
- * @param none
- *
- * @return None.
- *
- * Throw the <code>java/lang/ArrayIndexOutOfBoundsException</code>.
- *
- * This function never returns.
- */
- VM_RT_NULL_PTR_EXCEPTION=203,
-
-/**
- * @param none
- *
- * @return None.
- *
- * Throw the <code>java/lang/NullPointerException</code>
- *
- * This function never returns.
- */
- VM_RT_DIVIDE_BY_ZERO_EXCEPTION=204,
-
-/**
- * @param none
- *
- * @return None.
- *
- * Throw the <code>java/lang/ArithmeticException</code>.
- *
- * This function never returns.
- */
-
- VM_RT_ARRAY_STORE_EXCEPTION=205,
-
-/**
- * @param none
- *
- * @return None.
- *
- * Throw the <code>java/lang/ArrayStoreException</code>.
- *
- * This function never returns.
- */
-
- VM_RT_THROW_LINKING_EXCEPTION=206,
-/**
- * @param The parameters are the following:
- * \arg Const pool index
- * \arg Class handle of the class owning the const pool
- * \arg Loader exception returned by the VM
- *
- * @return None.
- *
- * Throws a linking exception reported by the VM at compile-time.
- */
-
- ////
- // Synchronization routines
- ////
-
- VM_RT_MONITOR_ENTER=300,
-/**
- * @param Object
- *
- * @return None.
- *
- * Acquire the monitor associated with the object.
- * Throw <code>java/lang/NullPointerException</code>, if the argument is null.
- */
- VM_RT_MONITOR_ENTER_NON_NULL=304,
- /**
- * @param Object
- *
- * @return None.
- *
- * Acquire the monitor associated with the object.
- * This function is identical to <code>VM_RT_MONITOR_ENTER</code> except that it
- * assumes that the argument is non-null. Passing a null argument
- * will result in undefined behavior.
- */
- VM_RT_MONITOR_EXIT=301,
-/**
- * @param Object
- *
- * @return None.
- *
- * Release the monitor associated with the object.
- * Throw <code>java/lang/NullPointerException</code>, if the argument is null.
- * Throw <code>java/lang/IllegalMonitorStateException</code>, if the current
- * thread is not the owner of the lock.
- */
- VM_RT_MONITOR_EXIT_NON_NULL=305,
-
-/**
- * @param Object
- *
- * @return None.
- *
- * Release the monitor associated with the object.
- * This function is identical to <code>VM_RT_MONITOR_EXIT</code> except that it
- * assumes that the argument is non-null. Passing a null argument
- * will result in undefined behavior.
- * Throw <code>java/lang/IllegalMonitorStateException</code>, if the current thread
- * is not the owner of the lock.
- */
- VM_RT_MONITOR_ENTER_STATIC=302,
-/**
- * @param Class handle
- *
- * @return None.
- *
- * Acquire the monitor associated with the class passed as the argument.
- */
- VM_RT_MONITOR_EXIT_STATIC=303,
-/**
- * @param Class handle
- *
- * @return None.
- *
- * Release the monitor associated with the class passed as the argument.
- * Throw <code>java/lang/IllegalMonitorStateException</code>, if the current thread
- * is not the owner of the lock.
- */
-
-////
-// Type access routines
-////
-
- VM_RT_CHECKCAST=400,
-/**
- * @param The parameters are the following:
- * \arg Object
- * \arg Class
- *
- * @return Object.
- *
- * If object can't be cast to class, throw <code>ClassCastException</code>
- */
-
- VM_RT_INSTANCEOF=401,
-/**
- * @param The parameters are the following:
- * \arg Object
- * \arg Class
- *
- * @return 1 if object is not null and can be cast to class;
- * 0 otherwise
- */
- VM_RT_AASTORE=402,
-/**
- * @param The parameters are the following:
- * \arg Array
- * \arg Index
- * \arg Element
- *
- * @return None.
- *
- * Store a reference element into into an array.
- */
- VM_RT_AASTORE_TEST=403,
-/**
- * @param The parameters are the following:
- * \arg Element
- * \arg Array
- *
- * @return 1 if the element can be stored in the array; 0 otherwise.
- *
- * Check if a reference element into into an array. If the <code>array</code>
- * argument is null, return 0. This function does not throw exceptions.
- */
- VM_RT_GET_INTERFACE_VTABLE_VER0=404,
-/**
- * @param The parameters are the following:
- * \arg Object reference
- * \arg Class handle for the interface
- *
- * @return Interface vtable with method entries for the implementation
- * of that interface by the actual class of the object.
- */
-
- /////
- //Class initialization
- /////
-
-
- VM_RT_INITIALIZE_CLASS=500,
-/**
- * @param Class handle
- *
- * @return None.
- *
- * If the class hasn't been initialized yet, initialize it.
- *
- * A call to this function must be generated before every putstatic
- * and getstatic unless the JIT can prove that the class would have
- * been already initialized at that point.
- */
-
- ////
- // Write barrier routines
- ////
-
- VM_RT_GC_HEAP_WRITE_REF=600,
-/**
- * @param The parameters are the following:
- * \arg Address of the base of the object (or array) being written to
- * \arg Address of a memory location being written to
- * \arg Value being written
- *
- * @return None.
- *
- * Write barrier for GC. Updates the slot with the value provided.
- * The type being written is indicated in the name.
- */
- VM_RT_GC_SAFE_POINT=601,
-/**
- * @param none
- *
- * @return None.
- *
- * Use this helper to notify GC about safe point in managed code.
- */
- VM_RT_GC_GET_TLS_BASE=602,
-/**
- * @param none
- *
- * @return Pointer to int-sized suspension request flag.
- *
- * When the flag is non zero, managed code should call <code>VM_RT_GC_SAFE_POINT</code>
- * helper.
- *
- * @note The flag must be used for read only!
- */
-
-
- /////
- // JVMTI specific routines
- /////
-
- VM_RT_JVMTI_METHOD_ENTER_CALLBACK = 700,
-/**
- * @param handle of the method which gets control
- *
- * @return None.
- *
- * This call-back should be used to notify about method enter event.
- * Do a call-back when such capability is requested only.
- */
- VM_RT_JVMTI_METHOD_EXIT_CALLBACK = 701,
-/**
- * @param The parameters are the following:
- * \arg handle of the method which is about to lose control
- * \arg method's return value
- *
- * @return None.
- *
- * This call-back should be used to notify about method exit event.
- * Do a call-back when such capability is requested only.
- */
-
- VM_RT_JVMTI_FIELD_ACCESS_CALLBACK = 702,
-
-/**
- * @param The parameters are the following:
- * arg\ handle of the field under access
- * arg\ handle of the method, which accesses field
- * arg\ location of code which accesses field
- * arg\ pointer to the reference of the object, which field is beeng
- * accessed or NULL for static field
- *
- * @return None.
- *
- * Notifies about field access.
- */
- VM_RT_JVMTI_FIELD_MODIFICATION_CALLBACK = 703,
-/**
- * @param The parameters are the following:
- * arg\ handle of the field under modification
- * arg\ handle of the method, which modifies field
- * arg\ location of code which modifies field
- * arg\ pointer to the reference of the object, which field is beeng
- * modified or NULL for static field
- * arg\ pointer to the new value for the field
- *
- * @return none
- *
- * Notifies about field modification.
- */
-
- /////
- /// Runtime resolution routines
- /////
-
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- *
- * @return new object
- *
- * Creates and returns new object for the given (class, cp_index)
- * Loads and initialize class if needed
- */
- VM_RT_NEWOBJ_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- * arg\ Array size
- *
- * @return new array
- *
- * Creates and returns new array of the given size
- * with type referenced by (class, cp_index)
- * Loads and initialize array class if needed
- */
- VM_RT_NEWARRAY_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- *
- * @return field offset
- *
- * Returns an offset of the field referenced
- * by the given (class, cp_index) pair
- * Field's class must be loaded and initialized
- * before this helper call.
- */
- VM_RT_GET_NONSTATIC_FIELD_OFFSET_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- *
- * @return field address
- *
- * Returns an address of the field referenced
- * by the given (class, cp_index) pair
- * Loads and initializes field's class if needed
- */
- VM_RT_GET_STATIC_FIELD_ADDR_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- * arg\ Object to check cast
- *
- * @return third parameter
- *
- * Check if the given object can be casted to
- * the type referenced by (class, cp_index) pair
- * Throws class cast exception if object can't be casted
- * Returns the object instance (3rd parameter) if cast is allowed
- * Loads and intialize cast type if needed.
- */
- VM_RT_CHECKCAST_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- * arg\ Object to check cast
- *
- * @return TRUE or FALSE
- *
- * Check if the given object is instance of
- * the type referenced by (class, cp_index) pair
- * Return TRUE if object is instance of the given type
- * or FALSE otherwise
- * Loads and intialize 'instanceof' type if needed.
- */
- VM_RT_INSTANCEOF_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- *
- * @return indirect address of the static method
- *
- * Returns the indirect address of the static method referenced
- * by (class, cp_index) pair
- * Loads and intialize method's class type if needed.
- */
- VM_RT_GET_INVOKESTATIC_ADDR_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- * arg\ Object
- *
- * @return indirect address of the interface method
- *
- * Returns the indirect address of the interface method referenced
- * by (class, cp_index) pair for the given object
- */
- VM_RT_GET_INVOKEINTERFACE_ADDR_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- * arg\ Object
- *
- * @return indirect address of the virtual method
- *
- * Returns the indirect address of the virtual method referenced
- * by (class, cp_index) pair for the given object
- */
- VM_RT_GET_INVOKEVIRTUAL_ADDR_WITHRESOLVE,
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- *
- * @return indirect address of the special method
- *
- * Returns the indirect address of the special method referenced
- * by (class, cp_index) pair
- */
- VM_RT_GET_INVOKE_SPECIAL_ADDR_WITHRESOLVE,
-
- /**
- * @param The parameters are the following:
- * arg\ Class_Handle - enclosing class handle
- * arg\ Constant pool index
- *
- * @return Class_Handle
- *
- * Returns the class handle referenced
- * by (class, cp_index) pair
- * Loads and initialize class if needed
- */
- VM_RT_INITIALIZE_CLASS_WITHRESOLVE,
-
-
- /////
- // Non-VM specific helpers for the JIT
- /////
-
- VM_RT_F2I=900,
- VM_RT_F2L=901,
- VM_RT_D2I=902,
- VM_RT_D2L=903,
- // Conversions
-
-
- VM_RT_LSHL=910,
- VM_RT_LSHR=911,
- VM_RT_LUSHR=912,
- /**
- * @param The parameters are the following:
- * (new version)
- * arg\ Long value to be shifted
- * arg\ Int value with count
- * (old version)
- * arg\ (edx:eax) A long value to be shifted
- * arg\ (ecx) Count
- * @return (edx:eax) The shifted value
- */
-
-
- VM_RT_LMUL=920,
-#ifdef VM_LONG_OPT
- VM_RT_LMUL_CONST_MULTIPLIER=921,
-#endif
- VM_RT_LREM=922,
- VM_RT_LDIV=923,
- VM_RT_ULDIV=924,
- VM_RT_CONST_LDIV=925,
- VM_RT_CONST_LREM=926,
- // Long arithmetic
-
- VM_RT_IMUL=930,
- VM_RT_IREM=931,
- VM_RT_IDIV=932,
- // Int arithmetic
-
- VM_RT_FREM=940,
- VM_RT_FDIV=941,
- VM_RT_DREM=942,
- VM_RT_DDIV=943,
- // Float/double arithmetic
-
- VM_RT_CHAR_ARRAYCOPY_NO_EXC=950,
-/**
- * @param The parameters are the following:
- * arg\ Object reference for the source array. Must be non-null and refer to an array
- * of 16 bit chars
- * arg\ int32 containing the starting index of the source array to copy
- * arg\ Object reference for the destination array. Must be non-null and refer to an array
- * of 16 bit chars.
- * arg\ int32 containing the starting index of the destination array to copy into.
- * arg\ int32 containing the number of 16 bit chars to copy.
- *
- * @return None.
- *
- * This runtime helper function provides a specialized implementation for <code>System.arraycopy</code>
- * for the common case where the elements of the arrays are
- * 16 bit characters and the array references are both non-null. The JIT must guarantee
- * that no exceptions will need to be thrown. That is, both array references are non-null,
- * the types match (and are both arrays of 16 bit characters),
- * and the starting indexes and length are such that the copying will only access
- * data in the bounds of the arrays.
- */
-
- ////
- // Deprecated routines
- ////
-
- VM_RT_NEW_RESOLVED=1000,
-/**
- * @param Class handle for the class whose object we want to create
- *
- * @return Reference to the new object.
- *
- * Allocates a new object of the class. This function should be used
- * for classes which inherit the finalize method of <code>java.lang.Object</code>.
- * See also <code>VM_RT_NEW_RESOLVED_USING_VTABLE</code>.
- */
- VM_RT_NEW_VECTOR=1001,
-/**
- * @param The parameters are the following:
- * arg\ Vector length
- * arg\ Class handle of the vector class
- *
- * @return Reference to the new object
- *
- * Create a vector (zero-based, one dimensional array)
- * of the given type. See also <code>VM_RT_NEW_VECTOR_USING_VTABLE</code>.
- */
- VM_RT_WRITE_BARRIER_FASTCALL=1002
-/**
- * @param The parameters are the following:
- * arg\ Address of a memory location being written to
- * arg\ Object reference being written.
- *
- * @return None.
- *
- * Write barrier for GC.
- */
-
-} VM_RT_SUPPORT;
-
-/**
-* VM RT helpers have different calling conventions.
-*/
-enum HELPER_CALLING_CONVENTION {
- CALLING_CONVENTION_DRL = 0,
- CALLING_CONVENTION_STDCALL,
- CALLING_CONVENTION_CDECL,
-};
-
-/**
- * VM RT helpers can be interrupted differently.
- */
-typedef
-enum HELPER_INTERRUPTIBILITY_KIND {
-/**
- * Disallowed to interrupt a thread inside the helper.
- */
- INTERRUPTIBLE_NEVER,
-/**
- * Some helpers can be run in fast path mode,
- * when they are not interruptible, or in slow path, when they are.
- */
- INTERRUPTIBLE_SOMETIMES,
-/**
- * Helper call can always be interrupted.
- */
- INTERRUPTIBLE_ALWAYS
-
-} HELPER_INTERRUPTIBILITY_KIND;
NativeCodePtr rth_get_lil_helper(VM_RT_SUPPORT f);
Copied: harmony/enhanced/drlvm/trunk/vm/include/open/rt_helpers.h (from r633370, harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h)
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/open/rt_helpers.h?p2=harmony/enhanced/drlvm/trunk/vm/include/open/rt_helpers.h&p1=harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h&r1=633370&r2=634179&rev=634179&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/jit_runtime_support.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/include/open/rt_helpers.h Wed Mar 5 23:00:16 2008
@@ -15,11 +15,8 @@
* limitations under the License.
*/
-#ifndef _JIT_RUNTIME_SUPPORT_H_
-#define _JIT_RUNTIME_SUPPORT_H_
-
-#include "open/types.h"
-#include "jni_types.h"
+#ifndef _RUNTIME_HELPERS_H_
+#define _RUNTIME_HELPERS_H_
/**
* This is a complete set of functions used by the code generated by the JIT.
@@ -33,10 +30,6 @@
* descriptions in <code>tr_helper_info.cpp</code> must also be changed.
*/
-#ifdef __cplusplus
-extern "C" {
-#endif // __cplusplus
-
typedef
enum VM_RT_SUPPORT {
@@ -735,62 +728,5 @@
} HELPER_INTERRUPTIBILITY_KIND;
-NativeCodePtr rth_get_lil_helper(VM_RT_SUPPORT f);
-
-VMEXPORT void *vm_get_rt_support_addr(VM_RT_SUPPORT f);
-
-
-/**
- * Temporary interface addition
- * same as <code>vm_get_rt_support_addr</code>, but tries to optimize the stubs it creates,
- * by specializing them.
- */
-VMEXPORT void *vm_get_rt_support_addr_optimized(VM_RT_SUPPORT f, Class_Handle c);
-
-/**
- * Instead of returning a stub address, this support function returns
- * parsed LIL code.
- */
- typedef struct LilCodeStub LilCodeStub;
-VMEXPORT LilCodeStub *vm_get_rt_support_stub(VM_RT_SUPPORT f, Class_Handle c);
-
-
-/**
- * Checks if helper is a suspension point
- */
-VMEXPORT HELPER_INTERRUPTIBILITY_KIND vm_helper_get_interruptibility_kind(VM_RT_SUPPORT f);
-
-VMEXPORT HELPER_CALLING_CONVENTION vm_helper_get_calling_convention(VM_RT_SUPPORT f);
-VMEXPORT const char* vm_helper_get_name(VM_RT_SUPPORT id);
-
-/**
- * Returns number of helper arguments.
- * Intended primarily for debugging.
- */
-VMEXPORT int vm_helper_get_numargs(VM_RT_SUPPORT id);
-
-/**
-* Returns Id of runtime helper by its string representation.
-* Name comparison is case-insensitive.
-* If the helperName is unknown, then VM_RT_UNKNOWN is returned.
-*/
-VMEXPORT VM_RT_SUPPORT vm_helper_get_by_name(const char* name);
-
-#ifndef Global_Env
-struct Global_Env;
-#endif
-
-jint helper_magic_init(Global_Env * vm_env);
-
-VMEXPORT jint vm_helper_register_magic_helper(VM_RT_SUPPORT id,
- const char* class_name,
- const char* method_name);
-
-VMEXPORT Method_Handle vm_helper_get_magic_helper(VM_RT_SUPPORT id);
-
-#ifdef __cplusplus
-}
-#endif // __cplusplus
-
-#endif // !_JIT_RUNTIME_SUPPORT_H_
+#endif // !_RUNTIME_HELPERS_H_
Added: harmony/enhanced/drlvm/trunk/vm/include/open/rt_types.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/include/open/rt_types.h?rev=634179&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/include/open/rt_types.h (added)
+++ harmony/enhanced/drlvm/trunk/vm/include/open/rt_types.h Wed Mar 5 23:00:16 2008
@@ -0,0 +1,266 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+#ifndef _RUNTIME_TYPES_H_
+#define _RUNTIME_TYPES_H_
+
+#include "open/platform_types.h"
+
+/**
+* One entry of correspondence table between native addresses and bytecode
+* locations.
+*/
+typedef struct AddrLocation {
+ /** Native code address. */
+ void* start_addr;
+
+ /** Bytecode location. */
+ uint16 location;
+} AddrLocation;
+
+
+/**
+* Elements of this struct correspond to certain requirements
+* of how a managed method is executed (what it additionally does
+* during execution). Most of them correspond to requirements to
+* call a certain VM helpers at certain places in the code. For JIT,
+* in particular, this means that it will have to generate additional
+* code which will perform these calls.
+* <p>
+* Each of the requirement is associated with a corresponding ability of
+* the EE to satisfy this requirement. So, elements of the struct should also
+* be used to denote EE capabilities related to method execution.
+* <p>
+* If an element corresponds to a certain VM helper, concrete contract
+* of calling this helper (arguments, etc.) can be found at the place of
+* definition of this helper (or its ID) within present OPEN specification.
+*/
+typedef struct OpenMethodExecutionParams {
+ /** call corresponding VM helper upon entry to the managed method */
+ Boolean exe_notify_method_entry : 1;
+
+ /** call corresponding VM helper upon exit from the managed method */
+ Boolean exe_notify_method_exit : 1;
+
+ /** call corresponding VM helper upon reading a value of a field which has <field access mask> set */
+ Boolean exe_notify_field_access : 1;
+
+ /** call corresponding VM helper upon setting a value of a field which has <field modification mask> set */
+ Boolean exe_notify_field_modification : 1;
+
+ /**
+ * call corresponding VM helper upon exception throw,
+ * if by default the throw code does not enter any VM helper
+ * (for example, in case of JIT optimizations)
+ */
+ Boolean exe_notify_exception_throw : 1;
+
+ /**
+ * call corresponding VM helper upon exception catch,
+ * if by default the exception propagation code does not enter any VM helper
+ * (for example, in case of JIT optimizations)
+ */
+ Boolean exe_notify_exception_catch : 1;
+
+ /**
+ * call corresponding VM helper upon entering a monitor,
+ * if by default the monitor enter code does not enter any VM helper
+ * (for example, in case of JIT optimizations)
+ */
+ Boolean exe_notify_monitor_enter : 1;
+
+ /**
+ * call corresponding VM helper upon exiting a monitor,
+ * if by default the monitor exit code does not enter any VM helper
+ * (for example, in case of JIT optimizations)
+ */
+ Boolean exe_notify_monitor_exit : 1;
+
+ /**
+ * call corresponding VM helper upon entering a contended monitor,
+ * if by default the contended monitor enter code does not enter any VM helper
+ * (for example, in case of JIT optimizations)
+ */
+ Boolean exe_notify_contended_monitor_enter : 1;
+
+ /**
+ * call corresponding VM helper upon exiting a contended monitor,
+ * if by default the contended monitor exit code does not enter any VM helper
+ * (for example, in case of JIT optimizations)
+ */
+ Boolean exe_notify_contended_monitor_exit : 1;
+
+ /** perform method in-lining during compilation (JIT-specific) */
+ Boolean exe_do_method_inlining : 1;
+
+ /**
+ * Keep correspondence between bytecode offsets and native instruction IPs (JIT-specific).
+ * For a JIT this, in particular, means that it should not do any optimizations which
+ * may hinder this mapping. It should also store the map after method compilation so that
+ * later VM could use appropriate ExeJPDA interfaces to retrieve the mapping.
+ */
+ Boolean exe_do_code_mapping : 1;
+
+ /**
+ * Keep correspondence between bytecode local variables and locations of the
+ * native operands (JIT-specific) in relevant locations within method code.
+ * For a JIT this, in particular, means that it should not do any optimizations
+ * which may hinder this mapping. It should also store the map after method compilation
+ * so that later VM could use appropriate ExeJPDA interfaces to retrieve the mapping.
+ */
+ Boolean exe_do_local_var_mapping : 1;
+
+ /** call corresponding VM helper upon setting a value of any field of reference type */
+ Boolean exe_insert_write_barriers : 1;
+
+ /**
+ * Provide possibility to obtain reference to the current 'this' object by
+ * means of get_address_of_this method. Used for JVMTI debug support.
+ */
+ Boolean exe_provide_access_to_this : 1;
+
+ /**
+ * Provide restoring of arguments in the stack after the call
+ * of the unwind_frame method so that method could be called again
+ * with the same arguments. Used for JVMTI debug support.
+ */
+ Boolean exe_restore_context_after_unwind : 1;
+
+ /**
+ * Sent CompileMethodLoad event when a method is compiled and loaded into memory
+ */
+ Boolean exe_notify_compiled_method_load : 1;
+
+} OpenMethodExecutionParams;
+
+
+ ///////////////////////////////////////////////////////
+ // begin Frame Contexts for JITs
+
+#ifdef _IPF_
+
+ // Note that the code in transfer context is very depend upon the ordering of fields in this structure.
+ // Be very careful in changing this structure.
+ typedef
+ struct JitFrameContext {
+ uint64 *p_ar_pfs;
+ uint64 *p_eip;
+ uint64 sp;
+ uint64 *p_gr[128];
+ uint64 *p_fp[128];
+ uint64 preds;
+ uint64 *p_br[8];
+ uint64 nats_lo;
+ uint64 nats_hi;
+ Boolean is_ip_past;
+ uint64 ar_fpsr;
+ uint64 ar_unat;
+ uint64 ar_lc;
+ } JitFrameContext; //JitFrameContext
+
+#elif defined _EM64T_
+
+ typedef
+ struct JitFrameContext {
+ uint64 rsp;
+ uint64 * p_rbp;
+ uint64 * p_rip;
+
+ // Callee-saved registers
+ uint64 * p_rbx;
+ uint64 * p_r12;
+ uint64 * p_r13;
+ uint64 * p_r14;
+ uint64 * p_r15;
+
+ // The scratch registers are currently only valid during GC enumeration.
+ uint64 * p_rax;
+ uint64 * p_rcx;
+ uint64 * p_rdx;
+ uint64 * p_rsi;
+ uint64 * p_rdi;
+ uint64 * p_r8;
+ uint64 * p_r9;
+ uint64 * p_r10;
+ uint64 * p_r11;
+
+ // To restore processor flags during transfer
+ uint32 eflags;
+
+ Boolean is_ip_past;
+ } JitFrameContext;
+
+#else // "_IA32_"
+
+ typedef
+ struct JitFrameContext {
+ uint32 esp;
+ uint32 *p_ebp;
+ uint32 *p_eip;
+
+ // Callee-saved registers
+ uint32 *p_edi;
+ uint32 *p_esi;
+ uint32 *p_ebx;
+
+ // The scratch registers are currently only valid during GC enumeration.
+ uint32 *p_eax;
+ uint32 *p_ecx;
+ uint32 *p_edx;
+
+ // To restore processor flags during transfer
+ uint32 eflags;
+
+ Boolean is_ip_past;
+ } JitFrameContext;
+
+#endif // "_IA32_"
+
+ // end Frame Contexts for JITs
+ ///////////////////////////////////////////////////////
+
+typedef void * InlineInfoPtr;
+typedef void * Compile_Handle; //deprecated??
+
+typedef
+ enum Method_Side_Effects {
+ MSE_Unknown,
+ MSE_True,
+ MSE_False,
+ MSE_True_Null_Param
+ } Method_Side_Effects;
+
+/**
+* @sa method_allocate_code_block
+*/
+
+typedef enum Code_Allocation_ActionEnum {
+ CAA_Simulate,
+ CAA_Allocate
+}Code_Allocation_Action;
+
+//
+// Code block heat - used when a method is split into hot and cold parts
+//
+typedef enum {
+ CodeBlockHeatMin,
+ CodeBlockHeatDefault,
+ CodeBlockHeatMax
+} CodeBlockHeat;
+
+
+#endif // !_RUNTIME_TYPES_H_
Propchange: harmony/enhanced/drlvm/trunk/vm/include/open/rt_types.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export.h?rev=634179&r1=634178&r2=634179&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export.h Wed Mar 5 23:00:16 2008
@@ -31,15 +31,14 @@
#include "open/types.h"
#include "open/ee_em_intf.h"
+#include "open/rt_types.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
-typedef void *Compile_Handle;
-#include "jit_export_rt.h"
////////////////////////////////////////////////////////
// Optional functions that don't have to be provided.
@@ -52,119 +51,6 @@
// Required functions.
////////////////////////////////////////////////////////
-/**
-* Elements of this struct correspond to certain requirements
-* of how a managed method is executed (what it additionally does
-* during execution). Most of them correspond to requirements to
-* call a certain VM helpers at certain places in the code. For JIT,
-* in particular, this means that it will have to generate additional
-* code which will perform these calls.
-* <p>
-* Each of the requirement is associated with a corresponding ability of
-* the EE to satisfy this requirement. So, elements of the struct should also
-* be used to denote EE capabilities related to method execution.
-* <p>
-* If an element corresponds to a certain VM helper, concrete contract
-* of calling this helper (arguments, etc.) can be found at the place of
-* definition of this helper (or its ID) within present OPEN specification.
-*/
-typedef struct OpenMethodExecutionParams {
- /** call corresponding VM helper upon entry to the managed method */
- Boolean exe_notify_method_entry : 1;
-
- /** call corresponding VM helper upon exit from the managed method */
- Boolean exe_notify_method_exit : 1;
-
- /** call corresponding VM helper upon reading a value of a field which has <field access mask> set */
- Boolean exe_notify_field_access : 1;
-
- /** call corresponding VM helper upon setting a value of a field which has <field modification mask> set */
- Boolean exe_notify_field_modification : 1;
-
- /**
- * call corresponding VM helper upon exception throw,
- * if by default the throw code does not enter any VM helper
- * (for example, in case of JIT optimizations)
- */
- Boolean exe_notify_exception_throw : 1;
-
- /**
- * call corresponding VM helper upon exception catch,
- * if by default the exception propagation code does not enter any VM helper
- * (for example, in case of JIT optimizations)
- */
- Boolean exe_notify_exception_catch : 1;
-
- /**
- * call corresponding VM helper upon entering a monitor,
- * if by default the monitor enter code does not enter any VM helper
- * (for example, in case of JIT optimizations)
- */
- Boolean exe_notify_monitor_enter : 1;
-
- /**
- * call corresponding VM helper upon exiting a monitor,
- * if by default the monitor exit code does not enter any VM helper
- * (for example, in case of JIT optimizations)
- */
- Boolean exe_notify_monitor_exit : 1;
-
- /**
- * call corresponding VM helper upon entering a contended monitor,
- * if by default the contended monitor enter code does not enter any VM helper
- * (for example, in case of JIT optimizations)
- */
- Boolean exe_notify_contended_monitor_enter : 1;
-
- /**
- * call corresponding VM helper upon exiting a contended monitor,
- * if by default the contended monitor exit code does not enter any VM helper
- * (for example, in case of JIT optimizations)
- */
- Boolean exe_notify_contended_monitor_exit : 1;
-
- /** perform method in-lining during compilation (JIT-specific) */
- Boolean exe_do_method_inlining : 1;
-
- /**
- * Keep correspondence between bytecode offsets and native instruction IPs (JIT-specific).
- * For a JIT this, in particular, means that it should not do any optimizations which
- * may hinder this mapping. It should also store the map after method compilation so that
- * later VM could use appropriate ExeJPDA interfaces to retrieve the mapping.
- */
- Boolean exe_do_code_mapping : 1;
-
- /**
- * Keep correspondence between bytecode local variables and locations of the
- * native operands (JIT-specific) in relevant locations within method code.
- * For a JIT this, in particular, means that it should not do any optimizations
- * which may hinder this mapping. It should also store the map after method compilation
- * so that later VM could use appropriate ExeJPDA interfaces to retrieve the mapping.
- */
- Boolean exe_do_local_var_mapping : 1;
-
- /** call corresponding VM helper upon setting a value of any field of reference type */
- Boolean exe_insert_write_barriers : 1;
-
- /**
- * Provide possibility to obtain reference to the current 'this' object by
- * means of get_address_of_this method. Used for JVMTI debug support.
- */
- Boolean exe_provide_access_to_this : 1;
-
- /**
- * Provide restoring of arguments in the stack after the call
- * of the unwind_frame method so that method could be called again
- * with the same arguments. Used for JVMTI debug support.
- */
- Boolean exe_restore_context_after_unwind : 1;
-
- /**
- * Sent CompileMethodLoad event when a method is compiled and loaded into memory
- */
- Boolean exe_notify_compiled_method_load : 1;
-
-} OpenMethodExecutionParams;
/**
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export_rt.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export_rt.h?rev=634179&r1=634178&r2=634179&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export_rt.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/jit_export_rt.h Wed Mar 5 23:00:16 2008
@@ -14,11 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-/**
- * @author Intel, Alexei Fedotov
- * @version $Revision: 1.1.2.1.4.3 $
- */
-
//
// These are the functions that a JIT built as a DLL must export for
@@ -28,103 +23,13 @@
#ifndef _JIT_EXPORT_RT_H
#define _JIT_EXPORT_RT_H
-
#include "open/types.h"
-#include "jit_export.h"
+#include "open/rt_types.h"
+#include "open/em.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
-
-
-
-///////////////////////////////////////////////////////
-// begin Frame Contexts for JITs
-
-#ifdef _IPF_
-
-// Note that the code in transfer context is very depend upon the ordering of fields in this structure.
-// Be very careful in changing this structure.
-typedef
-struct JitFrameContext {
- uint64 *p_ar_pfs;
- uint64 *p_eip;
- uint64 sp;
- uint64 *p_gr[128];
- uint64 *p_fp[128];
- uint64 preds;
- uint64 *p_br[8];
- uint64 nats_lo;
- uint64 nats_hi;
- Boolean is_ip_past;
- uint64 ar_fpsr;
- uint64 ar_unat;
- uint64 ar_lc;
-} JitFrameContext; //JitFrameContext
-
-#elif defined _EM64T_
-
-typedef
-struct JitFrameContext {
- uint64 rsp;
- uint64 * p_rbp;
- uint64 * p_rip;
-
- // Callee-saved registers
- uint64 * p_rbx;
- uint64 * p_r12;
- uint64 * p_r13;
- uint64 * p_r14;
- uint64 * p_r15;
-
- // The scratch registers are currently only valid during GC enumeration.
- uint64 * p_rax;
- uint64 * p_rcx;
- uint64 * p_rdx;
- uint64 * p_rsi;
- uint64 * p_rdi;
- uint64 * p_r8;
- uint64 * p_r9;
- uint64 * p_r10;
- uint64 * p_r11;
-
- // To restore processor flags during transfer
- uint32 eflags;
-
- Boolean is_ip_past;
-} JitFrameContext;
-
-#else // "_IA32_"
-
-typedef
-struct JitFrameContext {
- uint32 esp;
- uint32 *p_ebp;
- uint32 *p_eip;
-
- // Callee-saved registers
- uint32 *p_edi;
- uint32 *p_esi;
- uint32 *p_ebx;
-
- // The scratch registers are currently only valid during GC enumeration.
- uint32 *p_eax;
- uint32 *p_ecx;
- uint32 *p_edx;
-
- // To restore processor flags during transfer
- uint32 eflags;
-
- Boolean is_ip_past;
-} JitFrameContext;
-
-#endif // "_IA32_"
-
-typedef void * InlineInfoPtr;
-
-// end Frame Contexts for JITs
-///////////////////////////////////////////////////////
-
///////////////////////////////////////////////////////