fork download
  1. static uint32_t call (uint32_t n, uint32_t d)
  2. {
  3. uint32_t p = 0;
  4. uint32_t q = 0;
  5. uint8_t ctr = 31;
  6.  
  7. asm(
  8. "next_iter%=:\n"
  9. " lsl %A[n]\n"
  10. " rol %B[n]\n"
  11. " rol %C[n]\n"
  12. " rol %D[n]\n"
  13. " rol %A[p]\n"
  14. " rol %B[p]\n"
  15. " rol %C[p]\n"
  16. " rol %D[p]\n"
  17. " cp %A[p],%A[d]\n"
  18. " cpc %B[p],%B[d]\n"
  19. " cpc %C[p],%C[d]\n"
  20. " cpc %D[p],%D[d]\n"
  21. " brcs zero_bit%=\n"
  22. " sub %A[p],%A[d]\n"
  23. " sbc %B[p],%B[d]\n"
  24. " sbc %C[p],%C[d]\n"
  25. " sbc %D[p],%D[d]\n"
  26. " inc %A[q]\n"
  27. "zero_bit%=:\n"
  28. " lsl %A[q]\n"
  29. " rol %B[q]\n"
  30. " rol %C[q]\n"
  31. " rol %D[q]\n"
  32. " dec %[ctr]\n"
  33. " brcc next_iter%=\n"
  34.  
  35. " lsl %A[n]\n"
  36. " rol %B[n]\n"
  37. " rol %C[n]\n"
  38. " rol %D[n]\n"
  39. " rol %A[p]\n"
  40. " rol %B[p]\n"
  41. " rol %C[p]\n"
  42. " rol %D[p]\n"
  43. " cp %A[p],%A[d]\n"
  44. " cpc %B[p],%B[d]\n"
  45. " cpc %C[p],%C[d]\n"
  46. " cpc %D[p],%D[d]\n"
  47. " brcs end_zero_bit%=\n"
  48. " inc %A[q]\n"
  49. "end_zero_bit%=:\n"
  50.  
  51. : [p] "=&r" (p),
  52. [q] "=&r" (q),
  53. [n] "=&r" (n),
  54. [ctr] "=&r" (ctr)
  55. : "[p]" (p),
  56. "[q]" (q),
  57. "[n]" (n),
  58. "[ctr]" (ctr),
  59. [d] "r" (d)
  60. );
  61.  
  62. return q;
  63. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty