< prev index next >

src/cpu/aarch64/vm/macroAssembler_aarch64.cpp

Print this page
rev 12700 : 8176506: C2: loop unswitching and unsafe accesses cause crash
Reviewed-by:


5267 
5268 // get_thread() can be called anywhere inside generated code so we
5269 // need to save whatever non-callee save context might get clobbered
5270 // by the call to JavaThread::aarch64_get_thread_helper() or, indeed,
5271 // the call setup code.
5272 //
5273 // aarch64_get_thread_helper() clobbers only r0, r1, and flags.
5274 //
5275 void MacroAssembler::get_thread(Register dst) {
5276   RegSet saved_regs = RegSet::range(r0, r1) + lr - dst;
5277   push(saved_regs, sp);
5278 
5279   mov(lr, CAST_FROM_FN_PTR(address, JavaThread::aarch64_get_thread_helper));
5280   blrt(lr, 1, 0, 1);
5281   if (dst != c_rarg0) {
5282     mov(dst, c_rarg0);
5283   }
5284 
5285   pop(saved_regs, sp);
5286 }











5267 
5268 // get_thread() can be called anywhere inside generated code so we
5269 // need to save whatever non-callee save context might get clobbered
5270 // by the call to JavaThread::aarch64_get_thread_helper() or, indeed,
5271 // the call setup code.
5272 //
5273 // aarch64_get_thread_helper() clobbers only r0, r1, and flags.
5274 //
5275 void MacroAssembler::get_thread(Register dst) {
5276   RegSet saved_regs = RegSet::range(r0, r1) + lr - dst;
5277   push(saved_regs, sp);
5278 
5279   mov(lr, CAST_FROM_FN_PTR(address, JavaThread::aarch64_get_thread_helper));
5280   blrt(lr, 1, 0, 1);
5281   if (dst != c_rarg0) {
5282     mov(dst, c_rarg0);
5283   }
5284 
5285   pop(saved_regs, sp);
5286 }
5287 
5288 static void halt() {
5289   ShouldNotReachHere();
5290 }
5291 
5292 void MacroAssembler::halt() {
5293   mov(lr, RuntimeAddress(CAST_FROM_FN_PTR(address, ::halt)));
5294   blr(lr);
5295 }
< prev index next >