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

--- Comment #1 from Iain Buclaw <ibuclaw at gdcproject dot org> ---
Non-pointer variants also not detected.
---
int bt32v_setb(const __UINT32_TYPE__ v, __UINT32_TYPE__ bitnum)
{
    return ((v & (1  << (bitnum & 31)))) != 0;
}

int bt64v_setb(const __UINT64_TYPE__ v, __UINT64_TYPE__ bitnum)
{
    return ((v & (1L << (bitnum & 63)))) != 0;
}

int bt32v_setb2(const __UINT32_TYPE__ v, __UINT32_TYPE__ bitnum)
{
    return (v >> (bitnum & 31)) & 1;
}

int bt64v_setb2(const __UINT64_TYPE__ v, __UINT64_TYPE__ bitnum)
{
    return (v >> (bitnum & 63)) & 1;
}

int bt32v_setae(const __UINT32_TYPE__ v, __UINT32_TYPE__ bitnum)
{
    return ((v & (1  << (bitnum & 31)))) == 0;
}

int bt64v_setae(const __UINT64_TYPE__ v, __UINT64_TYPE__ bitnum)
{
    return ((v & (1L << (bitnum & 63)))) == 0;
}

int bt32v_setae2(const __UINT32_TYPE__ v, __UINT32_TYPE__ bitnum)
{
    return !((v >> (bitnum & 31)) & 1);
}

int bt64v_setae2(const __UINT64_TYPE__ v, __UINT64_TYPE__ bitnum)
{
    return !((v >> (bitnum & 63)) & 1);
}

Reply via email to