Tue, 02 Nov 2010 14:56:40 -0700
6996240: The BitSet.length method sometimes returns an index+1 value less than that of the highest bit set.
Reviewed-by: never, kvn
src/cpu/sparc/vm/sparc.ad | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/sparc/vm/sparc.ad Tue Nov 02 09:00:37 2010 -0700 1.2 +++ b/src/cpu/sparc/vm/sparc.ad Tue Nov 02 14:56:40 2010 -0700 1.3 @@ -9516,16 +9516,16 @@ 1.4 Register Rdst = $dst$$Register; 1.5 Register Rsrc = $src$$Register; 1.6 Register Rtmp = $tmp$$Register; 1.7 - __ srl(Rsrc, 1, Rtmp); 1.8 - __ srl(Rsrc, 0, Rdst); 1.9 + __ srl(Rsrc, 1, Rtmp); 1.10 + __ srl(Rsrc, 0, Rdst); 1.11 __ or3(Rdst, Rtmp, Rdst); 1.12 - __ srl(Rdst, 2, Rtmp); 1.13 + __ srl(Rdst, 2, Rtmp); 1.14 __ or3(Rdst, Rtmp, Rdst); 1.15 - __ srl(Rdst, 4, Rtmp); 1.16 + __ srl(Rdst, 4, Rtmp); 1.17 __ or3(Rdst, Rtmp, Rdst); 1.18 - __ srl(Rdst, 8, Rtmp); 1.19 + __ srl(Rdst, 8, Rtmp); 1.20 __ or3(Rdst, Rtmp, Rdst); 1.21 - __ srl(Rdst, 16, Rtmp); 1.22 + __ srl(Rdst, 16, Rtmp); 1.23 __ or3(Rdst, Rtmp, Rdst); 1.24 __ popc(Rdst, Rdst); 1.25 __ mov(BitsPerInt, Rtmp); 1.26 @@ -9534,7 +9534,7 @@ 1.27 ins_pipe(ialu_reg); 1.28 %} 1.29 1.30 -instruct countLeadingZerosL(iRegI dst, iRegL src, iRegL tmp, flagsReg cr) %{ 1.31 +instruct countLeadingZerosL(iRegIsafe dst, iRegL src, iRegL tmp, flagsReg cr) %{ 1.32 predicate(UsePopCountInstruction); // See Matcher::match_rule_supported 1.33 match(Set dst (CountLeadingZerosL src)); 1.34 effect(TEMP dst, TEMP tmp, KILL cr); 1.35 @@ -9565,18 +9565,18 @@ 1.36 Register Rdst = $dst$$Register; 1.37 Register Rsrc = $src$$Register; 1.38 Register Rtmp = $tmp$$Register; 1.39 - __ srlx(Rsrc, 1, Rtmp); 1.40 - __ or3(Rsrc, Rtmp, Rdst); 1.41 - __ srlx(Rdst, 2, Rtmp); 1.42 - __ or3(Rdst, Rtmp, Rdst); 1.43 - __ srlx(Rdst, 4, Rtmp); 1.44 - __ or3(Rdst, Rtmp, Rdst); 1.45 - __ srlx(Rdst, 8, Rtmp); 1.46 - __ or3(Rdst, Rtmp, Rdst); 1.47 - __ srlx(Rdst, 16, Rtmp); 1.48 - __ or3(Rdst, Rtmp, Rdst); 1.49 - __ srlx(Rdst, 32, Rtmp); 1.50 - __ or3(Rdst, Rtmp, Rdst); 1.51 + __ srlx(Rsrc, 1, Rtmp); 1.52 + __ or3( Rsrc, Rtmp, Rdst); 1.53 + __ srlx(Rdst, 2, Rtmp); 1.54 + __ or3( Rdst, Rtmp, Rdst); 1.55 + __ srlx(Rdst, 4, Rtmp); 1.56 + __ or3( Rdst, Rtmp, Rdst); 1.57 + __ srlx(Rdst, 8, Rtmp); 1.58 + __ or3( Rdst, Rtmp, Rdst); 1.59 + __ srlx(Rdst, 16, Rtmp); 1.60 + __ or3( Rdst, Rtmp, Rdst); 1.61 + __ srlx(Rdst, 32, Rtmp); 1.62 + __ or3( Rdst, Rtmp, Rdst); 1.63 __ popc(Rdst, Rdst); 1.64 __ mov(BitsPerLong, Rtmp); 1.65 __ sub(Rtmp, Rdst, Rdst);