hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp
changeset 5419 f2e8cc8c12ea
parent 5416 5f6377fcfd3e
child 5687 b862d1f189bd
child 5547 f4b087cbb361
equal deleted inserted replaced
5418:c4955cb6ed33 5419:f2e8cc8c12ea
   137     // create activation frame & allocate space for parameters
   137     // create activation frame & allocate space for parameters
   138     { const Register t = G3_scratch;
   138     { const Register t = G3_scratch;
   139       __ ld_ptr(parameter_size.as_address(), t);                // get parameter size (in words)
   139       __ ld_ptr(parameter_size.as_address(), t);                // get parameter size (in words)
   140       __ add(t, frame::memory_parameter_word_sp_offset, t);     // add space for save area (in words)
   140       __ add(t, frame::memory_parameter_word_sp_offset, t);     // add space for save area (in words)
   141       __ round_to(t, WordsPerLong);                             // make sure it is multiple of 2 (in words)
   141       __ round_to(t, WordsPerLong);                             // make sure it is multiple of 2 (in words)
   142       __ sll(t, Interpreter::logStackElementSize(), t);                    // compute number of bytes
   142       __ sll(t, Interpreter::logStackElementSize, t);           // compute number of bytes
   143       __ neg(t);                                                // negate so it can be used with save
   143       __ neg(t);                                                // negate so it can be used with save
   144       __ save(SP, t, SP);                                       // setup new frame
   144       __ save(SP, t, SP);                                       // setup new frame
   145     }
   145     }
   146 
   146 
   147     // +---------------+ <--- sp + 0
   147     // +---------------+ <--- sp + 0
   189       __ delayed()->sub(dst, BytesPerWord, dst);                 // setup Lentry_args
   189       __ delayed()->sub(dst, BytesPerWord, dst);                 // setup Lentry_args
   190 
   190 
   191       // copy parameters if any
   191       // copy parameters if any
   192       Label loop;
   192       Label loop;
   193       __ BIND(loop);
   193       __ BIND(loop);
   194       // Store tag first.
       
   195       if (TaggedStackInterpreter) {
       
   196         __ ld_ptr(src, 0, tmp);
       
   197         __ add(src, BytesPerWord, src);  // get next
       
   198         __ st_ptr(tmp, dst, Interpreter::tag_offset_in_bytes());
       
   199       }
       
   200       // Store parameter value
   194       // Store parameter value
   201       __ ld_ptr(src, 0, tmp);
   195       __ ld_ptr(src, 0, tmp);
   202       __ add(src, BytesPerWord, src);
   196       __ add(src, BytesPerWord, src);
   203       __ st_ptr(tmp, dst, Interpreter::value_offset_in_bytes());
   197       __ st_ptr(tmp, dst, 0);
   204       __ deccc(cnt);
   198       __ deccc(cnt);
   205       __ br(Assembler::greater, false, Assembler::pt, loop);
   199       __ br(Assembler::greater, false, Assembler::pt, loop);
   206       __ delayed()->sub(dst, Interpreter::stackElementSize(), dst);
   200       __ delayed()->sub(dst, Interpreter::stackElementSize, dst);
   207 
   201 
   208       // done
   202       // done
   209       __ BIND(exit);
   203       __ BIND(exit);
   210     }
   204     }
   211 
   205 
   218 #endif
   212 #endif
   219 
   213 
   220     // setup parameters
   214     // setup parameters
   221     const Register t = G3_scratch;
   215     const Register t = G3_scratch;
   222     __ ld_ptr(parameter_size.as_in().as_address(), t); // get parameter size (in words)
   216     __ ld_ptr(parameter_size.as_in().as_address(), t); // get parameter size (in words)
   223     __ sll(t, Interpreter::logStackElementSize(), t);            // compute number of bytes
   217     __ sll(t, Interpreter::logStackElementSize, t);    // compute number of bytes
   224     __ sub(FP, t, Gargs);                              // setup parameter pointer
   218     __ sub(FP, t, Gargs);                              // setup parameter pointer
   225 #ifdef _LP64
   219 #ifdef _LP64
   226     __ add( Gargs, STACK_BIAS, Gargs );                // Account for LP64 stack bias
   220     __ add( Gargs, STACK_BIAS, Gargs );                // Account for LP64 stack bias
   227 #endif
   221 #endif
   228     __ mov(SP, O5_savedSP);
   222     __ mov(SP, O5_savedSP);