331 CAST_FROM_FN_PTR(address, |
331 CAST_FROM_FN_PTR(address, |
332 InterpreterRuntime::throw_StackOverflowError)); |
332 InterpreterRuntime::throw_StackOverflowError)); |
333 return entry; |
333 return entry; |
334 } |
334 } |
335 |
335 |
336 address TemplateInterpreterGenerator::generate_ArrayIndexOutOfBounds_handler( |
336 address TemplateInterpreterGenerator::generate_ArrayIndexOutOfBounds_handler() { |
337 const char* name) { |
|
338 address entry = __ pc(); |
337 address entry = __ pc(); |
339 // expression stack must be empty before entering the VM if an |
338 // expression stack must be empty before entering the VM if an |
340 // exception happened |
339 // exception happened |
341 __ empty_expression_stack(); |
340 __ empty_expression_stack(); |
342 // setup parameters |
341 // setup parameters |
|
342 |
343 // ??? convention: expect aberrant index in register r1 |
343 // ??? convention: expect aberrant index in register r1 |
344 __ movw(c_rarg2, r1); |
344 __ movw(c_rarg2, r1); |
345 __ mov(c_rarg1, (address)name); |
345 // ??? convention: expect array in register r3 |
|
346 __ mov(c_rarg1, r3); |
346 __ call_VM(noreg, |
347 __ call_VM(noreg, |
347 CAST_FROM_FN_PTR(address, |
348 CAST_FROM_FN_PTR(address, |
348 InterpreterRuntime:: |
349 InterpreterRuntime:: |
349 throw_ArrayIndexOutOfBoundsException), |
350 throw_ArrayIndexOutOfBoundsException), |
350 c_rarg1, c_rarg2); |
351 c_rarg1, c_rarg2); |