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