uint8_t my_log2 (uint32_t op)
{
uint8_t res;
asm(
" clr r16\n"
" cpse %D[op],__zero_reg__\n"
" rjmp foundD%=\n"
" cpse %C[op],__zero_reg__\n"
" rjmp foundC%=\n"
" cpse %B[op],__zero_reg__\n"
" rjmp foundB%=\n"
" cpse %A[op],__zero_reg__\n"
" rjmp foundA%=\n"
" rjmp end%=\n"
"foundD%=:\n"
" ori r16,0x19\n"
" mov r17,%D[op]\n"
" rjmp examine%=\n"
"foundC%=:\n"
" ori r16,0x11\n"
" mov r17,%C[op]\n"
" rjmp examine%=\n"
"foundB%=:\n"
" ori r16,0x09\n"
" mov r17,%B[op]\n"
" rjmp examine%=\n"
"foundA%=:\n"
" ori r16,0x01\n"
" mov r17,%A[op]\n"
"examine%=:\n"
" lsr r17\n"
" cpse r17,__zero_reg__\n"
" inc r16\n"
" lsr r17\n"
" cpse r17,__zero_reg__\n"
" inc r16\n"
" lsr r17\n"
" cpse r17,__zero_reg__\n"
" inc r16\n"
" lsr r17\n"
" cpse r17,__zero_reg__\n"
" inc r16\n"
" lsr r17\n"
" cpse r17,__zero_reg__\n"
" inc r16\n"
" lsr r17\n"
" cpse r17,__zero_reg__\n"
" inc r16\n"
" lsr r17\n"
" cpse r17,__zero_reg__\n"
" inc r16\n"
"end%=:\n"
" mov %[res],r16\n"
: [res] "=r" (res)
: [op] "r" (op)
: "r16", "r17"
);
return res;
}
dWludDhfdCBteV9sb2cyICh1aW50MzJfdCBvcCkKewogICAgdWludDhfdCByZXM7CiAgICBhc20oCiAgICAgICAgIiAgICBjbHIgcjE2XG4iCiAgICAgICAgIiAgICBjcHNlICVEW29wXSxfX3plcm9fcmVnX19cbiIKICAgICAgICAiICAgIHJqbXAgZm91bmREJT1cbiIKICAgICAgICAiICAgIGNwc2UgJUNbb3BdLF9femVyb19yZWdfX1xuIgogICAgICAgICIgICAgcmptcCBmb3VuZEMlPVxuIgogICAgICAgICIgICAgY3BzZSAlQltvcF0sX196ZXJvX3JlZ19fXG4iCiAgICAgICAgIiAgICByam1wIGZvdW5kQiU9XG4iCiAgICAgICAgIiAgICBjcHNlICVBW29wXSxfX3plcm9fcmVnX19cbiIKICAgICAgICAiICAgIHJqbXAgZm91bmRBJT1cbiIKICAgICAgICAiICAgIHJqbXAgZW5kJT1cbiIKICAgICAgICAiZm91bmREJT06XG4iCiAgICAgICAgIiAgICBvcmkgcjE2LDB4MTlcbiIKICAgICAgICAiICAgIG1vdiByMTcsJURbb3BdXG4iCiAgICAgICAgIiAgICByam1wIGV4YW1pbmUlPVxuIgogICAgICAgICJmb3VuZEMlPTpcbiIKICAgICAgICAiICAgIG9yaSByMTYsMHgxMVxuIgogICAgICAgICIgICAgbW92IHIxNywlQ1tvcF1cbiIKICAgICAgICAiICAgIHJqbXAgZXhhbWluZSU9XG4iCiAgICAgICAgImZvdW5kQiU9OlxuIgogICAgICAgICIgICAgb3JpIHIxNiwweDA5XG4iCiAgICAgICAgIiAgICBtb3YgcjE3LCVCW29wXVxuIgogICAgICAgICIgICAgcmptcCBleGFtaW5lJT1cbiIKICAgICAgICAiZm91bmRBJT06XG4iCiAgICAgICAgIiAgICBvcmkgcjE2LDB4MDFcbiIKICAgICAgICAiICAgIG1vdiByMTcsJUFbb3BdXG4iCiAgICAgICAgImV4YW1pbmUlPTpcbiIKICAgICAgICAiICAgIGxzciByMTdcbiIKICAgICAgICAiICAgIGNwc2UgcjE3LF9femVyb19yZWdfX1xuIgogICAgICAgICIgICAgaW5jIHIxNlxuIgogICAgICAgICIgICAgbHNyIHIxN1xuIgogICAgICAgICIgICAgY3BzZSByMTcsX196ZXJvX3JlZ19fXG4iCiAgICAgICAgIiAgICBpbmMgcjE2XG4iCiAgICAgICAgIiAgICBsc3IgcjE3XG4iCiAgICAgICAgIiAgICBjcHNlIHIxNyxfX3plcm9fcmVnX19cbiIKICAgICAgICAiICAgIGluYyByMTZcbiIKICAgICAgICAiICAgIGxzciByMTdcbiIKICAgICAgICAiICAgIGNwc2UgcjE3LF9femVyb19yZWdfX1xuIgogICAgICAgICIgICAgaW5jIHIxNlxuIgogICAgICAgICIgICAgbHNyIHIxN1xuIgogICAgICAgICIgICAgY3BzZSByMTcsX196ZXJvX3JlZ19fXG4iCiAgICAgICAgIiAgICBpbmMgcjE2XG4iCiAgICAgICAgIiAgICBsc3IgcjE3XG4iCiAgICAgICAgIiAgICBjcHNlIHIxNyxfX3plcm9fcmVnX19cbiIKICAgICAgICAiICAgIGluYyByMTZcbiIKICAgICAgICAiICAgIGxzciByMTdcbiIKICAgICAgICAiICAgIGNwc2UgcjE3LF9femVyb19yZWdfX1xuIgogICAgICAgICIgICAgaW5jIHIxNlxuIgogICAgICAgICJlbmQlPTpcbiIKICAgICAgICAiICAgIG1vdiAlW3Jlc10scjE2XG4iCiAgICAgICAgOiBbcmVzXSAiPXIiIChyZXMpCiAgICAgICAgOiBbb3BdICJyIiAob3ApCiAgICAgICAgOiAicjE2IiwgInIxNyIKICAgICk7CiAgICByZXR1cm4gcmVzOwp9