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 }
|