static uint32_t div4 (uint32_t n, uint32_t d)
{
uint32_t p = 0;
uint32_t q = 0;
int ctr = 31;
next_iter:
p <<= 1;
p |= n >> 31;
n <<= 1;
if (d > p) {
goto zero_bit;
}
p -= d;
q++;
zero_bit:
q <<= 1;
ctr--;
if (ctr != 0) {
goto next_iter;
}
p <<= 1;
p |= n >> 31;
n <<= 1;
if (d > p) {
goto end_zero_bit;
}
q++;
end_zero_bit:
return q;
}
c3RhdGljIHVpbnQzMl90IGRpdjQgKHVpbnQzMl90IG4sIHVpbnQzMl90IGQpCnsKICAgIHVpbnQzMl90IHAgPSAwOwogICAgdWludDMyX3QgcSA9IDA7CiAgICBpbnQgY3RyID0gMzE7CiAgICAKbmV4dF9pdGVyOgogICAgcCA8PD0gMTsKICAgIHAgfD0gbiA+PiAzMTsKICAgIG4gPDw9IDE7CiAgICBpZiAoZCA+IHApIHsKICAgICAgICBnb3RvIHplcm9fYml0OwogICAgfQogICAgcCAtPSBkOwogICAgcSsrOwp6ZXJvX2JpdDoKICAgIHEgPDw9IDE7CiAgICBjdHItLTsKICAgIGlmIChjdHIgIT0gMCkgewogICAgICAgIGdvdG8gbmV4dF9pdGVyOwogICAgfQogICAgCiAgICBwIDw8PSAxOwogICAgcCB8PSBuID4+IDMxOwogICAgbiA8PD0gMTsKICAgIGlmIChkID4gcCkgewogICAgICAgIGdvdG8gZW5kX3plcm9fYml0OwogICAgfQogICAgcSsrOwplbmRfemVyb19iaXQ6CiAgICAKICAgIHJldHVybiBxOwp9Cg==