6996240: The BitSet.length method sometimes returns an index+1 value less than that of the highest bit set.

Tue, 02 Nov 2010 14:56:40 -0700

author
twisti
date
Tue, 02 Nov 2010 14:56:40 -0700
changeset 2270
885e464e1a40
parent 2269
ae065c367d93
child 2271
e62345fd6a46

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);

mercurial