Mercurial > hg > graal-jvmci-8
diff src/share/vm/graal/graalVMEntries.cpp @ 3567:dbf8d6a4201f
Merge
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Thu, 01 Sep 2011 09:52:58 +0200 |
parents | b0d192f86f34 8780fa370aab |
children | da1b32a58d7e |
line wrap: on
line diff
--- a/src/share/vm/graal/graalVMEntries.cpp Thu Sep 01 09:43:10 2011 +0200 +++ b/src/share/vm/graal/graalVMEntries.cpp Thu Sep 01 09:52:58 2011 +0200 @@ -799,6 +799,31 @@ return JNIHandles::make_local(THREAD, GraalCompiler::get_RiType(klass, KlassHandle(), THREAD)); } +// public long getMaxCallTargetOffset(CiRuntimeCall rtcall); +JNIEXPORT jlong JNICALL Java_com_oracle_graal_runtime_VMEntries_getMaxCallTargetOffset(JNIEnv *env, jobject, jobject rtcall) { + TRACE_graal_3("VMEntries::VMEntries_getMaxCallTargetOffset"); + VM_ENTRY_MARK; + oop call = JNIHandles::resolve(rtcall); + address target_addr = 0x0; + if (call == CiRuntimeCall::ArithmeticSin()) { + target_addr = CAST_FROM_FN_PTR(address, SharedRuntime::dsin); + } else if (call == CiRuntimeCall::ArithmeticCos()) { + target_addr = CAST_FROM_FN_PTR(address, SharedRuntime::dcos); + } else if (call == CiRuntimeCall::ArithmeticTan()) { + target_addr = CAST_FROM_FN_PTR(address, SharedRuntime::dtan); + } else if (call == CiRuntimeCall::JavaTimeMillis()) { + target_addr = CAST_FROM_FN_PTR(address, os::javaTimeMillis); + } else if (call == CiRuntimeCall::JavaTimeNanos()) { + target_addr = CAST_FROM_FN_PTR(address, os::javaTimeNanos); + } + if (target_addr != 0x0) { + int64_t off_low = (int64_t)target_addr - ((int64_t)CodeCache::low_bound() + sizeof(int)); + int64_t off_high = (int64_t)target_addr - ((int64_t)CodeCache::high_bound() + sizeof(int)); + return MAX2(ABS(off_low), ABS(off_high)); + } + return -1; +} + // public RiType getType(Class<?> javaClass); JNIEXPORT jobject JNICALL Java_com_oracle_graal_runtime_VMEntries_getType(JNIEnv *env, jobject, jobject javaClass) { TRACE_graal_3("VMEntries::VMEntries_getType"); @@ -991,6 +1016,7 @@ #define HS_METHOD "Lcom/oracle/max/graal/runtime/HotSpotMethod;" #define CI_CONSTANT "Lcom/sun/cri/ci/CiConstant;" #define CI_KIND "Lcom/sun/cri/ci/CiKind;" +#define CI_RUNTIME_CALL "Lcom/sun/cri/ci/CiRuntimeCall;" #define STRING "Ljava/lang/String;" #define OBJECT "Ljava/lang/Object;" #define CLASS "Ljava/lang/Class;" @@ -1025,6 +1051,7 @@ {CC"RiType_fields", CC"("RESOLVED_TYPE")["FIELD, FN_PTR(Java_com_oracle_graal_runtime_VMEntries_RiType_1fields)}, {CC"RiType_isInitialized", CC"("RESOLVED_TYPE")Z", FN_PTR(Java_com_oracle_graal_runtime_VMEntries_RiType_1isInitialized)}, {CC"getPrimitiveArrayType", CC"("CI_KIND")"TYPE, FN_PTR(Java_com_oracle_graal_runtime_VMEntries_getPrimitiveArrayType)}, + {CC"getMaxCallTargetOffset", CC"("CI_RUNTIME_CALL")J", FN_PTR(Java_com_oracle_graal_runtime_VMEntries_getMaxCallTargetOffset)}, {CC"getType", CC"("CLASS")"TYPE, FN_PTR(Java_com_oracle_graal_runtime_VMEntries_getType)}, {CC"getConfiguration", CC"()"CONFIG, FN_PTR(Java_com_oracle_graal_runtime_VMEntries_getConfiguration)}, {CC"installMethod", CC"("TARGET_METHOD")V", FN_PTR(Java_com_oracle_graal_runtime_VMEntries_installMethod)},