zkevm-rom 0.0.1-security → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of zkevm-rom might be problematic. Click here for more details.

Files changed (232) hide show
  1. package/.eslintrc.js +33 -0
  2. package/.github/CODEOWNERS +14 -0
  3. package/.github/ISSUE_TEMPLATE/bug.yml +38 -0
  4. package/.github/ISSUE_TEMPLATE/feature.yml +26 -0
  5. package/.github/ISSUE_TEMPLATE/question.yml +26 -0
  6. package/.github/workflows/main.yaml +40 -0
  7. package/LICENSE +636 -0
  8. package/README.md +23 -5
  9. package/audits/Hexens_Polygon_zkEVM_PUBLIC_27.02.23.pdf +0 -0
  10. package/audits/Polygon-zkEVM-Public-v1.1-verichains-19-03-2024.pdf +0 -0
  11. package/audits/zkEVM-ROM-upgrade-1-Spearbit-30-May.pdf +0 -0
  12. package/audits/zkEVM-ROM-upgrade-2-Spearbit-21-August.pdf +0 -0
  13. package/audits/zkEVM-engagement-1-Spearbit-27-March.pdf +0 -0
  14. package/audits/zkEVM-engagement-2-Spearbit-27-March.pdf +0 -0
  15. package/audits/zkEVM-engagement-3-Spearbit-6-April.pdf +0 -0
  16. package/counters/README.md +45 -0
  17. package/counters/counters-executor.js +80 -0
  18. package/counters/countersConstants.zkasm +370 -0
  19. package/counters/endIncludes.zkasm +18 -0
  20. package/counters/initIncludes.zkasm +2 -0
  21. package/counters/tests/MLOAD32.zkasm +27 -0
  22. package/counters/tests/MLOADX.zkasm +30 -0
  23. package/counters/tests/MSTORE32.zkasm +32 -0
  24. package/counters/tests/MSTOREX.zkasm +36 -0
  25. package/counters/tests/SHLarith.zkasm +28 -0
  26. package/counters/tests/SHLarithBit.zkasm +28 -0
  27. package/counters/tests/SHRarith.zkasm +28 -0
  28. package/counters/tests/SHRarithBit.zkasm +28 -0
  29. package/counters/tests/abs.zkasm +29 -0
  30. package/counters/tests/addBatchHashByteByByte.zkasm +31 -0
  31. package/counters/tests/computeGasSendCall.zkasm +30 -0
  32. package/counters/tests/divArith.zkasm +27 -0
  33. package/counters/tests/expAD.zkasm +30 -0
  34. package/counters/tests/getLenBits.zkasm +30 -0
  35. package/counters/tests/getLenBytes.zkasm +32 -0
  36. package/counters/tests/isEmptyAccount.zkasm +30 -0
  37. package/counters/tests/mulARITH.zkasm +28 -0
  38. package/counters/tests/offsetUtil.zkasm +29 -0
  39. package/counters/tests/opADDMOD.zkasm +28 -0
  40. package/counters/tests/opAdd.zkasm +27 -0
  41. package/counters/tests/opBLOCKHASH.zkasm +28 -0
  42. package/counters/tests/opCALL.zkasm +41 -0
  43. package/counters/tests/opCALLCODE.zkasm +41 -0
  44. package/counters/tests/opCALLDATACOPY.zkasm +28 -0
  45. package/counters/tests/opCALLDATALOAD.zkasm +27 -0
  46. package/counters/tests/opCODECOPY.zkasm +28 -0
  47. package/counters/tests/opCREATE.zkasm +35 -0
  48. package/counters/tests/opCREATE2.zkasm +35 -0
  49. package/counters/tests/opDELEGATECALL.zkasm +35 -0
  50. package/counters/tests/opDIV.zkasm +27 -0
  51. package/counters/tests/opEXP.zkasm +29 -0
  52. package/counters/tests/opEXTCODECOPY.zkasm +29 -0
  53. package/counters/tests/opMOD.zkasm +27 -0
  54. package/counters/tests/opMUL.zkasm +27 -0
  55. package/counters/tests/opMULMOD.zkasm +28 -0
  56. package/counters/tests/opRETURN.zkasm +32 -0
  57. package/counters/tests/opRETURNDATACOPY.zkasm +29 -0
  58. package/counters/tests/opREVERT.zkasm +32 -0
  59. package/counters/tests/opSDIV.zkasm +28 -0
  60. package/counters/tests/opSHA3.zkasm +28 -0
  61. package/counters/tests/opSIGNEXTEND.zkasm +27 -0
  62. package/counters/tests/opSMOD.zkasm +28 -0
  63. package/counters/tests/opSTATICCALL.zkasm +35 -0
  64. package/counters/tests/opSUB.zkasm +27 -0
  65. package/counters/tests/saveMem.zkasm +31 -0
  66. package/docs/opcode-cost-zk-counters.md +315 -0
  67. package/docs/usage-ecrecover.md +51 -0
  68. package/index.js +43 -0
  69. package/main/block-info.zkasm +204 -0
  70. package/main/constants.zkasm +145 -0
  71. package/main/ecrecover/addFpEc.zkasm +31 -0
  72. package/main/ecrecover/checkSqrtFpEc.zkasm +1558 -0
  73. package/main/ecrecover/constEc.zkasm +13 -0
  74. package/main/ecrecover/ecrecover.zkasm +280 -0
  75. package/main/ecrecover/invFnEc.zkasm +44 -0
  76. package/main/ecrecover/invFpEc.zkasm +45 -0
  77. package/main/ecrecover/mulFnEc.zkasm +36 -0
  78. package/main/ecrecover/mulFpEc.zkasm +36 -0
  79. package/main/ecrecover/mulPointEc.zkasm +311 -0
  80. package/main/ecrecover/sqFpEc.zkasm +38 -0
  81. package/main/ecrecover/sqrtFpEc.zkasm +70 -0
  82. package/main/end.zkasm +4 -0
  83. package/main/l2-tx-hash.zkasm +159 -0
  84. package/main/load-change-l2-block-utils.zkasm +11 -0
  85. package/main/load-change-l2-block.zkasm +28 -0
  86. package/main/load-tx-rlp-utils.zkasm +72 -0
  87. package/main/load-tx-rlp.zkasm +431 -0
  88. package/main/main.zkasm +237 -0
  89. package/main/map-opcodes.zkasm +274 -0
  90. package/main/modexp/array_lib/array_add_AGTB.zkasm +123 -0
  91. package/main/modexp/array_lib/array_add_short.zkasm +85 -0
  92. package/main/modexp/array_lib/array_div.zkasm +215 -0
  93. package/main/modexp/array_lib/array_div_long.zkasm +284 -0
  94. package/main/modexp/array_lib/array_div_short.zkasm +222 -0
  95. package/main/modexp/array_lib/array_mul.zkasm +97 -0
  96. package/main/modexp/array_lib/array_mul_long.zkasm +156 -0
  97. package/main/modexp/array_lib/array_mul_short.zkasm +127 -0
  98. package/main/modexp/array_lib/array_square.zkasm +246 -0
  99. package/main/modexp/array_lib/unused/array_add.zkasm +100 -0
  100. package/main/modexp/array_lib/unused/array_is_odd.zkasm +23 -0
  101. package/main/modexp/array_lib/unused/array_is_one.zkasm +33 -0
  102. package/main/modexp/array_lib/unused/array_is_zero.zkasm +34 -0
  103. package/main/modexp/array_lib/unused/array_sub_AGTB.zkasm +111 -0
  104. package/main/modexp/array_lib/unused/array_unshift.zkasm +37 -0
  105. package/main/modexp/array_lib/utils/array_compare.zkasm +82 -0
  106. package/main/modexp/array_lib/utils/array_trim.zkasm +49 -0
  107. package/main/modexp/constants.zkasm +5 -0
  108. package/main/modexp/modexp.zkasm +296 -0
  109. package/main/modexp/modexp_utils.zkasm +230 -0
  110. package/main/opcodes/arithmetic.zkasm +357 -0
  111. package/main/opcodes/block.zkasm +163 -0
  112. package/main/opcodes/calldata-returndata-code.zkasm +619 -0
  113. package/main/opcodes/comparison.zkasm +446 -0
  114. package/main/opcodes/context-information.zkasm +169 -0
  115. package/main/opcodes/create-terminate-context.zkasm +1011 -0
  116. package/main/opcodes/crypto.zkasm +96 -0
  117. package/main/opcodes/flow-control.zkasm +126 -0
  118. package/main/opcodes/logs.zkasm +193 -0
  119. package/main/opcodes/stack-operations.zkasm +658 -0
  120. package/main/opcodes/storage-memory.zkasm +313 -0
  121. package/main/pairings/BN254/addPointBN254.zkasm +245 -0
  122. package/main/pairings/BN254/ecAdd.zkasm +312 -0
  123. package/main/pairings/BN254/ecMul.zkasm +159 -0
  124. package/main/pairings/BN254/escalarMulBN254.zkasm +155 -0
  125. package/main/pairings/BN254/lineDiffPointsBN254.zkasm +83 -0
  126. package/main/pairings/BN254/lineSamePointsBN254.zkasm +96 -0
  127. package/main/pairings/FP12BN254/CYCLOFP12BN254/compressFp12BN254.zkasm +49 -0
  128. package/main/pairings/FP12BN254/CYCLOFP12BN254/decompressFp12BN254.zkasm +236 -0
  129. package/main/pairings/FP12BN254/CYCLOFP12BN254/expByXCompCycloFp12BN254.zkasm +444 -0
  130. package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCompCycloFp12BN254.zkasm +212 -0
  131. package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCycloFp12BN254.zkasm +228 -0
  132. package/main/pairings/FP12BN254/CYCLOFP12BN254/xBinDecompBN254.zkasm +64 -0
  133. package/main/pairings/FP12BN254/frob2Fp12BN254.zkasm +80 -0
  134. package/main/pairings/FP12BN254/frob3Fp12BN254.zkasm +96 -0
  135. package/main/pairings/FP12BN254/frobFp12BN254.zkasm +96 -0
  136. package/main/pairings/FP12BN254/inverseFp12BN254.zkasm +289 -0
  137. package/main/pairings/FP12BN254/mulFp12BN254.zkasm +408 -0
  138. package/main/pairings/FP12BN254/sparseMulAFp12BN254.zkasm +296 -0
  139. package/main/pairings/FP12BN254/sparseMulBFp12BN254.zkasm +291 -0
  140. package/main/pairings/FP12BN254/squareFp12BN254.zkasm +376 -0
  141. package/main/pairings/FP2BN254/addFp2BN254.zkasm +19 -0
  142. package/main/pairings/FP2BN254/escalarMulFp2BN254.zkasm +20 -0
  143. package/main/pairings/FP2BN254/invFp2BN254.zkasm +66 -0
  144. package/main/pairings/FP2BN254/mulFp2BN254.zkasm +19 -0
  145. package/main/pairings/FP2BN254/squareFp2BN254.zkasm +21 -0
  146. package/main/pairings/FP2BN254/subFp2BN254.zkasm +19 -0
  147. package/main/pairings/FP4BN254/squareFp4BN254.zkasm +76 -0
  148. package/main/pairings/FP6BN254/addFp6BN254.zkasm +59 -0
  149. package/main/pairings/FP6BN254/escalarMulFp6BN254.zkasm +51 -0
  150. package/main/pairings/FP6BN254/inverseFp6BN254.zkasm +208 -0
  151. package/main/pairings/FP6BN254/mulFp6BN254.zkasm +201 -0
  152. package/main/pairings/FP6BN254/sparseMulAFp6BN254.zkasm +65 -0
  153. package/main/pairings/FP6BN254/sparseMulBFp6BN254.zkasm +134 -0
  154. package/main/pairings/FP6BN254/sparseMulCFp6BN254.zkasm +128 -0
  155. package/main/pairings/FP6BN254/squareFp6BN254.zkasm +147 -0
  156. package/main/pairings/FP6BN254/subFp6BN254.zkasm +59 -0
  157. package/main/pairings/FPBN254/addFpBN254.zkasm +29 -0
  158. package/main/pairings/FPBN254/invFpBN254.zkasm +55 -0
  159. package/main/pairings/FPBN254/mulFpBN254.zkasm +29 -0
  160. package/main/pairings/FPBN254/reduceFpBN254.zkasm +25 -0
  161. package/main/pairings/FPBN254/squareFpBN254.zkasm +31 -0
  162. package/main/pairings/FPBN254/subFpBN254.zkasm +36 -0
  163. package/main/pairings/FRBN254/reduceFrBN254.zkasm +25 -0
  164. package/main/pairings/constants.zkasm +62 -0
  165. package/main/pairings/ecPairing.zkasm +244 -0
  166. package/main/pairings/finalExpBN254.zkasm +2095 -0
  167. package/main/pairings/halfPairingBN254.zkasm +428 -0
  168. package/main/pairings/loopLengthBN254.zkasm +75 -0
  169. package/main/pairings/millerLoopBN254.zkasm +741 -0
  170. package/main/pairings/pairingBN254.zkasm +481 -0
  171. package/main/pairings/unused/addFp12BN254.zkasm +130 -0
  172. package/main/pairings/unused/expByXCycloFp12BN254.zkasm +411 -0
  173. package/main/pairings/unused/expFp12BN254.zkasm +333 -0
  174. package/main/pairings/unused/subFp12BN254.zkasm +130 -0
  175. package/main/pairings/unused/xPseudoBinDecompBN254.zkasm +68 -0
  176. package/main/pairings/utilsTests/expCycloFp12BN254.zkasm +334 -0
  177. package/main/precompiled/end.zkasm +42 -0
  178. package/main/precompiled/identity.zkasm +99 -0
  179. package/main/precompiled/pre-ecAdd.zkasm +84 -0
  180. package/main/precompiled/pre-ecMul.zkasm +82 -0
  181. package/main/precompiled/pre-ecPairing.zkasm +72 -0
  182. package/main/precompiled/pre-ecrecover.zkasm +71 -0
  183. package/main/precompiled/pre-modexp.zkasm +367 -0
  184. package/main/precompiled/pre-sha2-256.zkasm +125 -0
  185. package/main/precompiled/revert-precompiled.zkasm +25 -0
  186. package/main/precompiled/selector.zkasm +77 -0
  187. package/main/process-change-l2-block.zkasm +147 -0
  188. package/main/process-tx.zkasm +587 -0
  189. package/main/tables/2-exp.zkasm +260 -0
  190. package/main/touched.zkasm +118 -0
  191. package/main/utils.zkasm +2335 -0
  192. package/main/vars.zkasm +117 -0
  193. package/package.json +62 -3
  194. package/test/bytes-length.zkasm +39 -0
  195. package/test/ecrecover.zkasm +538 -0
  196. package/test/lt4-test.zkasm +38 -0
  197. package/test/mstorex.zkasm +191 -0
  198. package/test/opcalldatacopy.ignore.zkasm +331 -0
  199. package/test/performance/read-push.zkasm +71 -0
  200. package/test/read-push.zkasm +304 -0
  201. package/test/testArrayArith.zkasm +1099 -0
  202. package/test/testArrayUtils.zkasm +335 -0
  203. package/test/testCycloFp12ArithBN254.zkasm +548 -0
  204. package/test/testEcAdd.zkasm +252 -0
  205. package/test/testEcMul.zkasm +231 -0
  206. package/test/testEcPairing.zkasm +436 -0
  207. package/test/testFinalExpBn254.zkasm +139 -0
  208. package/test/testFp12ArithBN254.zkasm +692 -0
  209. package/test/testFp2ArithBN254.zkasm +185 -0
  210. package/test/testFp4ArithBN254.zkasm +128 -0
  211. package/test/testFp6ArithBN254.zkasm +260 -0
  212. package/test/testFpArithBN254.zkasm +159 -0
  213. package/test/testFrArithBN254.zkasm +113 -0
  214. package/test/testHalfPairingBN254.zkasm +285 -0
  215. package/test/testModExp.zkasm +586 -0
  216. package/test/testModExpReturn.zkasm +81 -0
  217. package/test/testPairingBN254.zkasm +463 -0
  218. package/test/testPointArithBN254.zkasm +270 -0
  219. package/test/testSHA256.zkasm +27 -0
  220. package/test/touched-assert.zkasm +59 -0
  221. package/test/utils-expAD.zkasm +48 -0
  222. package/test/utils-getLenBytes.zkasm +36 -0
  223. package/tools/audit-tools/registry-op-checker.js +71 -0
  224. package/tools/get-not-used-labels.js +31 -0
  225. package/tools/helpers/helpers.js +47 -0
  226. package/tools/modexp-utils/README.md +5 -0
  227. package/tools/modexp-utils/modexp-test-gen.js +168 -0
  228. package/tools/modexp-utils/modexp-test-int.sage +37 -0
  229. package/tools/parallel-testing/checker.sh +6 -0
  230. package/tools/parallel-testing/gen-parallel-tests.js +78 -0
  231. package/tools/parallel-testing/parallel-tests-sample/sample.test.js +136 -0
  232. package/tools/run-tests-zkasm.js +83 -0
