Mercurial > hg > truffle
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(); |