comparison src/gpu/hsail/vm/hsailArgumentsBase.hpp @ 16119:310994c667a7

HSAIL: support offloading some IntStream.reduce() operations to HSA Contributed-by: Eric Caspole <eric.caspole@amd.com>
author Doug Simon <doug.simon@oracle.com>
date Tue, 17 Jun 2014 12:05:34 +0200
parents 06eedda53e14
children
comparison
equal deleted inserted replaced
16117:3b4690ddd92e 16119:310994c667a7
65 virtual void pushLong(jlong j) = 0; 65 virtual void pushLong(jlong j) = 0;
66 virtual void handleFinalIntParameter() = 0; 66 virtual void handleFinalIntParameter() = 0;
67 virtual void handleFinalObjParameter(void* obj) = 0; 67 virtual void handleFinalObjParameter(void* obj) = 0;
68 virtual void pushTrailingArgs() = 0; 68 virtual void pushTrailingArgs() = 0;
69 69
70 void recordNullObjectParameter() {
71 if (_first_null_parameter_index == -1) _first_null_parameter_index = _parameter_index;
72 }
73
74 public: 70 public:
75 HSAILArgumentsBase(Symbol* signature, objArrayOop args, bool is_static) : SignatureIterator(signature) { 71 HSAILArgumentsBase(Symbol* signature, objArrayOop args, bool is_static) : SignatureIterator(signature) {
76 this->_return_type = T_ILLEGAL; 72 this->_return_type = T_ILLEGAL;
77 _index = 0; 73 _index = 0;
78 _args = args; 74 _args = args;
84 80
85 _first_null_parameter_index = -1; 81 _first_null_parameter_index = -1;
86 82
87 } 83 }
88 84
85 void recordNullObjectParameter() {
86 if (_first_null_parameter_index == -1) {
87 _first_null_parameter_index = _parameter_index;
88 }
89 }
90
91 bool is_static() {
92 return _is_static;
93 }
94
95 int length() {
96 return _length;
97 }
98
99 objArrayOop args() {
100 return _args;
101 }
102
89 int getFirstNullParameterIndex() { 103 int getFirstNullParameterIndex() {
90 return _first_null_parameter_index; 104 return _first_null_parameter_index;
91 } 105 }
92 106
93 void collectArgs() { 107 virtual void collectArgs();
94 if (TraceGPUInteraction) {
95 tty->print_cr("[HSAIL] %s::collectArgs, sig:%s args length=%d", argsBuilderName(), _signature->as_C_string(), _length);
96 }
97 if (!_is_static) {
98 // First object in args should be 'this'
99 oop arg = _args->obj_at(_index++);
100 assert(arg->is_instance() && (! arg->is_array()), "First arg should be 'this'");
101 if (TraceGPUInteraction) {
102 tty->print_cr("[HSAIL] %s, instance method, this " PTR_FORMAT ", is a %s", argsBuilderName(), (address) arg, arg->klass()->external_name());
103 }
104 pushObject(arg);
105 } else {
106 if (TraceGPUInteraction) {
107 tty->print_cr("[HSAIL] %s, static method", argsBuilderName());
108 }
109 }
110 // Iterate over the entire signature
111 iterate();
112
113 pushTrailingArgs();
114 }
115 108
116 void do_bool(); 109 void do_bool();
117 void do_byte(); 110 void do_byte();
118 void do_double(); 111 void do_double();
119 void do_float(); 112 void do_float();