src/cpu/sparc/vm/interpreterRT_sparc.cpp

changeset 2036
126ea7725993
parent 1907
c18cbe5936b8
child 2314
f95d63e2154a
equal deleted inserted replaced
2035:a64438a2b7e8 2036:126ea7725993
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) );

mercurial