src/cpu/mips/vm/macroAssembler_mips.cpp

changeset 9152
2d7317b44659
parent 9149
f977b3d18c61
child 9159
3b138a121964
     1.1 --- a/src/cpu/mips/vm/macroAssembler_mips.cpp	Tue Jun 19 11:18:58 2018 +0800
     1.2 +++ b/src/cpu/mips/vm/macroAssembler_mips.cpp	Wed Jun 20 18:01:16 2018 +0800
     1.3 @@ -1883,6 +1883,7 @@
     1.4      delayed()->nop();
     1.5  
     1.6      li(AT, (long)Universe::heap()->end_addr());
     1.7 +    ld_ptr(AT, AT, 0);
     1.8      sltu(AT, AT, end);
     1.9      bne_far(AT, R0, slow_case);
    1.10      delayed()->nop();
    1.11 @@ -1897,7 +1898,6 @@
    1.12      cmpxchg(end, heap_top, obj);
    1.13      beq_far(AT, R0, retry);    //by yyq
    1.14      delayed()->nop();
    1.15 -
    1.16    }
    1.17  }
    1.18  
    1.19 @@ -1905,28 +1905,12 @@
    1.20  void MacroAssembler::tlab_refill(Label& retry, Label& try_eden, Label& slow_case) {
    1.21    Register top = T0;
    1.22    Register t1  = T1;
    1.23 -/* Jin: tlab_refill() is called in
    1.24 -
    1.25 -     [c1_Runtime1_mips.cpp] Runtime1::generate_code_for(new_type_array_id);
    1.26 -
    1.27 -  In generate_code_for(), T2 has been assigned as a register(length), which is used
    1.28 - after calling tlab_refill();
    1.29 -  Therefore, tlab_refill() should not use T2.
    1.30 -
    1.31 - Source:
    1.32 -
    1.33 -Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
    1.34 -        at java.lang.System.arraycopy(Native Method)
    1.35 -        at java.util.Arrays.copyOf(Arrays.java:2799)  <-- alloc_array
    1.36 -        at sun.misc.Resource.getBytes(Resource.java:117)
    1.37 -        at java.net.URLClassLoader.defineClass(URLClassLoader.java:273)
    1.38 -        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    1.39 -        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    1.40 - */
    1.41    Register t2  = T9;
    1.42    Register t3  = T3;
    1.43    Register thread_reg = T8;
    1.44 +  assert_different_registers(top, thread_reg, t1, t2, /* preserve: */ T2, A4);
    1.45    Label do_refill, discard_tlab;
    1.46 +
    1.47    if (CMSIncrementalMode || !Universe::heap()->supports_inline_contig_alloc()) { //by yyq
    1.48      // No allocation in the shared eden.
    1.49      b(slow_case);
    1.50 @@ -1936,7 +1920,7 @@
    1.51    get_thread(thread_reg);
    1.52  
    1.53    ld_ptr(top, thread_reg, in_bytes(JavaThread::tlab_top_offset()));
    1.54 -  ld_ptr(t1, thread_reg, in_bytes(JavaThread::tlab_end_offset()));
    1.55 +  ld_ptr(t1,  thread_reg, in_bytes(JavaThread::tlab_end_offset()));
    1.56  
    1.57    // calculate amount of free space
    1.58    sub(t1, t1, top);
    1.59 @@ -1950,7 +1934,6 @@
    1.60    delayed()->nop();
    1.61  
    1.62    // Retain
    1.63 -
    1.64  #ifndef _LP64
    1.65    move(AT, ThreadLocalAllocBuffer::refill_waste_limit_increment());
    1.66  #else

mercurial