373 |
373 |
374 // Push arguments as if coming from the interpreter. |
374 // Push arguments as if coming from the interpreter. |
375 Register O0_scratch = O0_argslot; |
375 Register O0_scratch = O0_argslot; |
376 int stackElementSize = Interpreter::stackElementSize; |
376 int stackElementSize = Interpreter::stackElementSize; |
377 |
377 |
378 // Make space on the stack for the arguments. |
378 // Make space on the stack for the arguments and set Gargs |
379 __ sub(SP, 4*stackElementSize, SP); |
379 // correctly. |
380 __ sub(Gargs, 3*stackElementSize, Gargs); |
380 __ sub(SP, 4*stackElementSize, SP); // Keep stack aligned. |
381 //__ sub(Lesp, 3*stackElementSize, Lesp); |
381 __ add(SP, (frame::varargs_offset)*wordSize - 1*Interpreter::stackElementSize + STACK_BIAS + BytesPerWord, Gargs); |
382 |
382 |
383 // void raiseException(int code, Object actual, Object required) |
383 // void raiseException(int code, Object actual, Object required) |
384 __ st( O1_scratch, Address(Gargs, 2*stackElementSize)); // code |
384 __ st( O1_scratch, Address(Gargs, 2*stackElementSize)); // code |
385 __ st_ptr(O2_scratch, Address(Gargs, 1*stackElementSize)); // actual |
385 __ st_ptr(O2_scratch, Address(Gargs, 1*stackElementSize)); // actual |
386 __ st_ptr(O3_scratch, Address(Gargs, 0*stackElementSize)); // required |
386 __ st_ptr(O3_scratch, Address(Gargs, 0*stackElementSize)); // required |