[cairo] [patch] Accelerate CAIRO_BITSWAP8 on 64 bit machines

Xing, Dongsheng dongsheng.xing at intel.com
Tue May 29 00:51:09 PDT 2012


-----Original Message-----
From: Chris Wilson
Sent: Tuesday, May 29, 2012 3:25 PM
To: Xing, Dongsheng; cairo at cairographics.org
Subject: Re: [cairo] [patch] Accelerate CAIRO_BITSWAP8 on 64 bit machines

> On Tue, 29 May 2012 02:03:58 +0000, "Xing, Dongsheng" wrote:
> > Hi, CAIRO_BITSWAP8 costs seven operations on a 32 bit machine, but it 
> > can be done with only four operations on 64 bit machines.
> > This patch accelerates CAIRO_BITSWAP8 on 64 bit machines.
>
> This doesn't apply to master. Care to resend?

OK.

diff --git a/src/cairoint.h b/src/cairoint.h
index 2c9f2dd..d6201f3 100644
--- a/src/cairoint.h
+++ b/src/cairoint.h
@@ -169,7 +169,11 @@ do {                                       \
  * Devised by Sean Anderson, July 13, 2001.
  * Source: http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits
  */
+#if (SIZEOF_LONG >= 8)
+#define CAIRO_BITSWAP8(c) ((((c) * 0x80200802LLU & 0x884422110LLU) * 0x101010101LLU) >> 32)
+#else
 #define CAIRO_BITSWAP8(c) ((((c) * 0x0802LU & 0x22110LU) | ((c) * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16)
+#endif

I don't know why the patch doesn't apply to "master". 
I guess the reason is my code is not the "master". Because I downloaded the code by 
     git clone git://anongit.freedesktop.org/git/cairo
I am not sure.

>
> > diff --git a/src/cairoint.h b/src/cairoint.h index 2c9f2dd..7e62d86 
> > 100644
> > --- a/src/cairoint.h
> > +++ b/src/cairoint.h
> > @@ -169,7 +169,11 @@ do {                                       \
> >   * Devised by Sean Anderson, July 13, 2001.
> >   * Source:
> > http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits
> >   */
> > +#if (SIZEOF_VOID_P >= 8)
>
> A more appropriate test here would be that "SIZEOF_LONG_LONG >= 8" as that is the condition used in the macro.

I think SIZEOF_LONG >= 8 is better. Because sizeof(long long)==8 on a 32 bit machine. And SIZEOF_LONG is the length of a native processor word.

Best regards,
Dongsheng

>
> > +#define CAIRO_BITSWAP8(c) ((((c) * 0x80200802LLU & 0x884422110LLU) * 0x101010101LLU) >> 32)
> > +#else
> >  #define CAIRO_BITSWAP8(c) ((((c) * 0x0802LU & 0x22110LU) | ((c) * 
> > 0x8020LU &
> > 0x88440LU)) * 0x10101LU >> 16)
> > +#endif
>
> --
> Chris Wilson, Intel Open Source Technology Centre


More information about the cairo mailing list