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