src/cpu/sparc/vm/assembler_sparc.cpp

changeset 1229
315a5d70b295
parent 1162
6b2273dd6fa9
child 1280
df6caf649ff7
     1.1 --- a/src/cpu/sparc/vm/assembler_sparc.cpp	Thu May 07 17:09:48 2009 -0700
     1.2 +++ b/src/cpu/sparc/vm/assembler_sparc.cpp	Mon May 11 16:30:56 2009 -0700
     1.3 @@ -4454,43 +4454,26 @@
     1.4      delayed()->nop();
     1.5    }
     1.6  
     1.7 -  // Now we decide how to generate the card table write.  If we're
     1.8 -  // enqueueing, we call out to a generated function.  Otherwise, we do it
     1.9 -  // inline here.
    1.10 -
    1.11 -  if (G1RSBarrierUseQueue) {
    1.12 -    // If the "store_addr" register is an "in" or "local" register, move it to
    1.13 -    // a scratch reg so we can pass it as an argument.
    1.14 -    bool use_scr = !(store_addr->is_global() || store_addr->is_out());
    1.15 -    // Pick a scratch register different from "tmp".
    1.16 -    Register scr = (tmp == G1_scratch ? G3_scratch : G1_scratch);
    1.17 -    // Make sure we use up the delay slot!
    1.18 -    if (use_scr) {
    1.19 -      post_filter_masm->mov(store_addr, scr);
    1.20 -    } else {
    1.21 -      post_filter_masm->nop();
    1.22 -    }
    1.23 -    generate_dirty_card_log_enqueue_if_necessary(bs->byte_map_base);
    1.24 -    save_frame(0);
    1.25 -    call(dirty_card_log_enqueue);
    1.26 -    if (use_scr) {
    1.27 -      delayed()->mov(scr, O0);
    1.28 -    } else {
    1.29 -      delayed()->mov(store_addr->after_save(), O0);
    1.30 -    }
    1.31 -    restore();
    1.32 -
    1.33 +  // If the "store_addr" register is an "in" or "local" register, move it to
    1.34 +  // a scratch reg so we can pass it as an argument.
    1.35 +  bool use_scr = !(store_addr->is_global() || store_addr->is_out());
    1.36 +  // Pick a scratch register different from "tmp".
    1.37 +  Register scr = (tmp == G1_scratch ? G3_scratch : G1_scratch);
    1.38 +  // Make sure we use up the delay slot!
    1.39 +  if (use_scr) {
    1.40 +    post_filter_masm->mov(store_addr, scr);
    1.41    } else {
    1.42 -
    1.43 -#ifdef _LP64
    1.44 -    post_filter_masm->srlx(store_addr, CardTableModRefBS::card_shift, store_addr);
    1.45 -#else
    1.46 -    post_filter_masm->srl(store_addr, CardTableModRefBS::card_shift, store_addr);
    1.47 -#endif
    1.48 -    assert(tmp != store_addr, "need separate temp reg");
    1.49 -    set(bs->byte_map_base, tmp);
    1.50 -    stb(G0, tmp, store_addr);
    1.51 +    post_filter_masm->nop();
    1.52    }
    1.53 +  generate_dirty_card_log_enqueue_if_necessary(bs->byte_map_base);
    1.54 +  save_frame(0);
    1.55 +  call(dirty_card_log_enqueue);
    1.56 +  if (use_scr) {
    1.57 +    delayed()->mov(scr, O0);
    1.58 +  } else {
    1.59 +    delayed()->mov(store_addr->after_save(), O0);
    1.60 +  }
    1.61 +  restore();
    1.62  
    1.63    bind(filtered);
    1.64  

mercurial