1.1 --- a/src/cpu/sparc/vm/stubGenerator_sparc.cpp Thu Aug 25 20:29:30 2011 -0700 1.2 +++ b/src/cpu/sparc/vm/stubGenerator_sparc.cpp Fri Aug 26 08:52:22 2011 -0700 1.3 @@ -3069,6 +3069,34 @@ 1.4 return start; 1.5 } 1.6 1.7 + // 1.8 + // Generate stub for heap zeroing. 1.9 + // "to" address is aligned to jlong (8 bytes). 1.10 + // 1.11 + // Arguments for generated stub: 1.12 + // to: O0 1.13 + // count: O1 treated as signed (count of HeapWord) 1.14 + // count could be 0 1.15 + // 1.16 + address generate_zero_aligned_words(const char* name) { 1.17 + __ align(CodeEntryAlignment); 1.18 + StubCodeMark mark(this, "StubRoutines", name); 1.19 + address start = __ pc(); 1.20 + 1.21 + const Register to = O0; // source array address 1.22 + const Register count = O1; // HeapWords count 1.23 + const Register temp = O2; // scratch 1.24 + 1.25 + Label Ldone; 1.26 + __ sllx(count, LogHeapWordSize, count); // to bytes count 1.27 + // Use BIS for zeroing 1.28 + __ bis_zeroing(to, count, temp, Ldone); 1.29 + __ bind(Ldone); 1.30 + __ retl(); 1.31 + __ delayed()->nop(); 1.32 + return start; 1.33 +} 1.34 + 1.35 void generate_arraycopy_stubs() { 1.36 address entry; 1.37 address entry_jbyte_arraycopy; 1.38 @@ -3195,6 +3223,10 @@ 1.39 StubRoutines::_arrayof_jbyte_fill = generate_fill(T_BYTE, true, "arrayof_jbyte_fill"); 1.40 StubRoutines::_arrayof_jshort_fill = generate_fill(T_SHORT, true, "arrayof_jshort_fill"); 1.41 StubRoutines::_arrayof_jint_fill = generate_fill(T_INT, true, "arrayof_jint_fill"); 1.42 + 1.43 + if (UseBlockZeroing) { 1.44 + StubRoutines::_zero_aligned_words = generate_zero_aligned_words("zero_aligned_words"); 1.45 + } 1.46 } 1.47 1.48 void generate_initial() {