qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Mips 64 emulation not compiling


From: Christian \"Eddie\" Dost
Subject: Re: [Qemu-devel] Mips 64 emulation not compiling
Date: Sat, 27 Oct 2007 15:27:01 +0200
User-agent: Thunderbird 2.0.0.6 (Macintosh/20070728)

The sparc64 popc works in O(lg(n)), the "optimized" code below work in O(n). Could be better to generalize the sparc64 code, like this:

static always_inline int ctpop32 (uint32_t val)
{
        uint32_t i;

        i = (val & 0x55555555) + ((val >>  1) & 0x55555555);
        i = (i   & 0x33333333) + ((i   >>  2) & 0x33333333);
        i = (i   & 0x0f0f0f0f) + ((i   >>  4) & 0x0f0f0f0f);
        i = (i   & 0x00ff00ff) + ((i   >>  8) & 0x00ff00ff);
        i = (i   & 0x0000ffff) + ((i   >> 16) & 0x0000ffff);

        return i;
}

For the 64 bit version see target-sparc/op_helper.c

Best regards,
Eddie

Blue Swirl wrote:
On 10/27/07, J. Mayer <address@hidden> wrote:
I also got optimized versions of bit population count which could also
be shared:
static always_inline int ctpop32 (uint32_t val)
{
    int i;

    for (i = 0; val != 0; i++)
        val = val ^ (val - 1);

    return i;
}

If you prefer, I can add those shared functions (ctz32, ctz64, cto32,
cto64, ctpop32, ctpop64) later, as they do not seem as widely used as
clxxx functions.

This would be interesting for Sparc64. Could you compare your version
to do_popc() in target-sparc/op_helper.c?



--
___________________________________________________brainaid_____________
Eddie C. Dost           Rue de la Chapelle 51      phone +32 87 788817
                        B-4850 Moresnet            fax   +32 87 788818
address@hidden         Belgium                    cell  +49 172 9312808




reply via email to

[Prev in Thread] Current Thread [Next in Thread]