329 {
330 jint from_obj = *(jint*)(_from+Interpreter::local_offset_in_bytes(0));
331 _from -= Interpreter::stackElementSize;
332
333 if (_num_fp_args < Argument::n_float_register_parameters_c) {
334 *_fp_args++ = from_obj;
335 _num_fp_args++;
336 } else {
337 *_to++ = from_obj;
338 _num_fp_args++;
339 }
340 }
341
342 virtual void pass_double()
343 {
344 intptr_t from_obj = *(intptr_t*)(_from+Interpreter::local_offset_in_bytes(1));
345 _from -= 2*Interpreter::stackElementSize;
346
347 if (_num_fp_args < Argument::n_float_register_parameters_c) {
348 *_fp_args++ = from_obj;
349 *_fp_identifiers |= (1 << _num_fp_args); // mark as double
350 _num_fp_args++;
351 } else {
352 *_to++ = from_obj;
353 _num_fp_args++;
354 }
355 }
356
357 public:
358 SlowSignatureHandler(const methodHandle& method, address from, intptr_t* to)
359 : NativeSignatureIterator(method)
360 {
361 _from = from;
362 _to = to;
363
364 _int_args = to - (method->is_static() ? 16 : 17);
365 _fp_args = to - 8;
366 _fp_identifiers = to - 9;
367 *(int*) _fp_identifiers = 0;
368 _num_int_args = (method->is_static() ? 1 : 0);
369 _num_fp_args = 0;
|
329 {
330 jint from_obj = *(jint*)(_from+Interpreter::local_offset_in_bytes(0));
331 _from -= Interpreter::stackElementSize;
332
333 if (_num_fp_args < Argument::n_float_register_parameters_c) {
334 *_fp_args++ = from_obj;
335 _num_fp_args++;
336 } else {
337 *_to++ = from_obj;
338 _num_fp_args++;
339 }
340 }
341
342 virtual void pass_double()
343 {
344 intptr_t from_obj = *(intptr_t*)(_from+Interpreter::local_offset_in_bytes(1));
345 _from -= 2*Interpreter::stackElementSize;
346
347 if (_num_fp_args < Argument::n_float_register_parameters_c) {
348 *_fp_args++ = from_obj;
349 *_fp_identifiers |= (1ULL << _num_fp_args); // mark as double
350 _num_fp_args++;
351 } else {
352 *_to++ = from_obj;
353 _num_fp_args++;
354 }
355 }
356
357 public:
358 SlowSignatureHandler(const methodHandle& method, address from, intptr_t* to)
359 : NativeSignatureIterator(method)
360 {
361 _from = from;
362 _to = to;
363
364 _int_args = to - (method->is_static() ? 16 : 17);
365 _fp_args = to - 8;
366 _fp_identifiers = to - 9;
367 *(int*) _fp_identifiers = 0;
368 _num_int_args = (method->is_static() ? 1 : 0);
369 _num_fp_args = 0;
|