s > 32 || offset + bits > 32) { return 0; } uint maskMsb = (1u << (bits - 1)); uint mask = ((maskMsb - 1u) | maskMsb) << offset; uint resultUnsigned = (asuint(value) & mask) >> offset; if (bits != 32 && (resultUnsigned & maskMsb) != 0) { uint higherBitsMask = ((1u << (32 - bits)) - 1u) << bits; resultUnsigned |= higherBitsMask; } return asint(resultUnsigned); }