@@ -0,0 +1,1558 @@
1
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ ;;
3
+ ;; checkSqrtFpEc (C = pow(C,(FpEc-1)/2))
4
+ ;;
5
+ ;; (FpEc-1)/2 = 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffff 7ffffe17
6
+ ;; (*) 222 x 1, 1 x 0, 22 x 1, 4 x 0, 1 x 1, 1 x 0, 3 x 1
7
+ ;; (*) 222 x SM, S, 22 x SM, 4 x S, 1 x SM, 1 x S, 3 x SM (S=square M=multiplication)
8
+ ;; BLOCK: 1 2 3 4 5 6 7
9
+ ;; (*) 222 + initial initialization
10
+ ;;
11
+ ;; PRE: C no alias-free
12
+ ;; POST: A in [0,1]
13
+ ;; return A: A = 1 ==> C = -1 ==> hasn't root
14
+ ;; A = 0 ==> C != -1 ==> has root or MAP, proof fails.
15
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16
+
17
+ VAR GLOBAL checkSqrtFpEc_base
18
+ VAR GLOBAL checkSqrtFpEc_RR
19
+
20
+ checkSqrtFpEc:
21
+ ; RESOURCES:
22
+ ; 248 x (3 steps + 2 arith + 8 steps + 2 arith + 7 steps) = 992 ariths + 4464 steps
23
+ ; 6 x (1 step + 2 arith + 8 steps) = 12 ariths + 54 steps
24
+ ; 6 steps + 1 binary
25
+ ; TOTAL = 1004 ariths + 1 binary + 4524 steps
26
+
27
+ RR :MSTORE(checkSqrtFpEc_RR)
28
+ C :MSTORE(checkSqrtFpEc_base)
29
+
30
+ ; === BLOCK1: 1/222 SM ===
31
+
32
+ :CALL(sqFpEc)
33
+ $ => A :MLOAD(checkSqrtFpEc_base)
34
+ C => B :CALL(mulFpEc)
35
+
36
+ ; === BLOCK1: 2/222 SM ===
37
+
38
+ :CALL(sqFpEc)
39
+ $ => A :MLOAD(checkSqrtFpEc_base)
40
+ C => B :CALL(mulFpEc)
41
+
42
+ ; === BLOCK1: 3/222 SM ===
43
+
44
+ :CALL(sqFpEc)
45
+ $ => A :MLOAD(checkSqrtFpEc_base)
46
+ C => B :CALL(mulFpEc)
47
+
48
+ ; === BLOCK1: 4/222 SM ===
49
+
50
+ :CALL(sqFpEc)
51
+ $ => A :MLOAD(checkSqrtFpEc_base)
52
+ C => B :CALL(mulFpEc)
53
+
54
+ ; === BLOCK1: 5/222 SM ===
55
+
56
+ :CALL(sqFpEc)
57
+ $ => A :MLOAD(checkSqrtFpEc_base)
58
+ C => B :CALL(mulFpEc)
59
+
60
+ ; === BLOCK1: 6/222 SM ===
61
+
62
+ :CALL(sqFpEc)
63
+ $ => A :MLOAD(checkSqrtFpEc_base)
64
+ C => B :CALL(mulFpEc)
65
+
66
+ ; === BLOCK1: 7/222 SM ===
67
+
68
+ :CALL(sqFpEc)
69
+ $ => A :MLOAD(checkSqrtFpEc_base)
70
+ C => B :CALL(mulFpEc)
71
+
72
+ ; === BLOCK1: 8/222 SM ===
73
+
74
+ :CALL(sqFpEc)
75
+ $ => A :MLOAD(checkSqrtFpEc_base)
76
+ C => B :CALL(mulFpEc)
77
+
78
+ ; === BLOCK1: 9/222 SM ===
79
+
80
+ :CALL(sqFpEc)
81
+ $ => A :MLOAD(checkSqrtFpEc_base)
82
+ C => B :CALL(mulFpEc)
83
+
84
+ ; === BLOCK1: 10/222 SM ===
85
+
86
+ :CALL(sqFpEc)
87
+ $ => A :MLOAD(checkSqrtFpEc_base)
88
+ C => B :CALL(mulFpEc)
89
+
90
+ ; === BLOCK1: 11/222 SM ===
91
+
92
+ :CALL(sqFpEc)
93
+ $ => A :MLOAD(checkSqrtFpEc_base)
94
+ C => B :CALL(mulFpEc)
95
+
96
+ ; === BLOCK1: 12/222 SM ===
97
+
98
+ :CALL(sqFpEc)
99
+ $ => A :MLOAD(checkSqrtFpEc_base)
100
+ C => B :CALL(mulFpEc)
101
+
102
+ ; === BLOCK1: 13/222 SM ===
103
+
104
+ :CALL(sqFpEc)
105
+ $ => A :MLOAD(checkSqrtFpEc_base)
106
+ C => B :CALL(mulFpEc)
107
+
108
+ ; === BLOCK1: 14/222 SM ===
109
+
110
+ :CALL(sqFpEc)
111
+ $ => A :MLOAD(checkSqrtFpEc_base)
112
+ C => B :CALL(mulFpEc)
113
+
114
+ ; === BLOCK1: 15/222 SM ===
115
+
116
+ :CALL(sqFpEc)
117
+ $ => A :MLOAD(checkSqrtFpEc_base)
118
+ C => B :CALL(mulFpEc)
119
+
120
+ ; === BLOCK1: 16/222 SM ===
121
+
122
+ :CALL(sqFpEc)
123
+ $ => A :MLOAD(checkSqrtFpEc_base)
124
+ C => B :CALL(mulFpEc)
125
+
126
+ ; === BLOCK1: 17/222 SM ===
127
+
128
+ :CALL(sqFpEc)
129
+ $ => A :MLOAD(checkSqrtFpEc_base)
130
+ C => B :CALL(mulFpEc)
131
+
132
+ ; === BLOCK1: 18/222 SM ===
133
+
134
+ :CALL(sqFpEc)
135
+ $ => A :MLOAD(checkSqrtFpEc_base)
136
+ C => B :CALL(mulFpEc)
137
+
138
+ ; === BLOCK1: 19/222 SM ===
139
+
140
+ :CALL(sqFpEc)
141
+ $ => A :MLOAD(checkSqrtFpEc_base)
142
+ C => B :CALL(mulFpEc)
143
+
144
+ ; === BLOCK1: 20/222 SM ===
145
+
146
+ :CALL(sqFpEc)
147
+ $ => A :MLOAD(checkSqrtFpEc_base)
148
+ C => B :CALL(mulFpEc)
149
+
150
+ ; === BLOCK1: 21/222 SM ===
151
+
152
+ :CALL(sqFpEc)
153
+ $ => A :MLOAD(checkSqrtFpEc_base)
154
+ C => B :CALL(mulFpEc)
155
+
156
+ ; === BLOCK1: 22/222 SM ===
157
+
158
+ :CALL(sqFpEc)
159
+ $ => A :MLOAD(checkSqrtFpEc_base)
160
+ C => B :CALL(mulFpEc)
161
+
162
+ ; === BLOCK1: 23/222 SM ===
163
+
164
+ :CALL(sqFpEc)
165
+ $ => A :MLOAD(checkSqrtFpEc_base)
166
+ C => B :CALL(mulFpEc)
167
+
168
+ ; === BLOCK1: 24/222 SM ===
169
+
170
+ :CALL(sqFpEc)
171
+ $ => A :MLOAD(checkSqrtFpEc_base)
172
+ C => B :CALL(mulFpEc)
173
+
174
+ ; === BLOCK1: 25/222 SM ===
175
+
176
+ :CALL(sqFpEc)
177
+ $ => A :MLOAD(checkSqrtFpEc_base)
178
+ C => B :CALL(mulFpEc)
179
+
180
+ ; === BLOCK1: 26/222 SM ===
181
+
182
+ :CALL(sqFpEc)
183
+ $ => A :MLOAD(checkSqrtFpEc_base)
184
+ C => B :CALL(mulFpEc)
185
+
186
+ ; === BLOCK1: 27/222 SM ===
187
+
188
+ :CALL(sqFpEc)
189
+ $ => A :MLOAD(checkSqrtFpEc_base)
190
+ C => B :CALL(mulFpEc)
191
+
192
+ ; === BLOCK1: 28/222 SM ===
193
+
194
+ :CALL(sqFpEc)
195
+ $ => A :MLOAD(checkSqrtFpEc_base)
196
+ C => B :CALL(mulFpEc)
197
+
198
+ ; === BLOCK1: 29/222 SM ===
199
+
200
+ :CALL(sqFpEc)
201
+ $ => A :MLOAD(checkSqrtFpEc_base)
202
+ C => B :CALL(mulFpEc)
203
+
204
+ ; === BLOCK1: 30/222 SM ===
205
+
206
+ :CALL(sqFpEc)
207
+ $ => A :MLOAD(checkSqrtFpEc_base)
208
+ C => B :CALL(mulFpEc)
209
+
210
+ ; === BLOCK1: 31/222 SM ===
211
+
212
+ :CALL(sqFpEc)
213
+ $ => A :MLOAD(checkSqrtFpEc_base)
214
+ C => B :CALL(mulFpEc)
215
+
216
+ ; === BLOCK1: 32/222 SM ===
217
+
218
+ :CALL(sqFpEc)
219
+ $ => A :MLOAD(checkSqrtFpEc_base)
220
+ C => B :CALL(mulFpEc)
221
+
222
+ ; === BLOCK1: 33/222 SM ===
223
+
224
+ :CALL(sqFpEc)
225
+ $ => A :MLOAD(checkSqrtFpEc_base)
226
+ C => B :CALL(mulFpEc)
227
+
228
+ ; === BLOCK1: 34/222 SM ===
229
+
230
+ :CALL(sqFpEc)
231
+ $ => A :MLOAD(checkSqrtFpEc_base)
232
+ C => B :CALL(mulFpEc)
233
+
234
+ ; === BLOCK1: 35/222 SM ===
235
+
236
+ :CALL(sqFpEc)
237
+ $ => A :MLOAD(checkSqrtFpEc_base)
238
+ C => B :CALL(mulFpEc)
239
+
240
+ ; === BLOCK1: 36/222 SM ===
241
+
242
+ :CALL(sqFpEc)
243
+ $ => A :MLOAD(checkSqrtFpEc_base)
244
+ C => B :CALL(mulFpEc)
245
+
246
+ ; === BLOCK1: 37/222 SM ===
247
+
248
+ :CALL(sqFpEc)
249
+ $ => A :MLOAD(checkSqrtFpEc_base)
250
+ C => B :CALL(mulFpEc)
251
+
252
+ ; === BLOCK1: 38/222 SM ===
253
+
254
+ :CALL(sqFpEc)
255
+ $ => A :MLOAD(checkSqrtFpEc_base)
256
+ C => B :CALL(mulFpEc)
257
+
258
+ ; === BLOCK1: 39/222 SM ===
259
+
260
+ :CALL(sqFpEc)
261
+ $ => A :MLOAD(checkSqrtFpEc_base)
262
+ C => B :CALL(mulFpEc)
263
+
264
+ ; === BLOCK1: 40/222 SM ===
265
+
266
+ :CALL(sqFpEc)
267
+ $ => A :MLOAD(checkSqrtFpEc_base)
268
+ C => B :CALL(mulFpEc)
269
+
270
+ ; === BLOCK1: 41/222 SM ===
271
+
272
+ :CALL(sqFpEc)
273
+ $ => A :MLOAD(checkSqrtFpEc_base)
274
+ C => B :CALL(mulFpEc)
275
+
276
+ ; === BLOCK1: 42/222 SM ===
277
+
278
+ :CALL(sqFpEc)
279
+ $ => A :MLOAD(checkSqrtFpEc_base)
280
+ C => B :CALL(mulFpEc)
281
+
282
+ ; === BLOCK1: 43/222 SM ===
283
+
284
+ :CALL(sqFpEc)
285
+ $ => A :MLOAD(checkSqrtFpEc_base)
286
+ C => B :CALL(mulFpEc)
287
+
288
+ ; === BLOCK1: 44/222 SM ===
289
+
290
+ :CALL(sqFpEc)
291
+ $ => A :MLOAD(checkSqrtFpEc_base)
292
+ C => B :CALL(mulFpEc)
293
+
294
+ ; === BLOCK1: 45/222 SM ===
295
+
296
+ :CALL(sqFpEc)
297
+ $ => A :MLOAD(checkSqrtFpEc_base)
298
+ C => B :CALL(mulFpEc)
299
+
300
+ ; === BLOCK1: 46/222 SM ===
301
+
302
+ :CALL(sqFpEc)
303
+ $ => A :MLOAD(checkSqrtFpEc_base)
304
+ C => B :CALL(mulFpEc)
305
+
306
+ ; === BLOCK1: 47/222 SM ===
307
+
308
+ :CALL(sqFpEc)
309
+ $ => A :MLOAD(checkSqrtFpEc_base)
310
+ C => B :CALL(mulFpEc)
311
+
312
+ ; === BLOCK1: 48/222 SM ===
313
+
314
+ :CALL(sqFpEc)
315
+ $ => A :MLOAD(checkSqrtFpEc_base)
316
+ C => B :CALL(mulFpEc)
317
+
318
+ ; === BLOCK1: 49/222 SM ===
319
+
320
+ :CALL(sqFpEc)
321
+ $ => A :MLOAD(checkSqrtFpEc_base)
322
+ C => B :CALL(mulFpEc)
323
+
324
+ ; === BLOCK1: 50/222 SM ===
325
+
326
+ :CALL(sqFpEc)
327
+ $ => A :MLOAD(checkSqrtFpEc_base)
328
+ C => B :CALL(mulFpEc)
329
+
330
+ ; === BLOCK1: 51/222 SM ===
331
+
332
+ :CALL(sqFpEc)
333
+ $ => A :MLOAD(checkSqrtFpEc_base)
334
+ C => B :CALL(mulFpEc)
335
+
336
+ ; === BLOCK1: 52/222 SM ===
337
+
338
+ :CALL(sqFpEc)
339
+ $ => A :MLOAD(checkSqrtFpEc_base)
340
+ C => B :CALL(mulFpEc)
341
+
342
+ ; === BLOCK1: 53/222 SM ===
343
+
344
+ :CALL(sqFpEc)
345
+ $ => A :MLOAD(checkSqrtFpEc_base)
346
+ C => B :CALL(mulFpEc)
347
+
348
+ ; === BLOCK1: 54/222 SM ===
349
+
350
+ :CALL(sqFpEc)
351
+ $ => A :MLOAD(checkSqrtFpEc_base)
352
+ C => B :CALL(mulFpEc)
353
+
354
+ ; === BLOCK1: 55/222 SM ===
355
+
356
+ :CALL(sqFpEc)
357
+ $ => A :MLOAD(checkSqrtFpEc_base)
358
+ C => B :CALL(mulFpEc)
359
+
360
+ ; === BLOCK1: 56/222 SM ===
361
+
362
+ :CALL(sqFpEc)
363
+ $ => A :MLOAD(checkSqrtFpEc_base)
364
+ C => B :CALL(mulFpEc)
365
+
366
+ ; === BLOCK1: 57/222 SM ===
367
+
368
+ :CALL(sqFpEc)
369
+ $ => A :MLOAD(checkSqrtFpEc_base)
370
+ C => B :CALL(mulFpEc)
371
+
372
+ ; === BLOCK1: 58/222 SM ===
373
+
374
+ :CALL(sqFpEc)
375
+ $ => A :MLOAD(checkSqrtFpEc_base)
376
+ C => B :CALL(mulFpEc)
377
+
378
+ ; === BLOCK1: 59/222 SM ===
379
+
380
+ :CALL(sqFpEc)
381
+ $ => A :MLOAD(checkSqrtFpEc_base)
382
+ C => B :CALL(mulFpEc)
383
+
384
+ ; === BLOCK1: 60/222 SM ===
385
+
386
+ :CALL(sqFpEc)
387
+ $ => A :MLOAD(checkSqrtFpEc_base)
388
+ C => B :CALL(mulFpEc)
389
+
390
+ ; === BLOCK1: 61/222 SM ===
391
+
392
+ :CALL(sqFpEc)
393
+ $ => A :MLOAD(checkSqrtFpEc_base)
394
+ C => B :CALL(mulFpEc)
395
+
396
+ ; === BLOCK1: 62/222 SM ===
397
+
398
+ :CALL(sqFpEc)
399
+ $ => A :MLOAD(checkSqrtFpEc_base)
400
+ C => B :CALL(mulFpEc)
401
+
402
+ ; === BLOCK1: 63/222 SM ===
403
+
404
+ :CALL(sqFpEc)
405
+ $ => A :MLOAD(checkSqrtFpEc_base)
406
+ C => B :CALL(mulFpEc)
407
+
408
+ ; === BLOCK1: 64/222 SM ===
409
+
410
+ :CALL(sqFpEc)
411
+ $ => A :MLOAD(checkSqrtFpEc_base)
412
+ C => B :CALL(mulFpEc)
413
+
414
+ ; === BLOCK1: 65/222 SM ===
415
+
416
+ :CALL(sqFpEc)
417
+ $ => A :MLOAD(checkSqrtFpEc_base)
418
+ C => B :CALL(mulFpEc)
419
+
420
+ ; === BLOCK1: 66/222 SM ===
421
+
422
+ :CALL(sqFpEc)
423
+ $ => A :MLOAD(checkSqrtFpEc_base)
424
+ C => B :CALL(mulFpEc)
425
+
426
+ ; === BLOCK1: 67/222 SM ===
427
+
428
+ :CALL(sqFpEc)
429
+ $ => A :MLOAD(checkSqrtFpEc_base)
430
+ C => B :CALL(mulFpEc)
431
+
432
+ ; === BLOCK1: 68/222 SM ===
433
+
434
+ :CALL(sqFpEc)
435
+ $ => A :MLOAD(checkSqrtFpEc_base)
436
+ C => B :CALL(mulFpEc)
437
+
438
+ ; === BLOCK1: 69/222 SM ===
439
+
440
+ :CALL(sqFpEc)
441
+ $ => A :MLOAD(checkSqrtFpEc_base)
442
+ C => B :CALL(mulFpEc)
443
+
444
+ ; === BLOCK1: 70/222 SM ===
445
+
446
+ :CALL(sqFpEc)
447
+ $ => A :MLOAD(checkSqrtFpEc_base)
448
+ C => B :CALL(mulFpEc)
449
+
450
+ ; === BLOCK1: 71/222 SM ===
451
+
452
+ :CALL(sqFpEc)
453
+ $ => A :MLOAD(checkSqrtFpEc_base)
454
+ C => B :CALL(mulFpEc)
455
+
456
+ ; === BLOCK1: 72/222 SM ===
457
+
458
+ :CALL(sqFpEc)
459
+ $ => A :MLOAD(checkSqrtFpEc_base)
460
+ C => B :CALL(mulFpEc)
461
+
462
+ ; === BLOCK1: 73/222 SM ===
463
+
464
+ :CALL(sqFpEc)
465
+ $ => A :MLOAD(checkSqrtFpEc_base)
466
+ C => B :CALL(mulFpEc)
467
+
468
+ ; === BLOCK1: 74/222 SM ===
469
+
470
+ :CALL(sqFpEc)
471
+ $ => A :MLOAD(checkSqrtFpEc_base)
472
+ C => B :CALL(mulFpEc)
473
+
474
+ ; === BLOCK1: 75/222 SM ===
475
+
476
+ :CALL(sqFpEc)
477
+ $ => A :MLOAD(checkSqrtFpEc_base)
478
+ C => B :CALL(mulFpEc)
479
+
480
+ ; === BLOCK1: 76/222 SM ===
481
+
482
+ :CALL(sqFpEc)
483
+ $ => A :MLOAD(checkSqrtFpEc_base)
484
+ C => B :CALL(mulFpEc)
485
+
486
+ ; === BLOCK1: 77/222 SM ===
487
+
488
+ :CALL(sqFpEc)
489
+ $ => A :MLOAD(checkSqrtFpEc_base)
490
+ C => B :CALL(mulFpEc)
491
+
492
+ ; === BLOCK1: 78/222 SM ===
493
+
494
+ :CALL(sqFpEc)
495
+ $ => A :MLOAD(checkSqrtFpEc_base)
496
+ C => B :CALL(mulFpEc)
497
+
498
+ ; === BLOCK1: 79/222 SM ===
499
+
500
+ :CALL(sqFpEc)
501
+ $ => A :MLOAD(checkSqrtFpEc_base)
502
+ C => B :CALL(mulFpEc)
503
+
504
+ ; === BLOCK1: 80/222 SM ===
505
+
506
+ :CALL(sqFpEc)
507
+ $ => A :MLOAD(checkSqrtFpEc_base)
508
+ C => B :CALL(mulFpEc)
509
+
510
+ ; === BLOCK1: 81/222 SM ===
511
+
512
+ :CALL(sqFpEc)
513
+ $ => A :MLOAD(checkSqrtFpEc_base)
514
+ C => B :CALL(mulFpEc)
515
+
516
+ ; === BLOCK1: 82/222 SM ===
517
+
518
+ :CALL(sqFpEc)
519
+ $ => A :MLOAD(checkSqrtFpEc_base)
520
+ C => B :CALL(mulFpEc)
521
+
522
+ ; === BLOCK1: 83/222 SM ===
523
+
524
+ :CALL(sqFpEc)
525
+ $ => A :MLOAD(checkSqrtFpEc_base)
526
+ C => B :CALL(mulFpEc)
527
+
528
+ ; === BLOCK1: 84/222 SM ===
529
+
530
+ :CALL(sqFpEc)
531
+ $ => A :MLOAD(checkSqrtFpEc_base)
532
+ C => B :CALL(mulFpEc)
533
+
534
+ ; === BLOCK1: 85/222 SM ===
535
+
536
+ :CALL(sqFpEc)
537
+ $ => A :MLOAD(checkSqrtFpEc_base)
538
+ C => B :CALL(mulFpEc)
539
+
540
+ ; === BLOCK1: 86/222 SM ===
541
+
542
+ :CALL(sqFpEc)
543
+ $ => A :MLOAD(checkSqrtFpEc_base)
544
+ C => B :CALL(mulFpEc)
545
+
546
+ ; === BLOCK1: 87/222 SM ===
547
+
548
+ :CALL(sqFpEc)
549
+ $ => A :MLOAD(checkSqrtFpEc_base)
550
+ C => B :CALL(mulFpEc)
551
+
552
+ ; === BLOCK1: 88/222 SM ===
553
+
554
+ :CALL(sqFpEc)
555
+ $ => A :MLOAD(checkSqrtFpEc_base)
556
+ C => B :CALL(mulFpEc)
557
+
558
+ ; === BLOCK1: 89/222 SM ===
559
+
560
+ :CALL(sqFpEc)
561
+ $ => A :MLOAD(checkSqrtFpEc_base)
562
+ C => B :CALL(mulFpEc)
563
+
564
+ ; === BLOCK1: 90/222 SM ===
565
+
566
+ :CALL(sqFpEc)
567
+ $ => A :MLOAD(checkSqrtFpEc_base)
568
+ C => B :CALL(mulFpEc)
569
+
570
+ ; === BLOCK1: 91/222 SM ===
571
+
572
+ :CALL(sqFpEc)
573
+ $ => A :MLOAD(checkSqrtFpEc_base)
574
+ C => B :CALL(mulFpEc)
575
+
576
+ ; === BLOCK1: 92/222 SM ===
577
+
578
+ :CALL(sqFpEc)
579
+ $ => A :MLOAD(checkSqrtFpEc_base)
580
+ C => B :CALL(mulFpEc)
581
+
582
+ ; === BLOCK1: 93/222 SM ===
583
+
584
+ :CALL(sqFpEc)
585
+ $ => A :MLOAD(checkSqrtFpEc_base)
586
+ C => B :CALL(mulFpEc)
587
+
588
+ ; === BLOCK1: 94/222 SM ===
589
+
590
+ :CALL(sqFpEc)
591
+ $ => A :MLOAD(checkSqrtFpEc_base)
592
+ C => B :CALL(mulFpEc)
593
+
594
+ ; === BLOCK1: 95/222 SM ===
595
+
596
+ :CALL(sqFpEc)
597
+ $ => A :MLOAD(checkSqrtFpEc_base)
598
+ C => B :CALL(mulFpEc)
599
+
600
+ ; === BLOCK1: 96/222 SM ===
601
+
602
+ :CALL(sqFpEc)
603
+ $ => A :MLOAD(checkSqrtFpEc_base)
604
+ C => B :CALL(mulFpEc)
605
+
606
+ ; === BLOCK1: 97/222 SM ===
607
+
608
+ :CALL(sqFpEc)
609
+ $ => A :MLOAD(checkSqrtFpEc_base)
610
+ C => B :CALL(mulFpEc)
611
+
612
+ ; === BLOCK1: 98/222 SM ===
613
+
614
+ :CALL(sqFpEc)
615
+ $ => A :MLOAD(checkSqrtFpEc_base)
616
+ C => B :CALL(mulFpEc)
617
+
618
+ ; === BLOCK1: 99/222 SM ===
619
+
620
+ :CALL(sqFpEc)
621
+ $ => A :MLOAD(checkSqrtFpEc_base)
622
+ C => B :CALL(mulFpEc)
623
+
624
+ ; === BLOCK1: 100/222 SM ===
625
+
626
+ :CALL(sqFpEc)
627
+ $ => A :MLOAD(checkSqrtFpEc_base)
628
+ C => B :CALL(mulFpEc)
629
+
630
+ ; === BLOCK1: 101/222 SM ===
631
+
632
+ :CALL(sqFpEc)
633
+ $ => A :MLOAD(checkSqrtFpEc_base)
634
+ C => B :CALL(mulFpEc)
635
+
636
+ ; === BLOCK1: 102/222 SM ===
637
+
638
+ :CALL(sqFpEc)
639
+ $ => A :MLOAD(checkSqrtFpEc_base)
640
+ C => B :CALL(mulFpEc)
641
+
642
+ ; === BLOCK1: 103/222 SM ===
643
+
644
+ :CALL(sqFpEc)
645
+ $ => A :MLOAD(checkSqrtFpEc_base)
646
+ C => B :CALL(mulFpEc)
647
+
648
+ ; === BLOCK1: 104/222 SM ===
649
+
650
+ :CALL(sqFpEc)
651
+ $ => A :MLOAD(checkSqrtFpEc_base)
652
+ C => B :CALL(mulFpEc)
653
+
654
+ ; === BLOCK1: 105/222 SM ===
655
+
656
+ :CALL(sqFpEc)
657
+ $ => A :MLOAD(checkSqrtFpEc_base)
658
+ C => B :CALL(mulFpEc)
659
+
660
+ ; === BLOCK1: 106/222 SM ===
661
+
662
+ :CALL(sqFpEc)
663
+ $ => A :MLOAD(checkSqrtFpEc_base)
664
+ C => B :CALL(mulFpEc)
665
+
666
+ ; === BLOCK1: 107/222 SM ===
667
+
668
+ :CALL(sqFpEc)
669
+ $ => A :MLOAD(checkSqrtFpEc_base)
670
+ C => B :CALL(mulFpEc)
671
+
672
+ ; === BLOCK1: 108/222 SM ===
673
+
674
+ :CALL(sqFpEc)
675
+ $ => A :MLOAD(checkSqrtFpEc_base)
676
+ C => B :CALL(mulFpEc)
677
+
678
+ ; === BLOCK1: 109/222 SM ===
679
+
680
+ :CALL(sqFpEc)
681
+ $ => A :MLOAD(checkSqrtFpEc_base)
682
+ C => B :CALL(mulFpEc)
683
+
684
+ ; === BLOCK1: 110/222 SM ===
685
+
686
+ :CALL(sqFpEc)
687
+ $ => A :MLOAD(checkSqrtFpEc_base)
688
+ C => B :CALL(mulFpEc)
689
+
690
+ ; === BLOCK1: 111/222 SM ===
691
+
692
+ :CALL(sqFpEc)
693
+ $ => A :MLOAD(checkSqrtFpEc_base)
694
+ C => B :CALL(mulFpEc)
695
+
696
+ ; === BLOCK1: 112/222 SM ===
697
+
698
+ :CALL(sqFpEc)
699
+ $ => A :MLOAD(checkSqrtFpEc_base)
700
+ C => B :CALL(mulFpEc)
701
+
702
+ ; === BLOCK1: 113/222 SM ===
703
+
704
+ :CALL(sqFpEc)
705
+ $ => A :MLOAD(checkSqrtFpEc_base)
706
+ C => B :CALL(mulFpEc)
707
+
708
+ ; === BLOCK1: 114/222 SM ===
709
+
710
+ :CALL(sqFpEc)
711
+ $ => A :MLOAD(checkSqrtFpEc_base)
712
+ C => B :CALL(mulFpEc)
713
+
714
+ ; === BLOCK1: 115/222 SM ===
715
+
716
+ :CALL(sqFpEc)
717
+ $ => A :MLOAD(checkSqrtFpEc_base)
718
+ C => B :CALL(mulFpEc)
719
+
720
+ ; === BLOCK1: 116/222 SM ===
721
+
722
+ :CALL(sqFpEc)
723
+ $ => A :MLOAD(checkSqrtFpEc_base)
724
+ C => B :CALL(mulFpEc)
725
+
726
+ ; === BLOCK1: 117/222 SM ===
727
+
728
+ :CALL(sqFpEc)
729
+ $ => A :MLOAD(checkSqrtFpEc_base)
730
+ C => B :CALL(mulFpEc)
731
+
732
+ ; === BLOCK1: 118/222 SM ===
733
+
734
+ :CALL(sqFpEc)
735
+ $ => A :MLOAD(checkSqrtFpEc_base)
736
+ C => B :CALL(mulFpEc)
737
+
738
+ ; === BLOCK1: 119/222 SM ===
739
+
740
+ :CALL(sqFpEc)
741
+ $ => A :MLOAD(checkSqrtFpEc_base)
742
+ C => B :CALL(mulFpEc)
743
+
744
+ ; === BLOCK1: 120/222 SM ===
745
+
746
+ :CALL(sqFpEc)
747
+ $ => A :MLOAD(checkSqrtFpEc_base)
748
+ C => B :CALL(mulFpEc)
749
+
750
+ ; === BLOCK1: 121/222 SM ===
751
+
752
+ :CALL(sqFpEc)
753
+ $ => A :MLOAD(checkSqrtFpEc_base)
754
+ C => B :CALL(mulFpEc)
755
+
756
+ ; === BLOCK1: 122/222 SM ===
757
+
758
+ :CALL(sqFpEc)
759
+ $ => A :MLOAD(checkSqrtFpEc_base)
760
+ C => B :CALL(mulFpEc)
761
+
762
+ ; === BLOCK1: 123/222 SM ===
763
+
764
+ :CALL(sqFpEc)
765
+ $ => A :MLOAD(checkSqrtFpEc_base)
766
+ C => B :CALL(mulFpEc)
767
+
768
+ ; === BLOCK1: 124/222 SM ===
769
+
770
+ :CALL(sqFpEc)
771
+ $ => A :MLOAD(checkSqrtFpEc_base)
772
+ C => B :CALL(mulFpEc)
773
+
774
+ ; === BLOCK1: 125/222 SM ===
775
+
776
+ :CALL(sqFpEc)
777
+ $ => A :MLOAD(checkSqrtFpEc_base)
778
+ C => B :CALL(mulFpEc)
779
+
780
+ ; === BLOCK1: 126/222 SM ===
781
+
782
+ :CALL(sqFpEc)
783
+ $ => A :MLOAD(checkSqrtFpEc_base)
784
+ C => B :CALL(mulFpEc)
785
+
786
+ ; === BLOCK1: 127/222 SM ===
787
+
788
+ :CALL(sqFpEc)
789
+ $ => A :MLOAD(checkSqrtFpEc_base)
790
+ C => B :CALL(mulFpEc)
791
+
792
+ ; === BLOCK1: 128/222 SM ===
793
+
794
+ :CALL(sqFpEc)
795
+ $ => A :MLOAD(checkSqrtFpEc_base)
796
+ C => B :CALL(mulFpEc)
797
+
798
+ ; === BLOCK1: 129/222 SM ===
799
+
800
+ :CALL(sqFpEc)
801
+ $ => A :MLOAD(checkSqrtFpEc_base)
802
+ C => B :CALL(mulFpEc)
803
+
804
+ ; === BLOCK1: 130/222 SM ===
805
+
806
+ :CALL(sqFpEc)
807
+ $ => A :MLOAD(checkSqrtFpEc_base)
808
+ C => B :CALL(mulFpEc)
809
+
810
+ ; === BLOCK1: 131/222 SM ===
811
+
812
+ :CALL(sqFpEc)
813
+ $ => A :MLOAD(checkSqrtFpEc_base)
814
+ C => B :CALL(mulFpEc)
815
+
816
+ ; === BLOCK1: 132/222 SM ===
817
+
818
+ :CALL(sqFpEc)
819
+ $ => A :MLOAD(checkSqrtFpEc_base)
820
+ C => B :CALL(mulFpEc)
821
+
822
+ ; === BLOCK1: 133/222 SM ===
823
+
824
+ :CALL(sqFpEc)
825
+ $ => A :MLOAD(checkSqrtFpEc_base)
826
+ C => B :CALL(mulFpEc)
827
+
828
+ ; === BLOCK1: 134/222 SM ===
829
+
830
+ :CALL(sqFpEc)
831
+ $ => A :MLOAD(checkSqrtFpEc_base)
832
+ C => B :CALL(mulFpEc)
833
+
834
+ ; === BLOCK1: 135/222 SM ===
835
+
836
+ :CALL(sqFpEc)
837
+ $ => A :MLOAD(checkSqrtFpEc_base)
838
+ C => B :CALL(mulFpEc)
839
+
840
+ ; === BLOCK1: 136/222 SM ===
841
+
842
+ :CALL(sqFpEc)
843
+ $ => A :MLOAD(checkSqrtFpEc_base)
844
+ C => B :CALL(mulFpEc)
845
+
846
+ ; === BLOCK1: 137/222 SM ===
847
+
848
+ :CALL(sqFpEc)
849
+ $ => A :MLOAD(checkSqrtFpEc_base)
850
+ C => B :CALL(mulFpEc)
851
+
852
+ ; === BLOCK1: 138/222 SM ===
853
+
854
+ :CALL(sqFpEc)
855
+ $ => A :MLOAD(checkSqrtFpEc_base)
856
+ C => B :CALL(mulFpEc)
857
+
858
+ ; === BLOCK1: 139/222 SM ===
859
+
860
+ :CALL(sqFpEc)
861
+ $ => A :MLOAD(checkSqrtFpEc_base)
862
+ C => B :CALL(mulFpEc)
863
+
864
+ ; === BLOCK1: 140/222 SM ===
865
+
866
+ :CALL(sqFpEc)
867
+ $ => A :MLOAD(checkSqrtFpEc_base)
868
+ C => B :CALL(mulFpEc)
869
+
870
+ ; === BLOCK1: 141/222 SM ===
871
+
872
+ :CALL(sqFpEc)
873
+ $ => A :MLOAD(checkSqrtFpEc_base)
874
+ C => B :CALL(mulFpEc)
875
+
876
+ ; === BLOCK1: 142/222 SM ===
877
+
878
+ :CALL(sqFpEc)
879
+ $ => A :MLOAD(checkSqrtFpEc_base)
880
+ C => B :CALL(mulFpEc)
881
+
882
+ ; === BLOCK1: 143/222 SM ===
883
+
884
+ :CALL(sqFpEc)
885
+ $ => A :MLOAD(checkSqrtFpEc_base)
886
+ C => B :CALL(mulFpEc)
887
+
888
+ ; === BLOCK1: 144/222 SM ===
889
+
890
+ :CALL(sqFpEc)
891
+ $ => A :MLOAD(checkSqrtFpEc_base)
892
+ C => B :CALL(mulFpEc)
893
+
894
+ ; === BLOCK1: 145/222 SM ===
895
+
896
+ :CALL(sqFpEc)
897
+ $ => A :MLOAD(checkSqrtFpEc_base)
898
+ C => B :CALL(mulFpEc)
899
+
900
+ ; === BLOCK1: 146/222 SM ===
901
+
902
+ :CALL(sqFpEc)
903
+ $ => A :MLOAD(checkSqrtFpEc_base)
904
+ C => B :CALL(mulFpEc)
905
+
906
+ ; === BLOCK1: 147/222 SM ===
907
+
908
+ :CALL(sqFpEc)
909
+ $ => A :MLOAD(checkSqrtFpEc_base)
910
+ C => B :CALL(mulFpEc)
911
+
912
+ ; === BLOCK1: 148/222 SM ===
913
+
914
+ :CALL(sqFpEc)
915
+ $ => A :MLOAD(checkSqrtFpEc_base)
916
+ C => B :CALL(mulFpEc)
917
+
918
+ ; === BLOCK1: 149/222 SM ===
919
+
920
+ :CALL(sqFpEc)
921
+ $ => A :MLOAD(checkSqrtFpEc_base)
922
+ C => B :CALL(mulFpEc)
923
+
924
+ ; === BLOCK1: 150/222 SM ===
925
+
926
+ :CALL(sqFpEc)
927
+ $ => A :MLOAD(checkSqrtFpEc_base)
928
+ C => B :CALL(mulFpEc)
929
+
930
+ ; === BLOCK1: 151/222 SM ===
931
+
932
+ :CALL(sqFpEc)
933
+ $ => A :MLOAD(checkSqrtFpEc_base)
934
+ C => B :CALL(mulFpEc)
935
+
936
+ ; === BLOCK1: 152/222 SM ===
937
+
938
+ :CALL(sqFpEc)
939
+ $ => A :MLOAD(checkSqrtFpEc_base)
940
+ C => B :CALL(mulFpEc)
941
+
942
+ ; === BLOCK1: 153/222 SM ===
943
+
944
+ :CALL(sqFpEc)
945
+ $ => A :MLOAD(checkSqrtFpEc_base)
946
+ C => B :CALL(mulFpEc)
947
+
948
+ ; === BLOCK1: 154/222 SM ===
949
+
950
+ :CALL(sqFpEc)
951
+ $ => A :MLOAD(checkSqrtFpEc_base)
952
+ C => B :CALL(mulFpEc)
953
+
954
+ ; === BLOCK1: 155/222 SM ===
955
+
956
+ :CALL(sqFpEc)
957
+ $ => A :MLOAD(checkSqrtFpEc_base)
958
+ C => B :CALL(mulFpEc)
959
+
960
+ ; === BLOCK1: 156/222 SM ===
961
+
962
+ :CALL(sqFpEc)
963
+ $ => A :MLOAD(checkSqrtFpEc_base)
964
+ C => B :CALL(mulFpEc)
965
+
966
+ ; === BLOCK1: 157/222 SM ===
967
+
968
+ :CALL(sqFpEc)
969
+ $ => A :MLOAD(checkSqrtFpEc_base)
970
+ C => B :CALL(mulFpEc)
971
+
972
+ ; === BLOCK1: 158/222 SM ===
973
+
974
+ :CALL(sqFpEc)
975
+ $ => A :MLOAD(checkSqrtFpEc_base)
976
+ C => B :CALL(mulFpEc)
977
+
978
+ ; === BLOCK1: 159/222 SM ===
979
+
980
+ :CALL(sqFpEc)
981
+ $ => A :MLOAD(checkSqrtFpEc_base)
982
+ C => B :CALL(mulFpEc)
983
+
984
+ ; === BLOCK1: 160/222 SM ===
985
+
986
+ :CALL(sqFpEc)
987
+ $ => A :MLOAD(checkSqrtFpEc_base)
988
+ C => B :CALL(mulFpEc)
989
+
990
+ ; === BLOCK1: 161/222 SM ===
991
+
992
+ :CALL(sqFpEc)
993
+ $ => A :MLOAD(checkSqrtFpEc_base)
994
+ C => B :CALL(mulFpEc)
995
+
996
+ ; === BLOCK1: 162/222 SM ===
997
+
998
+ :CALL(sqFpEc)
999
+ $ => A :MLOAD(checkSqrtFpEc_base)
1000
+ C => B :CALL(mulFpEc)
1001
+
1002
+ ; === BLOCK1: 163/222 SM ===
1003
+
1004
+ :CALL(sqFpEc)
1005
+ $ => A :MLOAD(checkSqrtFpEc_base)
1006
+ C => B :CALL(mulFpEc)
1007
+
1008
+ ; === BLOCK1: 164/222 SM ===
1009
+
1010
+ :CALL(sqFpEc)
1011
+ $ => A :MLOAD(checkSqrtFpEc_base)
1012
+ C => B :CALL(mulFpEc)
1013
+
1014
+ ; === BLOCK1: 165/222 SM ===
1015
+
1016
+ :CALL(sqFpEc)
1017
+ $ => A :MLOAD(checkSqrtFpEc_base)
1018
+ C => B :CALL(mulFpEc)
1019
+
1020
+ ; === BLOCK1: 166/222 SM ===
1021
+
1022
+ :CALL(sqFpEc)
1023
+ $ => A :MLOAD(checkSqrtFpEc_base)
1024
+ C => B :CALL(mulFpEc)
1025
+
1026
+ ; === BLOCK1: 167/222 SM ===
1027
+
1028
+ :CALL(sqFpEc)
1029
+ $ => A :MLOAD(checkSqrtFpEc_base)
1030
+ C => B :CALL(mulFpEc)
1031
+
1032
+ ; === BLOCK1: 168/222 SM ===
1033
+
1034
+ :CALL(sqFpEc)
1035
+ $ => A :MLOAD(checkSqrtFpEc_base)
1036
+ C => B :CALL(mulFpEc)
1037
+
1038
+ ; === BLOCK1: 169/222 SM ===
1039
+
1040
+ :CALL(sqFpEc)
1041
+ $ => A :MLOAD(checkSqrtFpEc_base)
1042
+ C => B :CALL(mulFpEc)
1043
+
1044
+ ; === BLOCK1: 170/222 SM ===
1045
+
1046
+ :CALL(sqFpEc)
1047
+ $ => A :MLOAD(checkSqrtFpEc_base)
1048
+ C => B :CALL(mulFpEc)
1049
+
1050
+ ; === BLOCK1: 171/222 SM ===
1051
+
1052
+ :CALL(sqFpEc)
1053
+ $ => A :MLOAD(checkSqrtFpEc_base)
1054
+ C => B :CALL(mulFpEc)
1055
+
1056
+ ; === BLOCK1: 172/222 SM ===
1057
+
1058
+ :CALL(sqFpEc)
1059
+ $ => A :MLOAD(checkSqrtFpEc_base)
1060
+ C => B :CALL(mulFpEc)
1061
+
1062
+ ; === BLOCK1: 173/222 SM ===
1063
+
1064
+ :CALL(sqFpEc)
1065
+ $ => A :MLOAD(checkSqrtFpEc_base)
1066
+ C => B :CALL(mulFpEc)
1067
+
1068
+ ; === BLOCK1: 174/222 SM ===
1069
+
1070
+ :CALL(sqFpEc)
1071
+ $ => A :MLOAD(checkSqrtFpEc_base)
1072
+ C => B :CALL(mulFpEc)
1073
+
1074
+ ; === BLOCK1: 175/222 SM ===
1075
+
1076
+ :CALL(sqFpEc)
1077
+ $ => A :MLOAD(checkSqrtFpEc_base)
1078
+ C => B :CALL(mulFpEc)
1079
+
1080
+ ; === BLOCK1: 176/222 SM ===
1081
+
1082
+ :CALL(sqFpEc)
1083
+ $ => A :MLOAD(checkSqrtFpEc_base)
1084
+ C => B :CALL(mulFpEc)
1085
+
1086
+ ; === BLOCK1: 177/222 SM ===
1087
+
1088
+ :CALL(sqFpEc)
1089
+ $ => A :MLOAD(checkSqrtFpEc_base)
1090
+ C => B :CALL(mulFpEc)
1091
+
1092
+ ; === BLOCK1: 178/222 SM ===
1093
+
1094
+ :CALL(sqFpEc)
1095
+ $ => A :MLOAD(checkSqrtFpEc_base)
1096
+ C => B :CALL(mulFpEc)
1097
+
1098
+ ; === BLOCK1: 179/222 SM ===
1099
+
1100
+ :CALL(sqFpEc)
1101
+ $ => A :MLOAD(checkSqrtFpEc_base)
1102
+ C => B :CALL(mulFpEc)
1103
+
1104
+ ; === BLOCK1: 180/222 SM ===
1105
+
1106
+ :CALL(sqFpEc)
1107
+ $ => A :MLOAD(checkSqrtFpEc_base)
1108
+ C => B :CALL(mulFpEc)
1109
+
1110
+ ; === BLOCK1: 181/222 SM ===
1111
+
1112
+ :CALL(sqFpEc)
1113
+ $ => A :MLOAD(checkSqrtFpEc_base)
1114
+ C => B :CALL(mulFpEc)
1115
+
1116
+ ; === BLOCK1: 182/222 SM ===
1117
+
1118
+ :CALL(sqFpEc)
1119
+ $ => A :MLOAD(checkSqrtFpEc_base)
1120
+ C => B :CALL(mulFpEc)
1121
+
1122
+ ; === BLOCK1: 183/222 SM ===
1123
+
1124
+ :CALL(sqFpEc)
1125
+ $ => A :MLOAD(checkSqrtFpEc_base)
1126
+ C => B :CALL(mulFpEc)
1127
+
1128
+ ; === BLOCK1: 184/222 SM ===
1129
+
1130
+ :CALL(sqFpEc)
1131
+ $ => A :MLOAD(checkSqrtFpEc_base)
1132
+ C => B :CALL(mulFpEc)
1133
+
1134
+ ; === BLOCK1: 185/222 SM ===
1135
+
1136
+ :CALL(sqFpEc)
1137
+ $ => A :MLOAD(checkSqrtFpEc_base)
1138
+ C => B :CALL(mulFpEc)
1139
+
1140
+ ; === BLOCK1: 186/222 SM ===
1141
+
1142
+ :CALL(sqFpEc)
1143
+ $ => A :MLOAD(checkSqrtFpEc_base)
1144
+ C => B :CALL(mulFpEc)
1145
+
1146
+ ; === BLOCK1: 187/222 SM ===
1147
+
1148
+ :CALL(sqFpEc)
1149
+ $ => A :MLOAD(checkSqrtFpEc_base)
1150
+ C => B :CALL(mulFpEc)
1151
+
1152
+ ; === BLOCK1: 188/222 SM ===
1153
+
1154
+ :CALL(sqFpEc)
1155
+ $ => A :MLOAD(checkSqrtFpEc_base)
1156
+ C => B :CALL(mulFpEc)
1157
+
1158
+ ; === BLOCK1: 189/222 SM ===
1159
+
1160
+ :CALL(sqFpEc)
1161
+ $ => A :MLOAD(checkSqrtFpEc_base)
1162
+ C => B :CALL(mulFpEc)
1163
+
1164
+ ; === BLOCK1: 190/222 SM ===
1165
+
1166
+ :CALL(sqFpEc)
1167
+ $ => A :MLOAD(checkSqrtFpEc_base)
1168
+ C => B :CALL(mulFpEc)
1169
+
1170
+ ; === BLOCK1: 191/222 SM ===
1171
+
1172
+ :CALL(sqFpEc)
1173
+ $ => A :MLOAD(checkSqrtFpEc_base)
1174
+ C => B :CALL(mulFpEc)
1175
+
1176
+ ; === BLOCK1: 192/222 SM ===
1177
+
1178
+ :CALL(sqFpEc)
1179
+ $ => A :MLOAD(checkSqrtFpEc_base)
1180
+ C => B :CALL(mulFpEc)
1181
+
1182
+ ; === BLOCK1: 193/222 SM ===
1183
+
1184
+ :CALL(sqFpEc)
1185
+ $ => A :MLOAD(checkSqrtFpEc_base)
1186
+ C => B :CALL(mulFpEc)
1187
+
1188
+ ; === BLOCK1: 194/222 SM ===
1189
+
1190
+ :CALL(sqFpEc)
1191
+ $ => A :MLOAD(checkSqrtFpEc_base)
1192
+ C => B :CALL(mulFpEc)
1193
+
1194
+ ; === BLOCK1: 195/222 SM ===
1195
+
1196
+ :CALL(sqFpEc)
1197
+ $ => A :MLOAD(checkSqrtFpEc_base)
1198
+ C => B :CALL(mulFpEc)
1199
+
1200
+ ; === BLOCK1: 196/222 SM ===
1201
+
1202
+ :CALL(sqFpEc)
1203
+ $ => A :MLOAD(checkSqrtFpEc_base)
1204
+ C => B :CALL(mulFpEc)
1205
+
1206
+ ; === BLOCK1: 197/222 SM ===
1207
+
1208
+ :CALL(sqFpEc)
1209
+ $ => A :MLOAD(checkSqrtFpEc_base)
1210
+ C => B :CALL(mulFpEc)
1211
+
1212
+ ; === BLOCK1: 198/222 SM ===
1213
+
1214
+ :CALL(sqFpEc)
1215
+ $ => A :MLOAD(checkSqrtFpEc_base)
1216
+ C => B :CALL(mulFpEc)
1217
+
1218
+ ; === BLOCK1: 199/222 SM ===
1219
+
1220
+ :CALL(sqFpEc)
1221
+ $ => A :MLOAD(checkSqrtFpEc_base)
1222
+ C => B :CALL(mulFpEc)
1223
+
1224
+ ; === BLOCK1: 200/222 SM ===
1225
+
1226
+ :CALL(sqFpEc)
1227
+ $ => A :MLOAD(checkSqrtFpEc_base)
1228
+ C => B :CALL(mulFpEc)
1229
+
1230
+ ; === BLOCK1: 201/222 SM ===
1231
+
1232
+ :CALL(sqFpEc)
1233
+ $ => A :MLOAD(checkSqrtFpEc_base)
1234
+ C => B :CALL(mulFpEc)
1235
+
1236
+ ; === BLOCK1: 202/222 SM ===
1237
+
1238
+ :CALL(sqFpEc)
1239
+ $ => A :MLOAD(checkSqrtFpEc_base)
1240
+ C => B :CALL(mulFpEc)
1241
+
1242
+ ; === BLOCK1: 203/222 SM ===
1243
+
1244
+ :CALL(sqFpEc)
1245
+ $ => A :MLOAD(checkSqrtFpEc_base)
1246
+ C => B :CALL(mulFpEc)
1247
+
1248
+ ; === BLOCK1: 204/222 SM ===
1249
+
1250
+ :CALL(sqFpEc)
1251
+ $ => A :MLOAD(checkSqrtFpEc_base)
1252
+ C => B :CALL(mulFpEc)
1253
+
1254
+ ; === BLOCK1: 205/222 SM ===
1255
+
1256
+ :CALL(sqFpEc)
1257
+ $ => A :MLOAD(checkSqrtFpEc_base)
1258
+ C => B :CALL(mulFpEc)
1259
+
1260
+ ; === BLOCK1: 206/222 SM ===
1261
+
1262
+ :CALL(sqFpEc)
1263
+ $ => A :MLOAD(checkSqrtFpEc_base)
1264
+ C => B :CALL(mulFpEc)
1265
+
1266
+ ; === BLOCK1: 207/222 SM ===
1267
+
1268
+ :CALL(sqFpEc)
1269
+ $ => A :MLOAD(checkSqrtFpEc_base)
1270
+ C => B :CALL(mulFpEc)
1271
+
1272
+ ; === BLOCK1: 208/222 SM ===
1273
+
1274
+ :CALL(sqFpEc)
1275
+ $ => A :MLOAD(checkSqrtFpEc_base)
1276
+ C => B :CALL(mulFpEc)
1277
+
1278
+ ; === BLOCK1: 209/222 SM ===
1279
+
1280
+ :CALL(sqFpEc)
1281
+ $ => A :MLOAD(checkSqrtFpEc_base)
1282
+ C => B :CALL(mulFpEc)
1283
+
1284
+ ; === BLOCK1: 210/222 SM ===
1285
+
1286
+ :CALL(sqFpEc)
1287
+ $ => A :MLOAD(checkSqrtFpEc_base)
1288
+ C => B :CALL(mulFpEc)
1289
+
1290
+ ; === BLOCK1: 211/222 SM ===
1291
+
1292
+ :CALL(sqFpEc)
1293
+ $ => A :MLOAD(checkSqrtFpEc_base)
1294
+ C => B :CALL(mulFpEc)
1295
+
1296
+ ; === BLOCK1: 212/222 SM ===
1297
+
1298
+ :CALL(sqFpEc)
1299
+ $ => A :MLOAD(checkSqrtFpEc_base)
1300
+ C => B :CALL(mulFpEc)
1301
+
1302
+ ; === BLOCK1: 213/222 SM ===
1303
+
1304
+ :CALL(sqFpEc)
1305
+ $ => A :MLOAD(checkSqrtFpEc_base)
1306
+ C => B :CALL(mulFpEc)
1307
+
1308
+ ; === BLOCK1: 214/222 SM ===
1309
+
1310
+ :CALL(sqFpEc)
1311
+ $ => A :MLOAD(checkSqrtFpEc_base)
1312
+ C => B :CALL(mulFpEc)
1313
+
1314
+ ; === BLOCK1: 215/222 SM ===
1315
+
1316
+ :CALL(sqFpEc)
1317
+ $ => A :MLOAD(checkSqrtFpEc_base)
1318
+ C => B :CALL(mulFpEc)
1319
+
1320
+ ; === BLOCK1: 216/222 SM ===
1321
+
1322
+ :CALL(sqFpEc)
1323
+ $ => A :MLOAD(checkSqrtFpEc_base)
1324
+ C => B :CALL(mulFpEc)
1325
+
1326
+ ; === BLOCK1: 217/222 SM ===
1327
+
1328
+ :CALL(sqFpEc)
1329
+ $ => A :MLOAD(checkSqrtFpEc_base)
1330
+ C => B :CALL(mulFpEc)
1331
+
1332
+ ; === BLOCK1: 218/222 SM ===
1333
+
1334
+ :CALL(sqFpEc)
1335
+ $ => A :MLOAD(checkSqrtFpEc_base)
1336
+ C => B :CALL(mulFpEc)
1337
+
1338
+ ; === BLOCK1: 219/222 SM ===
1339
+
1340
+ :CALL(sqFpEc)
1341
+ $ => A :MLOAD(checkSqrtFpEc_base)
1342
+ C => B :CALL(mulFpEc)
1343
+
1344
+ ; === BLOCK1: 220/222 SM ===
1345
+
1346
+ :CALL(sqFpEc)
1347
+ $ => A :MLOAD(checkSqrtFpEc_base)
1348
+ C => B :CALL(mulFpEc)
1349
+
1350
+ ; === BLOCK1: 221/222 SM ===
1351
+
1352
+ :CALL(sqFpEc)
1353
+ $ => A :MLOAD(checkSqrtFpEc_base)
1354
+ C => B :CALL(mulFpEc)
1355
+
1356
+ ; === BLOCK1: 222/222 SM ===
1357
+
1358
+ :CALL(sqFpEc)
1359
+ $ => A :MLOAD(checkSqrtFpEc_base)
1360
+ C => B :CALL(mulFpEc)
1361
+
1362
+
1363
+
1364
+ ; === BLOCK2: 1/1 S ===
1365
+
1366
+ :CALL(sqFpEc)
1367
+
1368
+
1369
+
1370
+ ; === BLOCK3: 1/22 SM ===
1371
+
1372
+ :CALL(sqFpEc)
1373
+ $ => A :MLOAD(checkSqrtFpEc_base)
1374
+ C => B :CALL(mulFpEc)
1375
+
1376
+ ; === BLOCK3: 2/22 SM ===
1377
+
1378
+ :CALL(sqFpEc)
1379
+ $ => A :MLOAD(checkSqrtFpEc_base)
1380
+ C => B :CALL(mulFpEc)
1381
+
1382
+ ; === BLOCK3: 3/22 SM ===
1383
+
1384
+ :CALL(sqFpEc)
1385
+ $ => A :MLOAD(checkSqrtFpEc_base)
1386
+ C => B :CALL(mulFpEc)
1387
+
1388
+ ; === BLOCK3: 4/22 SM ===
1389
+
1390
+ :CALL(sqFpEc)
1391
+ $ => A :MLOAD(checkSqrtFpEc_base)
1392
+ C => B :CALL(mulFpEc)
1393
+
1394
+ ; === BLOCK3: 5/22 SM ===
1395
+
1396
+ :CALL(sqFpEc)
1397
+ $ => A :MLOAD(checkSqrtFpEc_base)
1398
+ C => B :CALL(mulFpEc)
1399
+
1400
+ ; === BLOCK3: 6/22 SM ===
1401
+
1402
+ :CALL(sqFpEc)
1403
+ $ => A :MLOAD(checkSqrtFpEc_base)
1404
+ C => B :CALL(mulFpEc)
1405
+
1406
+ ; === BLOCK3: 7/22 SM ===
1407
+
1408
+ :CALL(sqFpEc)
1409
+ $ => A :MLOAD(checkSqrtFpEc_base)
1410
+ C => B :CALL(mulFpEc)
1411
+
1412
+ ; === BLOCK3: 8/22 SM ===
1413
+
1414
+ :CALL(sqFpEc)
1415
+ $ => A :MLOAD(checkSqrtFpEc_base)
1416
+ C => B :CALL(mulFpEc)
1417
+
1418
+ ; === BLOCK3: 9/22 SM ===
1419
+
1420
+ :CALL(sqFpEc)
1421
+ $ => A :MLOAD(checkSqrtFpEc_base)
1422
+ C => B :CALL(mulFpEc)
1423
+
1424
+ ; === BLOCK3: 10/22 SM ===
1425
+
1426
+ :CALL(sqFpEc)
1427
+ $ => A :MLOAD(checkSqrtFpEc_base)
1428
+ C => B :CALL(mulFpEc)
1429
+
1430
+ ; === BLOCK3: 11/22 SM ===
1431
+
1432
+ :CALL(sqFpEc)
1433
+ $ => A :MLOAD(checkSqrtFpEc_base)
1434
+ C => B :CALL(mulFpEc)
1435
+
1436
+ ; === BLOCK3: 12/22 SM ===
1437
+
1438
+ :CALL(sqFpEc)
1439
+ $ => A :MLOAD(checkSqrtFpEc_base)
1440
+ C => B :CALL(mulFpEc)
1441
+
1442
+ ; === BLOCK3: 13/22 SM ===
1443
+
1444
+ :CALL(sqFpEc)
1445
+ $ => A :MLOAD(checkSqrtFpEc_base)
1446
+ C => B :CALL(mulFpEc)
1447
+
1448
+ ; === BLOCK3: 14/22 SM ===
1449
+
1450
+ :CALL(sqFpEc)
1451
+ $ => A :MLOAD(checkSqrtFpEc_base)
1452
+ C => B :CALL(mulFpEc)
1453
+
1454
+ ; === BLOCK3: 15/22 SM ===
1455
+
1456
+ :CALL(sqFpEc)
1457
+ $ => A :MLOAD(checkSqrtFpEc_base)
1458
+ C => B :CALL(mulFpEc)
1459
+
1460
+ ; === BLOCK3: 16/22 SM ===
1461
+
1462
+ :CALL(sqFpEc)
1463
+ $ => A :MLOAD(checkSqrtFpEc_base)
1464
+ C => B :CALL(mulFpEc)
1465
+
1466
+ ; === BLOCK3: 17/22 SM ===
1467
+
1468
+ :CALL(sqFpEc)
1469
+ $ => A :MLOAD(checkSqrtFpEc_base)
1470
+ C => B :CALL(mulFpEc)
1471
+
1472
+ ; === BLOCK3: 18/22 SM ===
1473
+
1474
+ :CALL(sqFpEc)
1475
+ $ => A :MLOAD(checkSqrtFpEc_base)
1476
+ C => B :CALL(mulFpEc)
1477
+
1478
+ ; === BLOCK3: 19/22 SM ===
1479
+
1480
+ :CALL(sqFpEc)
1481
+ $ => A :MLOAD(checkSqrtFpEc_base)
1482
+ C => B :CALL(mulFpEc)
1483
+
1484
+ ; === BLOCK3: 20/22 SM ===
1485
+
1486
+ :CALL(sqFpEc)
1487
+ $ => A :MLOAD(checkSqrtFpEc_base)
1488
+ C => B :CALL(mulFpEc)
1489
+
1490
+ ; === BLOCK3: 21/22 SM ===
1491
+
1492
+ :CALL(sqFpEc)
1493
+ $ => A :MLOAD(checkSqrtFpEc_base)
1494
+ C => B :CALL(mulFpEc)
1495
+
1496
+ ; === BLOCK3: 22/22 SM ===
1497
+
1498
+ :CALL(sqFpEc)
1499
+ $ => A :MLOAD(checkSqrtFpEc_base)
1500
+ C => B :CALL(mulFpEc)
1501
+
1502
+
1503
+ ; === BLOCK4: 1/4 S ===
1504
+
1505
+ :CALL(sqFpEc)
1506
+
1507
+ ; === BLOCK4: 2/4 S ===
1508
+
1509
+ :CALL(sqFpEc)
1510
+
1511
+ ; === BLOCK4: 3/4 S ===
1512
+
1513
+ :CALL(sqFpEc)
1514
+
1515
+ ; === BLOCK4: 4/4 S ===
1516
+
1517
+ :CALL(sqFpEc)
1518
+
1519
+
1520
+ ; === BLOCK5: 1/1 SM ===
1521
+
1522
+ :CALL(sqFpEc)
1523
+ $ => A :MLOAD(checkSqrtFpEc_base)
1524
+ C => B :CALL(mulFpEc)
1525
+
1526
+
1527
+ ; === BLOCK6: 1 SM ===
1528
+
1529
+ :CALL(sqFpEc)
1530
+
1531
+ ; === BLOCK7: 1/3 SM ===
1532
+
1533
+ :CALL(sqFpEc)
1534
+ $ => A :MLOAD(checkSqrtFpEc_base)
1535
+ C => B :CALL(mulFpEc)
1536
+
1537
+ ; === BLOCK7: 2/3 SM ===
1538
+
1539
+ :CALL(sqFpEc)
1540
+ $ => A :MLOAD(checkSqrtFpEc_base)
1541
+ C => B :CALL(mulFpEc)
1542
+
1543
+ ; === BLOCK7: 3/3 SM ===
1544
+
1545
+ :CALL(sqFpEc)
1546
+ $ => A :MLOAD(checkSqrtFpEc_base)
1547
+ C => B :CALL(mulFpEc)
1548
+
1549
+
1550
+ ; FPEC_MINUS_ONE hasn't alias of 256 bits
1551
+ C => B
1552
+ %FPEC_MINUS_ONE => A
1553
+ $ => RR :MLOAD(checkSqrtFpEc_RR)
1554
+
1555
+ ; A = 1 ==> C = -1 ==> hasn't root
1556
+ ; A = 0 ==> C != -1 ==> has root or MAP, proof fails.
1557
+
1558
+ $ => A :EQ,RETURN