Mercurial > hg > graal-compiler
comparison src/share/vm/graal/graalCompilerToGPU.cpp @ 12456:f87c68d79f07
improved support for co-existing, multiple backends (GRAAL-363)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 17 Oct 2013 01:08:17 +0200 |
parents | 67a1e27a8dbb |
children | bb5a7574ae81 |
comparison
equal
deleted
inserted
replaced
12455:d08accd58925 | 12456:f87c68d79f07 |
---|---|
21 * questions. | 21 * questions. |
22 */ | 22 */ |
23 | 23 |
24 #include "precompiled.hpp" | 24 #include "precompiled.hpp" |
25 | 25 |
26 #include "memory/oopFactory.hpp" | |
26 #include "graal/graalCompiler.hpp" | 27 #include "graal/graalCompiler.hpp" |
27 #include "graal/graalEnv.hpp" | 28 #include "graal/graalEnv.hpp" |
28 #include "graal/graalJavaAccess.hpp" | 29 #include "graal/graalJavaAccess.hpp" |
29 #include "runtime/gpu.hpp" | 30 #include "runtime/gpu.hpp" |
30 #include "runtime/javaCalls.hpp" | 31 #include "runtime/javaCalls.hpp" |
187 return false; | 188 return false; |
188 } | 189 } |
189 return gpu::available_processors(); | 190 return gpu::available_processors(); |
190 C2V_END | 191 C2V_END |
191 | 192 |
193 static objArrayHandle newSingletonStringArray(const char* value, TRAPS) { | |
194 objArrayOop res = oopFactory::new_objArray(SystemDictionary::String_klass(), 1, CHECK_NULL); | |
195 objArrayHandle res_h = objArrayHandle(THREAD, res); | |
196 Handle valueString = java_lang_String::create_from_str(value, CHECK_NULL); | |
197 res_h->obj_at_put(0, valueString()); | |
198 return res_h; | |
199 } | |
200 | |
201 C2V_VMENTRY(jobject, getAvailableGPUArchitectures, (JNIEnv *env, jobject)) | |
202 if (UseGPU) { | |
203 if (gpu::is_available() && gpu::has_gpu_linkage()) { | |
204 if (gpu::get_target_il_type() == gpu::PTX) { | |
205 return JNIHandles::make_local(newSingletonStringArray("PTX", THREAD)()); | |
206 } | |
207 if (gpu::get_target_il_type() == gpu::HSAIL) { | |
208 return JNIHandles::make_local(newSingletonStringArray("HSAIL", THREAD)()); | |
209 } | |
210 } | |
211 } | |
212 return JNIHandles::make_local(oopFactory::new_objArray(SystemDictionary::String_klass(), 0, THREAD)); | |
213 C2V_END | |
214 | |
192 C2V_VMENTRY(jboolean, deviceDetach, (JNIEnv *env, jobject)) | 215 C2V_VMENTRY(jboolean, deviceDetach, (JNIEnv *env, jobject)) |
193 return true; | 216 return true; |
194 C2V_END | 217 C2V_END |
195 | 218 |
196 | 219 |
203 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" | 226 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" |
204 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;" | 227 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;" |
205 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" | 228 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" |
206 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" | 229 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" |
207 #define KIND "Lcom/oracle/graal/api/meta/Kind;" | 230 #define KIND "Lcom/oracle/graal/api/meta/Kind;" |
208 #define LOCAL "Lcom/oracle/graal/api/meta/Local;" | 231 #define LOCAL "Lcom/oracle/graal/api/meta/Local;" |
209 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" | 232 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" |
210 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" | 233 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" |
211 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" | 234 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" |
212 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" | 235 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" |
213 #define REFLECT_FIELD "Ljava/lang/reflect/Field;" | 236 #define REFLECT_FIELD "Ljava/lang/reflect/Field;" |
232 JNINativeMethod CompilerToGPU_methods[] = { | 255 JNINativeMethod CompilerToGPU_methods[] = { |
233 {CC"generateKernel", CC"([B" STRING ")"GPUSPACE_METHOD, FN_PTR(generateKernel)}, | 256 {CC"generateKernel", CC"([B" STRING ")"GPUSPACE_METHOD, FN_PTR(generateKernel)}, |
234 {CC"deviceInit", CC"()Z", FN_PTR(deviceInit)}, | 257 {CC"deviceInit", CC"()Z", FN_PTR(deviceInit)}, |
235 {CC"deviceDetach", CC"()Z", FN_PTR(deviceDetach)}, | 258 {CC"deviceDetach", CC"()Z", FN_PTR(deviceDetach)}, |
236 {CC"availableProcessors", CC"()I", FN_PTR(availableProcessors)}, | 259 {CC"availableProcessors", CC"()I", FN_PTR(availableProcessors)}, |
260 {CC"getAvailableGPUArchitectures", CC"()["STRING, FN_PTR(getAvailableGPUArchitectures)}, | |
237 {CC"executeExternalMethodVarargs", CC"(["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeExternalMethodVarargs)}, | 261 {CC"executeExternalMethodVarargs", CC"(["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeExternalMethodVarargs)}, |
238 {CC"executeParallelMethodVarargs", CC"(III["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeParallelMethodVarargs)}, | 262 {CC"executeParallelMethodVarargs", CC"(III["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeParallelMethodVarargs)}, |
239 }; | 263 }; |
240 | 264 |
241 int CompilerToGPU_methods_count() { | 265 int CompilerToGPU_methods_count() { |