https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107671

            Bug ID: 107671
           Summary: i386: Missed optimization: use of bt in bit test
                    pattern when LHS is an array index
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ibuclaw at gdcproject dot org
  Target Milestone: ---

int bt32_setb(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum)
{
    return ((p[bitnum >> 5] & (1  << (bitnum & 31)))) != 0;
}

int bt64_setb(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum)
{
    return ((p[bitnum >> 6] & (1L << (bitnum & 63)))) != 0;
}

int bt32_setb2(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum)
{
    return (p[bitnum >> 5] >> (bitnum & 31)) & 1;
}

int bt64_setb2(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum)
{
    return (p[bitnum >> 6] >> (bitnum & 63)) & 1;
}

int bt32_setae(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum)
{
    return ((p[bitnum >> 5] & (1  << (bitnum & 31)))) == 0;
}

int bt64_setae(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum)
{
    return ((p[bitnum >> 6] & (1L << (bitnum & 63)))) == 0;
}

int bt32_setae2(const __UINT32_TYPE__ *p, __UINT32_TYPE__ bitnum)
{
    return !((p[bitnum >> 5] >> (bitnum & 31)) & 1);
}

int bt64_setae2(const __UINT64_TYPE__ *p, __UINT64_TYPE__ bitnum)
{
    return !((p[bitnum >> 6] >> (bitnum & 63)) & 1);
}

Reply via email to