287 } else {
288 // Address already in register
289 ref_addr = stub->ref_addr()->as_address_ptr()->base()->as_pointer_register();
290 }
291
292 assert_different_registers(ref, ref_addr, noreg);
293
294 // Save rax unless it is the result or tmp register
295 if (ref != rax && tmp != rax) {
296 __ push(rax);
297 }
298
299 // Setup arguments and call runtime stub
300 __ subptr(rsp, 2 * BytesPerWord);
301 ce->store_parameter(ref_addr, 1);
302 ce->store_parameter(ref, 0);
303 __ call(RuntimeAddress(stub->runtime_stub()));
304 __ addptr(rsp, 2 * BytesPerWord);
305
306 // Verify result
307 __ verify_oop(rax, "Bad oop");
308
309 // Move result into place
310 if (ref != rax) {
311 __ movptr(ref, rax);
312 }
313
314 // Restore rax unless it is the result or tmp register
315 if (ref != rax && tmp != rax) {
316 __ pop(rax);
317 }
318
319 // Stub exit
320 __ jmp(*stub->continuation());
321 }
322
323 #undef __
324 #define __ sasm->
325
326 void ZBarrierSetAssembler::generate_c1_load_barrier_runtime_stub(StubAssembler* sasm,
327 DecoratorSet decorators) const {
|
287 } else {
288 // Address already in register
289 ref_addr = stub->ref_addr()->as_address_ptr()->base()->as_pointer_register();
290 }
291
292 assert_different_registers(ref, ref_addr, noreg);
293
294 // Save rax unless it is the result or tmp register
295 if (ref != rax && tmp != rax) {
296 __ push(rax);
297 }
298
299 // Setup arguments and call runtime stub
300 __ subptr(rsp, 2 * BytesPerWord);
301 ce->store_parameter(ref_addr, 1);
302 ce->store_parameter(ref, 0);
303 __ call(RuntimeAddress(stub->runtime_stub()));
304 __ addptr(rsp, 2 * BytesPerWord);
305
306 // Verify result
307 __ verify_oop(rax);
308
309 // Move result into place
310 if (ref != rax) {
311 __ movptr(ref, rax);
312 }
313
314 // Restore rax unless it is the result or tmp register
315 if (ref != rax && tmp != rax) {
316 __ pop(rax);
317 }
318
319 // Stub exit
320 __ jmp(*stub->continuation());
321 }
322
323 #undef __
324 #define __ sasm->
325
326 void ZBarrierSetAssembler::generate_c1_load_barrier_runtime_stub(StubAssembler* sasm,
327 DecoratorSet decorators) const {
|