1.1 --- a/src/cpu/sparc/vm/sparc.ad Thu Apr 17 07:16:03 2008 -0700 1.2 +++ b/src/cpu/sparc/vm/sparc.ad Wed Apr 23 11:20:36 2008 -0700 1.3 @@ -5957,15 +5957,27 @@ 1.4 1.5 // Convert oop pointer into compressed form 1.6 instruct encodeHeapOop(iRegN dst, iRegP src) %{ 1.7 + predicate(n->bottom_type()->is_narrowoop()->make_oopptr()->ptr() != TypePtr::NotNull); 1.8 match(Set dst (EncodeP src)); 1.9 - format %{ "SRL $src,3,$dst\t encodeHeapOop" %} 1.10 + format %{ "encode_heap_oop $src, $dst" %} 1.11 ins_encode %{ 1.12 __ encode_heap_oop($src$$Register, $dst$$Register); 1.13 %} 1.14 ins_pipe(ialu_reg); 1.15 %} 1.16 1.17 +instruct encodeHeapOop_not_null(iRegN dst, iRegP src) %{ 1.18 + predicate(n->bottom_type()->is_narrowoop()->make_oopptr()->ptr() == TypePtr::NotNull); 1.19 + match(Set dst (EncodeP src)); 1.20 + format %{ "encode_heap_oop_not_null $src, $dst" %} 1.21 + ins_encode %{ 1.22 + __ encode_heap_oop_not_null($src$$Register, $dst$$Register); 1.23 + %} 1.24 + ins_pipe(ialu_reg); 1.25 +%} 1.26 + 1.27 instruct decodeHeapOop(iRegP dst, iRegN src) %{ 1.28 + predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull); 1.29 match(Set dst (DecodeN src)); 1.30 format %{ "decode_heap_oop $src, $dst" %} 1.31 ins_encode %{ 1.32 @@ -5974,6 +5986,16 @@ 1.33 ins_pipe(ialu_reg); 1.34 %} 1.35 1.36 +instruct decodeHeapOop_not_null(iRegP dst, iRegN src) %{ 1.37 + predicate(n->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull); 1.38 + match(Set dst (DecodeN src)); 1.39 + format %{ "decode_heap_oop_not_null $src, $dst" %} 1.40 + ins_encode %{ 1.41 + __ decode_heap_oop_not_null($src$$Register, $dst$$Register); 1.42 + %} 1.43 + ins_pipe(ialu_reg); 1.44 +%} 1.45 + 1.46 1.47 // Store Zero into Aligned Packed Bytes 1.48 instruct storeA8B0(memory mem, immI0 zero) %{