This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Add x86 integer intrinsics


H.J. Lu wrote:
On Wed, Jun 10, 2009 at 7:12 AM, Paolo Bonzini<paolo.bonzini@gmail.com> wrote:
       * config/i386/i386.c (ix86_builtins): Add IX86_BUILTIN_BSRSI,
       IX86_BUILTIN_BSRDI.  IX86_BUILTIN_RDPMC, IX86_BUILTIN_RDTSC.
       IX86_BUILTIN_RDTSCP.  IX86_BUILTIN_ROLQI, IX86_BUILTIN_ROLHI,
       IX86_BUILTIN_ROLSI, IX86_BUILTIN_ROLDI, IX86_BUILTIN_RORQI,
       IX86_BUILTIN_RORHI, IX86_BUILTIN_RORSI and IX86_BUILTIN_RORDI.
Do you really need intrinsics for BSR and ROL/ROR, since we have ctz/clz and
rotates are synthesized at fold time (so before inlining)?

Gcc can generate them directly, which is independent with intrinsics.


Also, is BSF missing maybe?

BSF is implemented with ctz builtins directly.

Ah, okay, so BSR is needed. I still don't understand the reason for ROL/ROR intrinsics, since a ROTATE_EXPR will do as well and


static inline rol(int x, int y)
{
  return (x << y) | (x >> (32 - y));
}

will be folded directly to LROTATE_EXPR <x, y>.

This is no different from using (m128)({0,0,0,f}) to implement some vector intrinsics and "guessing" that GCC will generate a MOVD as expected.

Paolo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]