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