< prev index next >

src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp

Print this page

        

@@ -562,12 +562,10 @@
     StubCodeMark mark(this, "StubRoutines", "shenandoah_wb");
 
     __ align(6);
     address start = __ pc();
 
-    Label slow_case, lose, not_an_instance, is_array;
-
     if (do_cset_test) {
       Label work;
       __ mov(rscratch2, ShenandoahHeap::in_cset_fast_test_addr());
       __ lsr(rscratch1, r0, ShenandoahHeapRegion::region_size_bytes_shift_jint());
       __ ldrb(rscratch2, Address(rscratch2, rscratch1));

@@ -575,133 +573,10 @@
       __ ret(lr);
       __ bind(work);
     }
 
     Register obj = r0;
-    if (UseTLAB && ShenandoahAsmWB) {
-      RegSet saved = RegSet::range(r1, r4);
-      if (!c_abi) {
-        __ push(saved, sp);
-      }
-
-      Register size = r2, newobj = r3, newobj_end = rscratch2;
-
-      __ ldr(newobj, Address(rthread, JavaThread::gclab_top_offset()));
-      __ cbz(newobj, slow_case); // No GCLAB
-
-      __ load_klass(r1, obj);
-
-      __ ldrw(size, Address(r1, Klass::layout_helper_offset()));
-      __ tbnz(size, BitsPerInt - 1, not_an_instance);  // make sure it's an instance (LH > 0)
-      assert(Klass::_lh_neutral_value == 0, "must be");
-      __ cbzw(size, slow_case);
-      __ tbnz(size, exact_log2(Klass::_lh_instance_slow_path_bit), slow_case);
-      __ bind(is_array);
-
-      // size contains the size (in bytes) of the object.
-
-      // Make sure it's not a really big object.
-      // ??? Maybe this test is not necessary.
-      __ cmp(size, 128 * HeapWordSize);
-      __ br(Assembler::GE, slow_case);
-
-      int oop_extra_words = Universe::heap()->oop_extra_words();
-      __ add(newobj_end, newobj, oop_extra_words * HeapWordSize);
-      __ add(newobj_end, newobj_end, size, ext::uxtw);
-
-      // Pointer to end of new object is in newobj_end.
-
-      __ ldr(rscratch1, Address(rthread, JavaThread::gclab_end_offset()));
-      __ cmp(newobj_end, rscratch1);
-      __ br(Assembler::HS, slow_case); // No room in GCLAB
-
-      // Store Brooks pointer and adjust start of newobj.
-      Universe::heap()->compile_prepare_oop(_masm, newobj);
-
-      // We can reuse newobj_end (rscratch2) to hold dst.
-      Register src = r1, dst = newobj_end;
-
-      // Copy the object from obj to newobj.  This loop is short and
-      // sweet: the typical size of an object is about eight HeapWords
-      // so it makes no sense to optimize for a large memory copy.
-      // There might be some sense to calling generate_copy_longs from
-      // here if the object to be copied is very large.
-      Label loop, odd_count;
-      {
-        __ mov(src, obj);
-        __ mov(dst, newobj);
-        __ tbnz(size, exact_log2(HeapWordSize), odd_count);
-
-        // Live registers: obj, newobj, size, src, dst.
-
-        __ bind(loop);
-        // Count is even.  Copy pairs of HeapWords.
-        __ ldp(rscratch1, r4, __ post(src, 2 * HeapWordSize));
-        __ stp(rscratch1, r4, __ post(dst, 2 * HeapWordSize));
-        __ subs(size, size, 2 * HeapWordSize);
-        __ br(Assembler::GT, loop);
-      }
-
-      // All copied.  Now try to CAS the Brooks pointer.
-      Label succeed;
-      __ lea(r2, Address(obj, BrooksPointer::byte_offset()));
-      __ cmpxchgptr(obj, newobj, r2, rscratch1, succeed, NULL);
-      // If we lose the CAS we are racing with someone who just beat
-      // us evacuating the object.  This leaves the address of the
-      // evacuated object in r0.
-
-      // We lost.
-      if (!c_abi) {
-        __ pop(saved, sp);
-      }
-      __ ret(lr);
-
-      // We won.
-      __ bind(succeed);
-      __ mov(obj, newobj);
-      // dst points to end of newobj.
-      __ str(dst, Address(rthread, JavaThread::gclab_top_offset()));
-      if (!c_abi) {
-        __ pop(saved, sp);
-      }
-      __ ret(lr);
-
-      // Come here if the count of HeapWords is odd.
-      {
-        __ bind(odd_count);
-        __ ldr(rscratch1, __ post(src, HeapWordSize));
-        __ str(rscratch1, __ post(dst, HeapWordSize));
-        __ subs(size, size, HeapWordSize);
-        __ b(loop);
-      }
-
-      // Come here if obj is an array of some kind.
-      {
-        __ bind(not_an_instance);
-
-        // It's an array.  Calculate the size in r4.
-        __ ubfx(r4, size, Klass::_lh_header_size_shift,
-                exact_log2(Klass::_lh_header_size_mask+1));
-        __ ldrw(rscratch1, Address(obj, arrayOopDesc::length_offset_in_bytes()));
-        __ ubfx(rscratch2, size, Klass::_lh_log2_element_size_shift,
-                exact_log2(Klass::_lh_log2_element_size_mask+1));
-        __ lslv(rscratch1, rscratch1, rscratch2);
-        __ add(size, rscratch1, r4);
-
-        // Round up the size.
-        __ add(size, size, MinObjAlignmentInBytes-1);
-        __ andr(size, size, -MinObjAlignmentInBytes);
-
-        __ b(is_array);
-      }
-
-      // Make a runtime call to evacuate the object.
-      __ bind(slow_case);
-      if (!c_abi) {
-          __ pop(saved, sp);
-      }
-    }
 
     __ enter(); // required for proper stackwalking of RuntimeStub frame
 
     if (!c_abi) {
       __ push_call_clobbered_registers();
< prev index next >