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) ); |