https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107328
Bug ID: 107328
Summary: bzhi pattern not recognized
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: [email protected]
Target Milestone: ---
This bug looks similar to #93346 and #94860 but the pattern is slightly
different. My understanding is that it is still a valid one (my understanding
is that the shift invokes UB for values of `sz' that would be troublesome for
bzhi)
The pattern:
unsigned bzhi(unsigned y, unsigned sz) {
return y & (~0u >> (CHAR_BIT * sizeof(unsigned) - sz));
}
it should work if `sizeof(unsigned)` is either 4 or 8.
Reproducer on godbolt: https://godbolt.org/z/4PfesvY7Y