Mercurial > hg > graal-jvmci-8
comparison src/cpu/sparc/vm/stubGenerator_sparc.cpp @ 1506:2338d41fbd81
6943304: remove tagged stack interpreter
Reviewed-by: coleenp, never, gbenson
author | twisti |
---|---|
date | Fri, 30 Apr 2010 08:37:24 -0700 |
parents | c640000b7cc1 |
children | c18cbe5936b8 61b2245abf36 |
comparison
equal
deleted
inserted
replaced
1505:0c5b3cf3c1f5 | 1506:2338d41fbd81 |
---|---|
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); |