#include <stdint.h>
#include <stdio.h>
uint8_t my_log2 (uint32_t v)
{
uint8_t *bytes = (void *)&v;
uint8_t i = 24;
while (1) {
uint8_t byte = bytes[i / 8];
if (byte) {
do {
i++;
byte >>= 1;
} while (byte);
return i;
}
if (i == 0) {
return 0;
}
i -= 8;
}
}
int main ()
{
uint32_t x = UINT32_C(0x1FFF0FFF);
}
#if 0
my_log2:
push r28
push r29
rcall .
rcall .
in r28,__SP_L__
in r29,__SP_H__
/* prologue: function */
/* frame size = 4 */
/* stack size = 6 */
.L__stack_usage = 6
std Y+1,r22
std Y+2,r23
std Y+3,r24
std Y+4,r25
ldd r25,Y+4
cpse r25,__zero_reg__
rjmp .L6
ldd r25,Y+3
cpse r25,__zero_reg__
rjmp .L7
ldd r25,Y+2
cpse r25,__zero_reg__
rjmp .L8
ldd r25,Y+1
ldi r24,0
cpse r25,__zero_reg__
rjmp .L5
.L4:
/* epilogue start */
pop __tmp_reg__
pop __tmp_reg__
pop __tmp_reg__
pop __tmp_reg__
pop r29
pop r28
ret
.L8:
ldi r24,lo8(8)
.L5:
subi r24,lo8(-(1))
lsr r25
breq .L4
subi r24,lo8(-(1))
lsr r25
brne .L5
rjmp .L4
.L6:
ldi r24,lo8(24)
rjmp .L5
.L7:
ldi r24,lo8(16)
rjmp .L5
.size my_log2, .-my_log2
.section .rodata.str1.1,"aMS",@progbits,1
#endif
I2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnVpbnQ4X3QgbXlfbG9nMiAodWludDMyX3QgdikKewogICAgdWludDhfdCAqYnl0ZXMgPSAodm9pZCAqKSZ2OwogICAgCiAgICB1aW50OF90IGkgPSAyNDsKICAgIHdoaWxlICgxKSB7CiAgICAgICAgdWludDhfdCBieXRlID0gYnl0ZXNbaSAvIDhdOwogICAgICAgIGlmIChieXRlKSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgIGJ5dGUgPj49IDE7CiAgICAgICAgICAgIH0gd2hpbGUgKGJ5dGUpOwogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9CiAgICAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgaSAtPSA4OwogICAgfQp9CgppbnQgbWFpbiAoKQp7CiAgICB1aW50MzJfdCB4ID0gVUlOVDMyX0MoMHgxRkZGMEZGRik7CiAgICBwcmludGYoIiVkXG4iLCBteV9sb2cyKHgpKTsKfQoKI2lmIDAKbXlfbG9nMjoKICAgICAgICBwdXNoIHIyOAogICAgICAgIHB1c2ggcjI5CiAgICAgICAgcmNhbGwgLgogICAgICAgIHJjYWxsIC4KICAgICAgICBpbiByMjgsX19TUF9MX18KICAgICAgICBpbiByMjksX19TUF9IX18KLyogcHJvbG9ndWU6IGZ1bmN0aW9uICovCi8qIGZyYW1lIHNpemUgPSA0ICovCi8qIHN0YWNrIHNpemUgPSA2ICovCi5MX19zdGFja191c2FnZSA9IDYKICAgICAgICBzdGQgWSsxLHIyMgogICAgICAgIHN0ZCBZKzIscjIzCiAgICAgICAgc3RkIFkrMyxyMjQKICAgICAgICBzdGQgWSs0LHIyNQogICAgICAgIGxkZCByMjUsWSs0CiAgICAgICAgY3BzZSByMjUsX196ZXJvX3JlZ19fCiAgICAgICAgcmptcCAuTDYKICAgICAgICBsZGQgcjI1LFkrMwogICAgICAgIGNwc2UgcjI1LF9femVyb19yZWdfXwogICAgICAgIHJqbXAgLkw3CiAgICAgICAgbGRkIHIyNSxZKzIKICAgICAgICBjcHNlIHIyNSxfX3plcm9fcmVnX18KICAgICAgICByam1wIC5MOAogICAgICAgIGxkZCByMjUsWSsxCiAgICAgICAgbGRpIHIyNCwwCiAgICAgICAgY3BzZSByMjUsX196ZXJvX3JlZ19fCiAgICAgICAgcmptcCAuTDUKLkw0OgovKiBlcGlsb2d1ZSBzdGFydCAqLwogICAgICAgIHBvcCBfX3RtcF9yZWdfXwogICAgICAgIHBvcCBfX3RtcF9yZWdfXwogICAgICAgIHBvcCBfX3RtcF9yZWdfXwogICAgICAgIHBvcCBfX3RtcF9yZWdfXwogICAgICAgIHBvcCByMjkKICAgICAgICBwb3AgcjI4CiAgICAgICAgcmV0Ci5MODoKICAgICAgICBsZGkgcjI0LGxvOCg4KQouTDU6CiAgICAgICAgc3ViaSByMjQsbG84KC0oMSkpCiAgICAgICAgbHNyIHIyNQogICAgICAgIGJyZXEgLkw0CiAgICAgICAgc3ViaSByMjQsbG84KC0oMSkpCiAgICAgICAgbHNyIHIyNQogICAgICAgIGJybmUgLkw1CiAgICAgICAgcmptcCAuTDQKLkw2OgogICAgICAgIGxkaSByMjQsbG84KDI0KQogICAgICAgIHJqbXAgLkw1Ci5MNzoKICAgICAgICBsZGkgcjI0LGxvOCgxNikKICAgICAgICByam1wIC5MNQogICAgICAgIC5zaXplICAgbXlfbG9nMiwgLi1teV9sb2cyCiAgICAgICAgLnNlY3Rpb24gICAgICAgIC5yb2RhdGEuc3RyMS4xLCJhTVMiLEBwcm9nYml0cywxCiNlbmRpZg==