Mercurial > hg > truffle
diff src/gpu/hsail/vm/hsailKernelArguments.cpp @ 13900:d9aad522d355
HSAIL: fixed bug in kernel argument logic
Contributed-by: Tom Deneau <tom.deneau@amd.com>
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 06 Feb 2014 22:47:41 +0100 |
parents | 51584f76462d |
children |
line wrap: on
line diff
--- a/src/gpu/hsail/vm/hsailKernelArguments.cpp Thu Feb 06 22:34:23 2014 +0100 +++ b/src/gpu/hsail/vm/hsailKernelArguments.cpp Thu Feb 06 22:47:41 2014 +0100 @@ -70,7 +70,7 @@ jvalue jValue; java_lang_boxing_object::get_value(arg, &jValue); if (TraceGPUInteraction) { - tty->print_cr("[HSAIL] HSAILKernelArguments::double value = %e", jValue.d); + tty->print_cr("[HSAIL] HSAILKernelArguments::do_double, _index=%d, value = %e", _index - 1, jValue.d); } bool pushed = Hsail::_okra_push_double(_kernel, jValue.d); assert(pushed == true, "arg push failed"); @@ -84,7 +84,7 @@ jvalue jValue; java_lang_boxing_object::get_value(arg, &jValue); if (TraceGPUInteraction) { - tty->print_cr("[HSAIL] HSAILKernelArguments::float value = %f", jValue.f); + tty->print_cr("[HSAIL] HSAILKernelArguments::do_float, _index=%d, value = %f", _index - 1, jValue.f); } bool pushed = Hsail::_okra_push_float(_kernel, jValue.f); assert(pushed == true, "float push failed"); @@ -93,7 +93,7 @@ void HSAILKernelArguments::do_int() { // The last int is the iteration variable in an IntStream, but we don't pass it // since we use the HSAIL workitemid in place of that int value - if (_parameter_index == _parameter_count - 1) { + if (isLastParameter()) { if (TraceGPUInteraction) { tty->print_cr("[HSAIL] HSAILKernelArguments::not pushing trailing int"); } @@ -106,6 +106,9 @@ jvalue jValue; java_lang_boxing_object::get_value(arg, &jValue); + if (TraceGPUInteraction) { + tty->print_cr("[HSAIL] HSAILKernelArguments::do_int, _index=%d, value = %d", _index - 1, jValue.i); + } bool pushed = Hsail::_okra_push_int(_kernel, jValue.i); assert(pushed == true, "arg push failed"); @@ -118,6 +121,9 @@ jvalue jValue; java_lang_boxing_object::get_value(arg, &jValue); + if (TraceGPUInteraction) { + tty->print_cr("[HSAIL] HSAILKernelArguments::do_long, _index=%d, value = %d", _index - 1, jValue.j); + } bool pushed = Hsail::_okra_push_long(_kernel, jValue.j); assert(pushed == true, "arg push failed"); @@ -127,7 +133,7 @@ oop arg = _args->obj_at(_index++); assert(arg->is_array(), "arg type mismatch"); if (TraceGPUInteraction) { - tty->print_cr("[HSAIL] HSAILKernelArguments::do_array 0x%08x, is a %s", (address) arg, arg->klass()->external_name()); + tty->print_cr("[HSAIL] HSAILKernelArguments::do_array, _index=%d, 0x%08x, is a %s", _index - 1, (address) arg, arg->klass()->external_name()); } bool pushed = Hsail::_okra_push_object(_kernel, arg); @@ -135,14 +141,14 @@ } void HSAILKernelArguments::do_object() { - if (TraceGPUInteraction) { - tty->print_cr("[HSAIL] HSAILKernelArguments::do_object, _parameter_index=%d", _parameter_index); - } + + bool isLastParam = isLastParameter(); // determine this before incrementing _index + oop arg = _args->obj_at(_index++); // check if this is last arg in signature // an object as last parameter requires an object stream source array to be passed - if (_parameter_index == _parameter_count - 1) { + if (isLastParam) { if (TraceGPUInteraction) { tty->print_cr("[HSAIL] HSAILKernelArguments::trailing object ref should be object source array ref"); } @@ -150,7 +156,7 @@ } if (TraceGPUInteraction) { - tty->print_cr("[HSAIL] HSAILKernelArguments::do_object, 0x%08x is a %s", (address) arg, arg->klass()->external_name()); + tty->print_cr("[HSAIL] HSAILKernelArguments::do_object, _index=%d, 0x%08x is a %s", _index - 1, (address) arg, arg->klass()->external_name()); } bool pushed = Hsail::_okra_push_object(_kernel, arg);