hotspot/src/cpu/sparc/vm/interpreterRT_sparc.cpp
changeset 6176 4d9030fe341f
parent 5547 f4b087cbb361
child 7397 5b173b4ca846
equal deleted inserted replaced
6175:86dbf3cacacc 6176:4d9030fe341f
    54   __ store_argument(Rtmp, successor);
    54   __ store_argument(Rtmp, successor);
    55 #endif
    55 #endif
    56 }
    56 }
    57 
    57 
    58 
    58 
    59 #ifdef _LP64
       
    60 void InterpreterRuntime::SignatureHandlerGenerator::pass_float() {
    59 void InterpreterRuntime::SignatureHandlerGenerator::pass_float() {
    61   Argument  jni_arg(jni_offset(), false);
    60   Argument  jni_arg(jni_offset(), false);
       
    61 #ifdef _LP64
    62   FloatRegister  Rtmp = F0;
    62   FloatRegister  Rtmp = F0;
    63   __ ldf(FloatRegisterImpl::S, Llocals, Interpreter::local_offset_in_bytes(offset()), Rtmp);
    63   __ ldf(FloatRegisterImpl::S, Llocals, Interpreter::local_offset_in_bytes(offset()), Rtmp);
    64   __ store_float_argument(Rtmp, jni_arg);
    64   __ store_float_argument(Rtmp, jni_arg);
    65 }
    65 #else
       
    66   Register     Rtmp = O0;
       
    67   __ ld(Llocals, Interpreter::local_offset_in_bytes(offset()), Rtmp);
       
    68   __ store_argument(Rtmp, jni_arg);
    66 #endif
    69 #endif
       
    70 }
    67 
    71 
    68 
    72 
    69 void InterpreterRuntime::SignatureHandlerGenerator::pass_double() {
    73 void InterpreterRuntime::SignatureHandlerGenerator::pass_double() {
    70   Argument  jni_arg(jni_offset(), false);
    74   Argument  jni_arg(jni_offset(), false);
    71 #ifdef _LP64
    75 #ifdef _LP64
   183     _to[1] = *(intptr_t*)(_from+Interpreter::local_offset_in_bytes(0));
   187     _to[1] = *(intptr_t*)(_from+Interpreter::local_offset_in_bytes(0));
   184     _to += 2;
   188     _to += 2;
   185     _from -= 2*Interpreter::stackElementSize;
   189     _from -= 2*Interpreter::stackElementSize;
   186     add_signature( non_float );
   190     add_signature( non_float );
   187   }
   191   }
       
   192 
       
   193   virtual void pass_float() {
       
   194     *_to++ = *(jint *)(_from+Interpreter::local_offset_in_bytes(0));
       
   195     _from -= Interpreter::stackElementSize;
       
   196     add_signature( non_float );
       
   197   }
       
   198 
   188 #endif // _LP64
   199 #endif // _LP64
   189 
   200 
   190   virtual void add_signature( intptr_t sig_type ) {
   201   virtual void add_signature( intptr_t sig_type ) {
   191     if ( _argcount < (sizeof (intptr_t))*4 ) {
   202     if ( _argcount < (sizeof (intptr_t))*4 ) {
   192       *_RegArgSignature |= (sig_type << (_argcount*2) );
   203       *_RegArgSignature |= (sig_type << (_argcount*2) );