Mercurial > hg > truffle
comparison src/share/vm/runtime/javaCalls.hpp @ 8151:b8f261ba79c6
Minimize diff to plain HotSpot version.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Thu, 07 Mar 2013 21:00:29 +0100 |
parents | 291ffc492eb6 |
children | 2156359ee519 |
comparison
equal
deleted
inserted
replaced
8150:b66f831ac5ab | 8151:b8f261ba79c6 |
---|---|
96 intptr_t* _value; | 96 intptr_t* _value; |
97 bool* _is_oop; | 97 bool* _is_oop; |
98 int _size; | 98 int _size; |
99 int _max_size; | 99 int _max_size; |
100 bool _start_at_zero; // Support late setting of receiver | 100 bool _start_at_zero; // Support late setting of receiver |
101 #ifdef GRAAL | |
102 nmethod* _alternative_target; // Nmethod that should be called instead of normal target | |
103 #endif | |
101 | 104 |
102 void initialize() { | 105 void initialize() { |
103 // Starts at first element to support set_receiver. | 106 // Starts at first element to support set_receiver. |
104 _value = &_value_buffer[1]; | 107 _value = &_value_buffer[1]; |
105 _is_oop = &_is_oop_buffer[1]; | 108 _is_oop = &_is_oop_buffer[1]; |
106 | 109 |
107 _max_size = _default_size; | 110 _max_size = _default_size; |
108 _size = 0; | 111 _size = 0; |
109 _start_at_zero = false; | 112 _start_at_zero = false; |
113 GRAAL_ONLY(_alternative_target = NULL;) | |
110 } | 114 } |
111 | 115 |
112 public: | 116 public: |
113 JavaCallArguments() { initialize(); } | 117 JavaCallArguments() { initialize(); } |
114 | 118 |
131 } else { | 135 } else { |
132 initialize(); | 136 initialize(); |
133 } | 137 } |
134 } | 138 } |
135 | 139 |
140 #ifdef GRAAL | |
141 void set_alternative_target(nmethod* target) { | |
142 _alternative_target = target; | |
143 } | |
144 | |
145 nmethod* alternative_target() { | |
146 return _alternative_target; | |
147 } | |
148 #endif | |
149 | |
136 inline void push_oop(Handle h) { _is_oop[_size] = true; | 150 inline void push_oop(Handle h) { _is_oop[_size] = true; |
137 JNITypes::put_obj((oop)h.raw_value(), _value, _size); } | 151 JNITypes::put_obj((oop)h.raw_value(), _value, _size); } |
138 | 152 |
139 inline void push_int(int i) { _is_oop[_size] = false; | 153 inline void push_int(int i) { _is_oop[_size] = false; |
140 JNITypes::put_int(i, _value, _size); } | 154 JNITypes::put_int(i, _value, _size); } |
145 inline void push_long(jlong l) { _is_oop[_size] = false; _is_oop[_size + 1] = false; | 159 inline void push_long(jlong l) { _is_oop[_size] = false; _is_oop[_size + 1] = false; |
146 JNITypes::put_long(l, _value, _size); } | 160 JNITypes::put_long(l, _value, _size); } |
147 | 161 |
148 inline void push_float(float f) { _is_oop[_size] = false; | 162 inline void push_float(float f) { _is_oop[_size] = false; |
149 JNITypes::put_float(f, _value, _size); } | 163 JNITypes::put_float(f, _value, _size); } |
150 | |
151 inline oop* get_raw_oop(int& pos) { return (oop*)JNITypes::get_obj(_value, pos); } | |
152 inline jint get_int(int& pos) { return JNITypes::get_int(_value, pos); } | |
153 inline jdouble get_double(int& pos) { return JNITypes::get_double(_value, pos); } | |
154 inline jlong get_long(int& pos) { return JNITypes::get_long(_value, pos); } | |
155 inline jfloat get_float(int& pos) { return JNITypes::get_float(_value, pos); } | |
156 | 164 |
157 // receiver | 165 // receiver |
158 Handle receiver() { | 166 Handle receiver() { |
159 assert(_size > 0, "must at least be one argument"); | 167 assert(_size > 0, "must at least be one argument"); |
160 assert(_is_oop[0], "first argument must be an oop"); | 168 assert(_is_oop[0], "first argument must be an oop"); |
183 // All calls to Java have to go via JavaCalls. Sets up the stack frame | 191 // All calls to Java have to go via JavaCalls. Sets up the stack frame |
184 // and makes sure that the last_Java_frame pointers are chained correctly. | 192 // and makes sure that the last_Java_frame pointers are chained correctly. |
185 // | 193 // |
186 | 194 |
187 class JavaCalls: AllStatic { | 195 class JavaCalls: AllStatic { |
188 static void call_helper(JavaValue* result, methodHandle* method, nmethod* nm, JavaCallArguments* args, TRAPS); | 196 static void call_helper(JavaValue* result, methodHandle* method, JavaCallArguments* args, TRAPS); |
189 public: | 197 public: |
190 // Optimized Constuctor call | 198 // Optimized Constuctor call |
191 static void call_default_constructor(JavaThread* thread, methodHandle method, Handle receiver, TRAPS); | 199 static void call_default_constructor(JavaThread* thread, methodHandle method, Handle receiver, TRAPS); |
192 | 200 |
193 // call_special | 201 // call_special |
194 // ------------ | 202 // ------------ |
223 static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS); | 231 static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, TRAPS); |
224 static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS); | 232 static void call_static(JavaValue* result, KlassHandle klass, Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS); |
225 | 233 |
226 // Low-level interface | 234 // Low-level interface |
227 static void call(JavaValue* result, methodHandle method, JavaCallArguments* args, TRAPS); | 235 static void call(JavaValue* result, methodHandle method, JavaCallArguments* args, TRAPS); |
228 static void call(JavaValue* result, methodHandle method, nmethod* nm, JavaCallArguments* args, TRAPS); | |
229 }; | 236 }; |
230 | 237 |
231 #endif // SHARE_VM_RUNTIME_JAVACALLS_HPP | 238 #endif // SHARE_VM_RUNTIME_JAVACALLS_HPP |