src/cpu/sparc/vm/stubGenerator_sparc.cpp

changeset 3092
baf763f388e6
parent 3037
3d42f82cd811
child 3103
2f9b79ddb05c
     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() {

mercurial