Changeset 15024


Ignore:
Timestamp:
06/01/17 06:45:18 (6 years ago)
Author:
Mark Evenson
Message:

Optimise LOGCOUNT

(Olof-Joachim Frahm)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/logcount.java

    r12288 r15024  
    4646    }
    4747
    48     // FIXME Optimize fixnum case!
    4948    @Override
    5049    public LispObject execute(LispObject arg)
    5150    {
    52         BigInteger n;
    53         if (arg instanceof Fixnum)
    54             n = ((Fixnum)arg).getBigInteger();
    55         else if (arg instanceof Bignum)
    56             n = ((Bignum)arg).value;
     51        int n;
     52        if (arg instanceof Fixnum) {
     53            int value = ((Fixnum)arg).value;
     54            n = Integer.bitCount(value < 0 ? ~value : value);
     55        } else if (arg instanceof Bignum)
     56            n = ((Bignum)arg).value.bitCount();
    5757        else
    5858            return type_error(arg, Symbol.INTEGER);
    59         return Fixnum.getInstance(n.bitCount());
     59        return Fixnum.getInstance(n);
    6060    }
    6161
Note: See TracChangeset for help on using the changeset viewer.