2768 bind(no_reserved_zone_enabling);
2769 BLOCK_COMMENT("} reserved_stack_check");
2770 }
2771
2772 // Defines obj, preserves var_size_in_bytes, okay for t2 == var_size_in_bytes.
2773 void MacroAssembler::tlab_allocate(Register obj,
2774 Register var_size_in_bytes,
2775 int con_size_in_bytes,
2776 Register t1,
2777 Label& slow_case) {
2778 assert_different_registers(obj, var_size_in_bytes, t1);
2779 Register end = t1;
2780 Register thread = Z_thread;
2781
2782 z_lg(obj, Address(thread, JavaThread::tlab_top_offset()));
2783 if (var_size_in_bytes == noreg) {
2784 z_lay(end, Address(obj, con_size_in_bytes));
2785 } else {
2786 z_lay(end, Address(obj, var_size_in_bytes));
2787 }
2788 z_cg(end, Address(thread, JavaThread::tlab_end_offset()));
2789 branch_optimized(bcondHigh, slow_case);
2790
2791 // Update the tlab top pointer.
2792 z_stg(end, Address(thread, JavaThread::tlab_top_offset()));
2793
2794 // Recover var_size_in_bytes if necessary.
2795 if (var_size_in_bytes == end) {
2796 z_sgr(var_size_in_bytes, obj);
2797 }
2798 }
2799
2800 // Emitter for interface method lookup.
2801 // input: recv_klass, intf_klass, itable_index
2802 // output: method_result
2803 // kills: itable_index, temp1_reg, Z_R0, Z_R1
2804 // TODO: Temp2_reg is unused. we may use this emitter also in the itable stubs.
2805 // If the register is still not needed then, remove it.
2806 void MacroAssembler::lookup_interface_method(Register recv_klass,
2807 Register intf_klass,
2808 RegisterOrConstant itable_index,
|
2768 bind(no_reserved_zone_enabling);
2769 BLOCK_COMMENT("} reserved_stack_check");
2770 }
2771
2772 // Defines obj, preserves var_size_in_bytes, okay for t2 == var_size_in_bytes.
2773 void MacroAssembler::tlab_allocate(Register obj,
2774 Register var_size_in_bytes,
2775 int con_size_in_bytes,
2776 Register t1,
2777 Label& slow_case) {
2778 assert_different_registers(obj, var_size_in_bytes, t1);
2779 Register end = t1;
2780 Register thread = Z_thread;
2781
2782 z_lg(obj, Address(thread, JavaThread::tlab_top_offset()));
2783 if (var_size_in_bytes == noreg) {
2784 z_lay(end, Address(obj, con_size_in_bytes));
2785 } else {
2786 z_lay(end, Address(obj, var_size_in_bytes));
2787 }
2788 z_cg(end, Address(thread, JavaThread::tlab_fast_path_end_offset()));
2789 branch_optimized(bcondHigh, slow_case);
2790
2791 // Update the tlab top pointer.
2792 z_stg(end, Address(thread, JavaThread::tlab_top_offset()));
2793
2794 // Recover var_size_in_bytes if necessary.
2795 if (var_size_in_bytes == end) {
2796 z_sgr(var_size_in_bytes, obj);
2797 }
2798 }
2799
2800 // Emitter for interface method lookup.
2801 // input: recv_klass, intf_klass, itable_index
2802 // output: method_result
2803 // kills: itable_index, temp1_reg, Z_R0, Z_R1
2804 // TODO: Temp2_reg is unused. we may use this emitter also in the itable stubs.
2805 // If the register is still not needed then, remove it.
2806 void MacroAssembler::lookup_interface_method(Register recv_klass,
2807 Register intf_klass,
2808 RegisterOrConstant itable_index,
|