fork download
  1. #define SQRT_ITER_0_0(i) \
  2. " cp %D[x],%B[goo]\n" \
  3. " brcs zero_bit_" #i "_%=\n" \
  4. "one_bit_" #i "_%=:\n" \
  5. " sub %D[x],%B[goo]\n" \
  6. " or %B[goo],__tmp_reg__\n" \
  7. "zero_bit_" #i "_%=:\n" \
  8. " lsr __tmp_reg__\n" \
  9. " eor %B[goo],__tmp_reg__\n" \
  10. " lsl %B[x]\n" \
  11. " rol %C[x]\n" \
  12. " rol %D[x]\n"
  13.  
  14. #define SQRT_ITER_1_5(i) \
  15. " brcs one_bit_" #i "_%=\n" \
  16. " cp %D[x],%B[goo]\n" \
  17. " brcs zero_bit_" #i "_%=\n" \
  18. "one_bit_" #i "_%=:\n" \
  19. " sub %D[x],%B[goo]\n" \
  20. " or %B[goo],__tmp_reg__\n" \
  21. "zero_bit_" #i "_%=:\n" \
  22. " lsr __tmp_reg__\n" \
  23. " eor %B[goo],__tmp_reg__\n" \
  24. " lsl %B[x]\n" \
  25. " rol %C[x]\n" \
  26. " rol %D[x]\n"
  27.  
  28. #define SQRT_ITER_6_6(i) \
  29. " brcs one_bit_" #i "_%=\n" \
  30. " cp %D[x],%B[goo]\n" \
  31. " brcs zero_bit_" #i "_%=\n" \
  32. "one_bit_" #i "_%=:\n" \
  33. " sub %D[x],%B[goo]\n" \
  34. " or %B[goo],__tmp_reg__\n" \
  35. "zero_bit_" #i "_%=:\n" \
  36. " lsr __tmp_reg__\n" \
  37. " ror __tmp_reg__\n" \
  38. " mov %A[goo],__tmp_reg__\n" \
  39. " dec %B[goo]\n" \
  40. " lsl %B[x]\n" \
  41. " rol %C[x]\n" \
  42. " rol %D[x]\n"
  43.  
  44. #define SQRT_ITER_7_7(i) \
  45. " brcs one_bit_" #i "_%=\n" \
  46. " cp %C[x],%A[goo]\n" \
  47. " cpc %D[x],%B[goo]\n" \
  48. " brcs zero_bit_" #i "_%=\n" \
  49. "one_bit_" #i "_%=:\n" \
  50. " sub %C[x],%A[goo]\n" \
  51. " sbc %D[x],%B[goo]\n" \
  52. " or %A[goo],__tmp_reg__\n" \
  53. " inc %B[goo]\n" \
  54. "zero_bit_" #i "_%=:\n" \
  55. " asr __tmp_reg__\n" \
  56. " eor %A[goo],__tmp_reg__\n" \
  57. " lsl %B[x]\n" \
  58. " rol %C[x]\n" \
  59. " rol %D[x]\n"
  60.  
  61. #define SQRT_ITER_8_14(i) \
  62. " brcs one_bit_" #i "_%=\n" \
  63. " cp %C[x],%A[goo]\n" \
  64. " cpc %D[x],%B[goo]\n" \
  65. " brcs zero_bit_" #i "_%=\n" \
  66. "one_bit_" #i "_%=:\n" \
  67. " sub %C[x],%A[goo]\n" \
  68. " sbc %D[x],%B[goo]\n" \
  69. " or %A[goo],__tmp_reg__\n" \
  70. "zero_bit_" #i "_%=:\n" \
  71. " lsr __tmp_reg__\n" \
  72. " eor %A[goo],__tmp_reg__\n" \
  73. " lsl %A[x]\n" \
  74. " rol %C[x]\n" \
  75. " rol %D[x]\n"
  76.  
  77. static uint16_t sqrt32 (uint32_t x)
  78. {
  79. uint16_t goo = UINT16_C(0x40C0);
  80.  
  81. asm(
  82. " mov __tmp_reg__,%A[goo]\n"
  83.  
  84. SQRT_ITER_0_0(0)
  85. SQRT_ITER_1_5(1)
  86. SQRT_ITER_1_5(2)
  87. SQRT_ITER_1_5(3)
  88. SQRT_ITER_1_5(4)
  89. SQRT_ITER_1_5(5)
  90. SQRT_ITER_6_6(6)
  91. SQRT_ITER_7_7(7)
  92. SQRT_ITER_8_14(8)
  93. SQRT_ITER_8_14(9)
  94. SQRT_ITER_8_14(10)
  95. SQRT_ITER_8_14(11)
  96. SQRT_ITER_8_14(12)
  97. SQRT_ITER_8_14(13)
  98. SQRT_ITER_8_14(14)
  99.  
  100. " brcs end_inc%=\n"
  101. " lsl %A[x]\n"
  102. " cpc %A[goo],%C[x]\n"
  103. " cpc %B[goo],%D[x]\n"
  104. "end_inc%=:\n"
  105. " adc %A[goo],__zero_reg__\n"
  106.  
  107. : [goo] "=&r" (goo),
  108. [x] "=&r" (x)
  109. : "[x]" (x),
  110. "[goo]" (goo)
  111. );
  112.  
  113. return goo;
  114. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c:77:1: error: unknown type name ‘uint16_t’
prog.c:77:25: error: unknown type name ‘uint32_t’
stdout
Standard output is empty