Request for reviews (M): 7059037: Use BIS for zeroing on T4
Christian Thalinger
christian.thalinger at oracle.com
Thu Aug 25 00:59:25 PDT 2011
On Aug 25, 2011, at 2:52 AM, Vladimir Kozlov wrote:
> http://cr.openjdk.java.net/~kvn/7059037/webrev
>
> 7059037: Use BIS for zeroing on T4
>
> On T4 BIS to the beginning of cache line always zeros it. Use it for zeroing new
> allocated java objects. The main code is in MacroAssembler::bis_zeroing() and is
> used by C2 generated code (ClearArray), runtime (Copy::fill_to_aligned_words())
> and template interpreter (TemplateTable::_new()). New stub zero_aligned_words
> was added to use in runtime.
>
> BIS is used only for objects bigger than BlkZeroingLowLimit (2Kbyte) since it
> requires membar. 2Hb was selected based on microbenchmark results.
>
> I also added wrasi(Reg, immI) instruction which I used during development.
> VM_Version::has_mru_blk_init() is replaced with has_blk_zeroing() since original
> was not used.
> Zap new object in CollectedHeap::allocate_from_tlab_slow() instead of zeroing it
> since it will be cleaned later in init_obj().
> Fixed call sites of check_for_bad_heap_word_value() where klass is not
> initialized to avoid the verification failure.
>
src/cpu/sparc/vm/assembler_sparc.cpp:
+ int cach_line_size = VM_Version::prefetch_data_size();
I guess this should be cache_line_size.
+ // Use BIS zeroing only for big arrays since it requires membar.
+ if (Assembler::is_simm13(blk_zero_size)) { // < 4096
+ cmp(count, blk_zero_size);
+ } else {
+ set(blk_zero_size, temp);
+ cmp(count, temp);
+ }
You could use ensure_simm13_or_reg here:
cmp(count, ensure_simm13_or_reg(blk_zero_size, temp));
but I think you have to add a cmp(Register s1, RegisterOrConstant s2).
+ // Clean the beginning of space upto next cache line.
There is a space missing: "up to".
Otherwise this looks good.
A side question: what's the difference between using reg_to_register_object($tmp$$reg) and $tmp$$Register? What does:
assert(L5->encoding() == R_L5_enc && G1->encoding() == R_G1_enc, "right coding");
in reg_to_register_object actually check for?
-- Christian
More information about the hotspot-compiler-dev
mailing list