< prev index next >

src/cpu/aarch64/vm/interpreterRT_aarch64.cpp

Print this page




 352       _num_fp_args++;
 353     }
 354   }
 355 
 356   virtual void pass_double()
 357   {
 358     intptr_t from_obj = *(intptr_t*)(_from+Interpreter::local_offset_in_bytes(1));
 359     _from -= 2*Interpreter::stackElementSize;
 360 
 361     if (_num_fp_args < Argument::n_float_register_parameters_c) {
 362       *_fp_args++ = from_obj;
 363       *_fp_identifiers |= (1 << _num_fp_args); // mark as double
 364       _num_fp_args++;
 365     } else {
 366       *_to++ = from_obj;
 367       _num_fp_args++;
 368     }
 369   }
 370 
 371  public:
 372   SlowSignatureHandler(methodHandle method, address from, intptr_t* to)
 373     : NativeSignatureIterator(method)
 374   {
 375     _from = from;
 376     _to   = to;
 377 
 378     _int_args = to - (method->is_static() ? 16 : 17);
 379     _fp_args =  to - 8;
 380     _fp_identifiers = to - 9;
 381     *(int*) _fp_identifiers = 0;
 382     _num_int_args = (method->is_static() ? 1 : 0);
 383     _num_fp_args = 0;
 384   }
 385 
 386   // n.b. allow extra 1 for the JNI_Env in c_rarg0
 387   unsigned int get_call_format()
 388   {
 389     unsigned int call_format = ((_num_int_args + 1) << 6) | (_num_fp_args << 2);
 390 
 391     switch (method()->result_type()) {
 392     case T_VOID:




 352       _num_fp_args++;
 353     }
 354   }
 355 
 356   virtual void pass_double()
 357   {
 358     intptr_t from_obj = *(intptr_t*)(_from+Interpreter::local_offset_in_bytes(1));
 359     _from -= 2*Interpreter::stackElementSize;
 360 
 361     if (_num_fp_args < Argument::n_float_register_parameters_c) {
 362       *_fp_args++ = from_obj;
 363       *_fp_identifiers |= (1 << _num_fp_args); // mark as double
 364       _num_fp_args++;
 365     } else {
 366       *_to++ = from_obj;
 367       _num_fp_args++;
 368     }
 369   }
 370 
 371  public:
 372   SlowSignatureHandler(const methodHandle& method, address from, intptr_t* to)
 373     : NativeSignatureIterator(method)
 374   {
 375     _from = from;
 376     _to   = to;
 377 
 378     _int_args = to - (method->is_static() ? 16 : 17);
 379     _fp_args =  to - 8;
 380     _fp_identifiers = to - 9;
 381     *(int*) _fp_identifiers = 0;
 382     _num_int_args = (method->is_static() ? 1 : 0);
 383     _num_fp_args = 0;
 384   }
 385 
 386   // n.b. allow extra 1 for the JNI_Env in c_rarg0
 387   unsigned int get_call_format()
 388   {
 389     unsigned int call_format = ((_num_int_args + 1) << 6) | (_num_fp_args << 2);
 390 
 391     switch (method()->result_type()) {
 392     case T_VOID:


< prev index next >