8198439: Fix aarch64 code for handling generate_code_for after FastTLABFill obsolete code
Summary: Fix aarch64 issue when moving the stp down and to a str
Reviewed-by: adinn, smonteith
Contributed-by: jcbeyler@google.com
--- a/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp Wed Feb 21 07:50:33 2018 +0100
+++ b/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp Tue Feb 20 09:46:48 2018 -0800
@@ -691,6 +691,8 @@
Register t2 = r4;
assert_different_registers(klass, obj, obj_size, t1, t2);
+ __ stp(r19, zr, Address(__ pre(sp, -2 * wordSize)));
+
if (id == fast_new_instance_init_check_id) {
// make sure the klass is initialized
__ ldrb(rscratch1, Address(klass, InstanceKlass::init_state_offset()));
@@ -717,18 +719,16 @@
// get the instance size (size is postive so movl is fine for 64bit)
__ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
- __ str(r19, Address(__ pre(sp, -wordSize)));
-
__ eden_allocate(obj, obj_size, 0, t1, slow_path);
__ incr_allocated_bytes(rthread, obj_size, 0, rscratch1);
__ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ false);
__ verify_oop(obj);
- __ ldr(r19, Address(__ post(sp, wordSize)));
+ __ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
__ ret(lr);
__ bind(slow_path);
- __ ldr(r19, Address(__ post(sp, wordSize)));
+ __ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
}
__ enter();