static uint32_t call (uint32_t n, uint32_t d)
{
uint32_t p = 0;
uint32_t q = 0;
uint8_t ctr = 31;
asm(
"next_iter%=:\n"
" lsl %A[n]\n"
" rol %B[n]\n"
" rol %C[n]\n"
" rol %D[n]\n"
" rol %A[p]\n"
" rol %B[p]\n"
" rol %C[p]\n"
" rol %D[p]\n"
" cp %A[p],%A[d]\n"
" cpc %B[p],%B[d]\n"
" cpc %C[p],%C[d]\n"
" cpc %D[p],%D[d]\n"
" brcs zero_bit%=\n"
" sub %A[p],%A[d]\n"
" sbc %B[p],%B[d]\n"
" sbc %C[p],%C[d]\n"
" sbc %D[p],%D[d]\n"
" inc %A[q]\n"
"zero_bit%=:\n"
" lsl %A[q]\n"
" rol %B[q]\n"
" rol %C[q]\n"
" rol %D[q]\n"
" dec %[ctr]\n"
" brcc next_iter%=\n"
" lsl %A[n]\n"
" rol %B[n]\n"
" rol %C[n]\n"
" rol %D[n]\n"
" rol %A[p]\n"
" rol %B[p]\n"
" rol %C[p]\n"
" rol %D[p]\n"
" cp %A[p],%A[d]\n"
" cpc %B[p],%B[d]\n"
" cpc %C[p],%C[d]\n"
" cpc %D[p],%D[d]\n"
" brcs end_zero_bit%=\n"
" inc %A[q]\n"
"end_zero_bit%=:\n"
: [p] "=&r" (p),
[q] "=&r" (q),
[n] "=&r" (n),
[ctr] "=&r" (ctr)
: "[p]" (p),
"[q]" (q),
"[n]" (n),
"[ctr]" (ctr),
[d] "r" (d)
);
return q;
}
c3RhdGljIHVpbnQzMl90IGNhbGwgKHVpbnQzMl90IG4sIHVpbnQzMl90IGQpCnsKICAgIHVpbnQzMl90IHAgPSAwOwogICAgdWludDMyX3QgcSA9IDA7CiAgICB1aW50OF90IGN0ciA9IDMxOwogICAgCiAgICBhc20oCiAgICAgICAgIm5leHRfaXRlciU9OlxuIgogICAgICAgICIgICAgbHNsICVBW25dXG4iCiAgICAgICAgIiAgICByb2wgJUJbbl1cbiIKICAgICAgICAiICAgIHJvbCAlQ1tuXVxuIgogICAgICAgICIgICAgcm9sICVEW25dXG4iCiAgICAgICAgIiAgICByb2wgJUFbcF1cbiIKICAgICAgICAiICAgIHJvbCAlQltwXVxuIgogICAgICAgICIgICAgcm9sICVDW3BdXG4iCiAgICAgICAgIiAgICByb2wgJURbcF1cbiIKICAgICAgICAiICAgIGNwICVBW3BdLCVBW2RdXG4iCiAgICAgICAgIiAgICBjcGMgJUJbcF0sJUJbZF1cbiIKICAgICAgICAiICAgIGNwYyAlQ1twXSwlQ1tkXVxuIgogICAgICAgICIgICAgY3BjICVEW3BdLCVEW2RdXG4iCiAgICAgICAgIiAgICBicmNzIHplcm9fYml0JT1cbiIKICAgICAgICAiICAgIHN1YiAlQVtwXSwlQVtkXVxuIgogICAgICAgICIgICAgc2JjICVCW3BdLCVCW2RdXG4iCiAgICAgICAgIiAgICBzYmMgJUNbcF0sJUNbZF1cbiIKICAgICAgICAiICAgIHNiYyAlRFtwXSwlRFtkXVxuIgogICAgICAgICIgICAgaW5jICVBW3FdXG4iCiAgICAgICAgInplcm9fYml0JT06XG4iCiAgICAgICAgIiAgICBsc2wgJUFbcV1cbiIKICAgICAgICAiICAgIHJvbCAlQltxXVxuIgogICAgICAgICIgICAgcm9sICVDW3FdXG4iCiAgICAgICAgIiAgICByb2wgJURbcV1cbiIKICAgICAgICAiICAgIGRlYyAlW2N0cl1cbiIKICAgICAgICAiICAgIGJyY2MgbmV4dF9pdGVyJT1cbiIKICAgICAgICAKICAgICAgICAiICAgIGxzbCAlQVtuXVxuIgogICAgICAgICIgICAgcm9sICVCW25dXG4iCiAgICAgICAgIiAgICByb2wgJUNbbl1cbiIKICAgICAgICAiICAgIHJvbCAlRFtuXVxuIgogICAgICAgICIgICAgcm9sICVBW3BdXG4iCiAgICAgICAgIiAgICByb2wgJUJbcF1cbiIKICAgICAgICAiICAgIHJvbCAlQ1twXVxuIgogICAgICAgICIgICAgcm9sICVEW3BdXG4iCiAgICAgICAgIiAgICBjcCAlQVtwXSwlQVtkXVxuIgogICAgICAgICIgICAgY3BjICVCW3BdLCVCW2RdXG4iCiAgICAgICAgIiAgICBjcGMgJUNbcF0sJUNbZF1cbiIKICAgICAgICAiICAgIGNwYyAlRFtwXSwlRFtkXVxuIgogICAgICAgICIgICAgYnJjcyBlbmRfemVyb19iaXQlPVxuIgogICAgICAgICIgICAgaW5jICVBW3FdXG4iCiAgICAgICAgImVuZF96ZXJvX2JpdCU9OlxuIgogICAgICAgIAogICAgICAgIDogW3BdICI9JnIiIChwKSwKICAgICAgICAgIFtxXSAiPSZyIiAocSksCiAgICAgICAgICBbbl0gIj0mciIgKG4pLAogICAgICAgICAgW2N0cl0gIj0mciIgKGN0cikKICAgICAgICA6ICJbcF0iIChwKSwKICAgICAgICAgICJbcV0iIChxKSwKICAgICAgICAgICJbbl0iIChuKSwKICAgICAgICAgICJbY3RyXSIgKGN0ciksCiAgICAgICAgICBbZF0gInIiIChkKQogICAgKTsKICAgIAogICAgcmV0dXJuIHE7Cn0=