@zkasm/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 @zkasm/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,2095 @@
1
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ ;; POST: The result is in the range [0,BN254_P) because if falls back to FP12 arithmetic
3
+ ;;
4
+ ;; finalExpBN254:
5
+ ;; input: f ∈ Fp12
6
+ ;; output: f^((p¹²-1)/r)
7
+ ;;
8
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9
+
10
+ VAR GLOBAL finalExpBN254_f11_x
11
+ VAR GLOBAL finalExpBN254_f11_y
12
+ VAR GLOBAL finalExpBN254_f12_x
13
+ VAR GLOBAL finalExpBN254_f12_y
14
+ VAR GLOBAL finalExpBN254_f13_x
15
+ VAR GLOBAL finalExpBN254_f13_y
16
+ VAR GLOBAL finalExpBN254_f21_x
17
+ VAR GLOBAL finalExpBN254_f21_y
18
+ VAR GLOBAL finalExpBN254_f22_x
19
+ VAR GLOBAL finalExpBN254_f22_y
20
+ VAR GLOBAL finalExpBN254_f23_x
21
+ VAR GLOBAL finalExpBN254_f23_y
22
+
23
+ VAR GLOBAL finalExpBN254_mx11_x
24
+ VAR GLOBAL finalExpBN254_mx11_y
25
+ VAR GLOBAL finalExpBN254_mx12_x
26
+ VAR GLOBAL finalExpBN254_mx12_y
27
+ VAR GLOBAL finalExpBN254_mx13_x
28
+ VAR GLOBAL finalExpBN254_mx13_y
29
+ VAR GLOBAL finalExpBN254_mx21_x
30
+ VAR GLOBAL finalExpBN254_mx21_y
31
+ VAR GLOBAL finalExpBN254_mx22_x
32
+ VAR GLOBAL finalExpBN254_mx22_y
33
+ VAR GLOBAL finalExpBN254_mx23_x
34
+ VAR GLOBAL finalExpBN254_mx23_y
35
+ VAR GLOBAL finalExpBN254_mxx11_x
36
+ VAR GLOBAL finalExpBN254_mxx11_y
37
+ VAR GLOBAL finalExpBN254_mxx12_x
38
+ VAR GLOBAL finalExpBN254_mxx12_y
39
+ VAR GLOBAL finalExpBN254_mxx13_x
40
+ VAR GLOBAL finalExpBN254_mxx13_y
41
+ VAR GLOBAL finalExpBN254_mxx21_x
42
+ VAR GLOBAL finalExpBN254_mxx21_y
43
+ VAR GLOBAL finalExpBN254_mxx22_x
44
+ VAR GLOBAL finalExpBN254_mxx22_y
45
+ VAR GLOBAL finalExpBN254_mxx23_x
46
+ VAR GLOBAL finalExpBN254_mxx23_y
47
+ VAR GLOBAL finalExpBN254_mxxx11_x
48
+ VAR GLOBAL finalExpBN254_mxxx11_y
49
+ VAR GLOBAL finalExpBN254_mxxx12_x
50
+ VAR GLOBAL finalExpBN254_mxxx12_y
51
+ VAR GLOBAL finalExpBN254_mxxx13_x
52
+ VAR GLOBAL finalExpBN254_mxxx13_y
53
+ VAR GLOBAL finalExpBN254_mxxx21_x
54
+ VAR GLOBAL finalExpBN254_mxxx21_y
55
+ VAR GLOBAL finalExpBN254_mxxx22_x
56
+ VAR GLOBAL finalExpBN254_mxxx22_y
57
+ VAR GLOBAL finalExpBN254_mxxx23_x
58
+ VAR GLOBAL finalExpBN254_mxxx23_y
59
+ VAR GLOBAL finalExpBN254_mp11_x
60
+ VAR GLOBAL finalExpBN254_mp11_y
61
+ VAR GLOBAL finalExpBN254_mp12_x
62
+ VAR GLOBAL finalExpBN254_mp12_y
63
+ VAR GLOBAL finalExpBN254_mp13_x
64
+ VAR GLOBAL finalExpBN254_mp13_y
65
+ VAR GLOBAL finalExpBN254_mp21_x
66
+ VAR GLOBAL finalExpBN254_mp21_y
67
+ VAR GLOBAL finalExpBN254_mp22_x
68
+ VAR GLOBAL finalExpBN254_mp22_y
69
+ VAR GLOBAL finalExpBN254_mp23_x
70
+ VAR GLOBAL finalExpBN254_mp23_y
71
+ VAR GLOBAL finalExpBN254_mpp11_x
72
+ VAR GLOBAL finalExpBN254_mpp11_y
73
+ VAR GLOBAL finalExpBN254_mpp12_x
74
+ VAR GLOBAL finalExpBN254_mpp12_y
75
+ VAR GLOBAL finalExpBN254_mpp13_x
76
+ VAR GLOBAL finalExpBN254_mpp13_y
77
+ VAR GLOBAL finalExpBN254_mpp21_x
78
+ VAR GLOBAL finalExpBN254_mpp21_y
79
+ VAR GLOBAL finalExpBN254_mpp22_x
80
+ VAR GLOBAL finalExpBN254_mpp22_y
81
+ VAR GLOBAL finalExpBN254_mpp23_x
82
+ VAR GLOBAL finalExpBN254_mpp23_y
83
+ VAR GLOBAL finalExpBN254_mppp11_x
84
+ VAR GLOBAL finalExpBN254_mppp11_y
85
+ VAR GLOBAL finalExpBN254_mppp12_x
86
+ VAR GLOBAL finalExpBN254_mppp12_y
87
+ VAR GLOBAL finalExpBN254_mppp13_x
88
+ VAR GLOBAL finalExpBN254_mppp13_y
89
+ VAR GLOBAL finalExpBN254_mppp21_x
90
+ VAR GLOBAL finalExpBN254_mppp21_y
91
+ VAR GLOBAL finalExpBN254_mppp22_x
92
+ VAR GLOBAL finalExpBN254_mppp22_y
93
+ VAR GLOBAL finalExpBN254_mppp23_x
94
+ VAR GLOBAL finalExpBN254_mppp23_y
95
+ VAR GLOBAL finalExpBN254_mxp11_x
96
+ VAR GLOBAL finalExpBN254_mxp11_y
97
+ VAR GLOBAL finalExpBN254_mxp12_x
98
+ VAR GLOBAL finalExpBN254_mxp12_y
99
+ VAR GLOBAL finalExpBN254_mxp13_x
100
+ VAR GLOBAL finalExpBN254_mxp13_y
101
+ VAR GLOBAL finalExpBN254_mxp21_x
102
+ VAR GLOBAL finalExpBN254_mxp21_y
103
+ VAR GLOBAL finalExpBN254_mxp22_x
104
+ VAR GLOBAL finalExpBN254_mxp22_y
105
+ VAR GLOBAL finalExpBN254_mxp23_x
106
+ VAR GLOBAL finalExpBN254_mxp23_y
107
+ VAR GLOBAL finalExpBN254_mxxp11_x
108
+ VAR GLOBAL finalExpBN254_mxxp11_y
109
+ VAR GLOBAL finalExpBN254_mxxp12_x
110
+ VAR GLOBAL finalExpBN254_mxxp12_y
111
+ VAR GLOBAL finalExpBN254_mxxp13_x
112
+ VAR GLOBAL finalExpBN254_mxxp13_y
113
+ VAR GLOBAL finalExpBN254_mxxp21_x
114
+ VAR GLOBAL finalExpBN254_mxxp21_y
115
+ VAR GLOBAL finalExpBN254_mxxp22_x
116
+ VAR GLOBAL finalExpBN254_mxxp22_y
117
+ VAR GLOBAL finalExpBN254_mxxp23_x
118
+ VAR GLOBAL finalExpBN254_mxxp23_y
119
+ VAR GLOBAL finalExpBN254_mxxxp11_x
120
+ VAR GLOBAL finalExpBN254_mxxxp11_y
121
+ VAR GLOBAL finalExpBN254_mxxxp12_x
122
+ VAR GLOBAL finalExpBN254_mxxxp12_y
123
+ VAR GLOBAL finalExpBN254_mxxxp13_x
124
+ VAR GLOBAL finalExpBN254_mxxxp13_y
125
+ VAR GLOBAL finalExpBN254_mxxxp21_x
126
+ VAR GLOBAL finalExpBN254_mxxxp21_y
127
+ VAR GLOBAL finalExpBN254_mxxxp22_x
128
+ VAR GLOBAL finalExpBN254_mxxxp22_y
129
+ VAR GLOBAL finalExpBN254_mxxxp23_x
130
+ VAR GLOBAL finalExpBN254_mxxxp23_y
131
+ VAR GLOBAL finalExpBN254_mxxpp11_x
132
+ VAR GLOBAL finalExpBN254_mxxpp11_y
133
+ VAR GLOBAL finalExpBN254_mxxpp12_x
134
+ VAR GLOBAL finalExpBN254_mxxpp12_y
135
+ VAR GLOBAL finalExpBN254_mxxpp13_x
136
+ VAR GLOBAL finalExpBN254_mxxpp13_y
137
+ VAR GLOBAL finalExpBN254_mxxpp21_x
138
+ VAR GLOBAL finalExpBN254_mxxpp21_y
139
+ VAR GLOBAL finalExpBN254_mxxpp22_x
140
+ VAR GLOBAL finalExpBN254_mxxpp22_y
141
+ VAR GLOBAL finalExpBN254_mxxpp23_x
142
+ VAR GLOBAL finalExpBN254_mxxpp23_y
143
+
144
+ VAR GLOBAL finalExpBN254_y1_11_x
145
+ VAR GLOBAL finalExpBN254_y1_11_y
146
+ VAR GLOBAL finalExpBN254_y1_12_x
147
+ VAR GLOBAL finalExpBN254_y1_12_y
148
+ VAR GLOBAL finalExpBN254_y1_13_x
149
+ VAR GLOBAL finalExpBN254_y1_13_y
150
+ VAR GLOBAL finalExpBN254_y1_21_x
151
+ VAR GLOBAL finalExpBN254_y1_21_y
152
+ VAR GLOBAL finalExpBN254_y1_22_x
153
+ VAR GLOBAL finalExpBN254_y1_22_y
154
+ VAR GLOBAL finalExpBN254_y1_23_x
155
+ VAR GLOBAL finalExpBN254_y1_23_y
156
+ VAR GLOBAL finalExpBN254_y2_11_x
157
+ VAR GLOBAL finalExpBN254_y2_11_y
158
+ VAR GLOBAL finalExpBN254_y2_12_x
159
+ VAR GLOBAL finalExpBN254_y2_12_y
160
+ VAR GLOBAL finalExpBN254_y2_13_x
161
+ VAR GLOBAL finalExpBN254_y2_13_y
162
+ VAR GLOBAL finalExpBN254_y2_21_x
163
+ VAR GLOBAL finalExpBN254_y2_21_y
164
+ VAR GLOBAL finalExpBN254_y2_22_x
165
+ VAR GLOBAL finalExpBN254_y2_22_y
166
+ VAR GLOBAL finalExpBN254_y2_23_x
167
+ VAR GLOBAL finalExpBN254_y2_23_y
168
+
169
+ VAR GLOBAL finalExpBN254_y4_11_x
170
+ VAR GLOBAL finalExpBN254_y4_11_y
171
+ VAR GLOBAL finalExpBN254_y4_12_x
172
+ VAR GLOBAL finalExpBN254_y4_12_y
173
+ VAR GLOBAL finalExpBN254_y4_13_x
174
+ VAR GLOBAL finalExpBN254_y4_13_y
175
+ VAR GLOBAL finalExpBN254_y4_21_x
176
+ VAR GLOBAL finalExpBN254_y4_21_y
177
+ VAR GLOBAL finalExpBN254_y4_22_x
178
+ VAR GLOBAL finalExpBN254_y4_22_y
179
+ VAR GLOBAL finalExpBN254_y4_23_x
180
+ VAR GLOBAL finalExpBN254_y4_23_y
181
+ VAR GLOBAL finalExpBN254_y5_11_x
182
+ VAR GLOBAL finalExpBN254_y5_11_y
183
+ VAR GLOBAL finalExpBN254_y5_12_x
184
+ VAR GLOBAL finalExpBN254_y5_12_y
185
+ VAR GLOBAL finalExpBN254_y5_13_x
186
+ VAR GLOBAL finalExpBN254_y5_13_y
187
+ VAR GLOBAL finalExpBN254_y5_21_x
188
+ VAR GLOBAL finalExpBN254_y5_21_y
189
+ VAR GLOBAL finalExpBN254_y5_22_x
190
+ VAR GLOBAL finalExpBN254_y5_22_y
191
+ VAR GLOBAL finalExpBN254_y5_23_x
192
+ VAR GLOBAL finalExpBN254_y5_23_y
193
+ VAR GLOBAL finalExpBN254_y6_11_x
194
+ VAR GLOBAL finalExpBN254_y6_11_y
195
+ VAR GLOBAL finalExpBN254_y6_12_x
196
+ VAR GLOBAL finalExpBN254_y6_12_y
197
+ VAR GLOBAL finalExpBN254_y6_13_x
198
+ VAR GLOBAL finalExpBN254_y6_13_y
199
+ VAR GLOBAL finalExpBN254_y6_21_x
200
+ VAR GLOBAL finalExpBN254_y6_21_y
201
+ VAR GLOBAL finalExpBN254_y6_22_x
202
+ VAR GLOBAL finalExpBN254_y6_22_y
203
+ VAR GLOBAL finalExpBN254_y6_23_x
204
+ VAR GLOBAL finalExpBN254_y6_23_y
205
+ VAR GLOBAL finalExpBN254_y7_11_x
206
+ VAR GLOBAL finalExpBN254_y7_11_y
207
+ VAR GLOBAL finalExpBN254_y7_12_x
208
+ VAR GLOBAL finalExpBN254_y7_12_y
209
+ VAR GLOBAL finalExpBN254_y7_13_x
210
+ VAR GLOBAL finalExpBN254_y7_13_y
211
+ VAR GLOBAL finalExpBN254_y7_21_x
212
+ VAR GLOBAL finalExpBN254_y7_21_y
213
+ VAR GLOBAL finalExpBN254_y7_22_x
214
+ VAR GLOBAL finalExpBN254_y7_22_y
215
+ VAR GLOBAL finalExpBN254_y7_23_x
216
+ VAR GLOBAL finalExpBN254_y7_23_y
217
+
218
+ VAR GLOBAL finalExpBN254_T11_11_x
219
+ VAR GLOBAL finalExpBN254_T11_11_y
220
+ VAR GLOBAL finalExpBN254_T11_12_x
221
+ VAR GLOBAL finalExpBN254_T11_12_y
222
+ VAR GLOBAL finalExpBN254_T11_13_x
223
+ VAR GLOBAL finalExpBN254_T11_13_y
224
+ VAR GLOBAL finalExpBN254_T11_21_x
225
+ VAR GLOBAL finalExpBN254_T11_21_y
226
+ VAR GLOBAL finalExpBN254_T11_22_x
227
+ VAR GLOBAL finalExpBN254_T11_22_y
228
+ VAR GLOBAL finalExpBN254_T11_23_x
229
+ VAR GLOBAL finalExpBN254_T11_23_y
230
+ VAR GLOBAL finalExpBN254_T21_11_x
231
+ VAR GLOBAL finalExpBN254_T21_11_y
232
+ VAR GLOBAL finalExpBN254_T21_12_x
233
+ VAR GLOBAL finalExpBN254_T21_12_y
234
+ VAR GLOBAL finalExpBN254_T21_13_x
235
+ VAR GLOBAL finalExpBN254_T21_13_y
236
+ VAR GLOBAL finalExpBN254_T21_21_x
237
+ VAR GLOBAL finalExpBN254_T21_21_y
238
+ VAR GLOBAL finalExpBN254_T21_22_x
239
+ VAR GLOBAL finalExpBN254_T21_22_y
240
+ VAR GLOBAL finalExpBN254_T21_23_x
241
+ VAR GLOBAL finalExpBN254_T21_23_y
242
+ VAR GLOBAL finalExpBN254_T12_11_x
243
+ VAR GLOBAL finalExpBN254_T12_11_y
244
+ VAR GLOBAL finalExpBN254_T12_12_x
245
+ VAR GLOBAL finalExpBN254_T12_12_y
246
+ VAR GLOBAL finalExpBN254_T12_13_x
247
+ VAR GLOBAL finalExpBN254_T12_13_y
248
+ VAR GLOBAL finalExpBN254_T12_21_x
249
+ VAR GLOBAL finalExpBN254_T12_21_y
250
+ VAR GLOBAL finalExpBN254_T12_22_x
251
+ VAR GLOBAL finalExpBN254_T12_22_y
252
+ VAR GLOBAL finalExpBN254_T12_23_x
253
+ VAR GLOBAL finalExpBN254_T12_23_y
254
+ VAR GLOBAL finalExpBN254_T23_11_x
255
+ VAR GLOBAL finalExpBN254_T23_11_y
256
+ VAR GLOBAL finalExpBN254_T23_12_x
257
+ VAR GLOBAL finalExpBN254_T23_12_y
258
+ VAR GLOBAL finalExpBN254_T23_13_x
259
+ VAR GLOBAL finalExpBN254_T23_13_y
260
+ VAR GLOBAL finalExpBN254_T23_21_x
261
+ VAR GLOBAL finalExpBN254_T23_21_y
262
+ VAR GLOBAL finalExpBN254_T23_22_x
263
+ VAR GLOBAL finalExpBN254_T23_22_y
264
+ VAR GLOBAL finalExpBN254_T23_23_x
265
+ VAR GLOBAL finalExpBN254_T23_23_y
266
+ VAR GLOBAL finalExpBN254_T24_11_x
267
+ VAR GLOBAL finalExpBN254_T24_11_y
268
+ VAR GLOBAL finalExpBN254_T24_12_x
269
+ VAR GLOBAL finalExpBN254_T24_12_y
270
+ VAR GLOBAL finalExpBN254_T24_13_x
271
+ VAR GLOBAL finalExpBN254_T24_13_y
272
+ VAR GLOBAL finalExpBN254_T24_21_x
273
+ VAR GLOBAL finalExpBN254_T24_21_y
274
+ VAR GLOBAL finalExpBN254_T24_22_x
275
+ VAR GLOBAL finalExpBN254_T24_22_y
276
+ VAR GLOBAL finalExpBN254_T24_23_x
277
+ VAR GLOBAL finalExpBN254_T24_23_y
278
+
279
+ VAR GLOBAL finalExpBN254_RR
280
+
281
+ finalExpBN254:
282
+ RR :MSTORE(finalExpBN254_RR)
283
+
284
+ ; The easy part:
285
+ ; ===========================================
286
+ ; 1] f^(p⁶-1) = f̅·f⁻¹
287
+ $ => A :MLOAD(finalExpBN254_f11_x)
288
+ $ => B :MLOAD(finalExpBN254_f11_y)
289
+ A :MSTORE(inverseFp12BN254_a11_x)
290
+ B :MSTORE(inverseFp12BN254_a11_y)
291
+ $ => A :MLOAD(finalExpBN254_f12_x)
292
+ $ => B :MLOAD(finalExpBN254_f12_y)
293
+ A :MSTORE(inverseFp12BN254_a12_x)
294
+ B :MSTORE(inverseFp12BN254_a12_y)
295
+ $ => A :MLOAD(finalExpBN254_f13_x)
296
+ $ => B :MLOAD(finalExpBN254_f13_y)
297
+ A :MSTORE(inverseFp12BN254_a13_x)
298
+ B :MSTORE(inverseFp12BN254_a13_y)
299
+ $ => A :MLOAD(finalExpBN254_f21_x)
300
+ $ => B :MLOAD(finalExpBN254_f21_y)
301
+ A :MSTORE(inverseFp12BN254_a21_x)
302
+ B :MSTORE(inverseFp12BN254_a21_y)
303
+ $ => A :MLOAD(finalExpBN254_f22_x)
304
+ $ => B :MLOAD(finalExpBN254_f22_y)
305
+ A :MSTORE(inverseFp12BN254_a22_x)
306
+ B :MSTORE(inverseFp12BN254_a22_y)
307
+ $ => A :MLOAD(finalExpBN254_f23_x)
308
+ $ => B :MLOAD(finalExpBN254_f23_y)
309
+ A :MSTORE(inverseFp12BN254_a23_x)
310
+ B :MSTORE(inverseFp12BN254_a23_y), CALL(inverseFp12BN254)
311
+
312
+ $ => A :MLOAD(inverseFp12BN254_c11_x)
313
+ $ => B :MLOAD(inverseFp12BN254_c11_y)
314
+ A :MSTORE(mulFp12BN254_b11_x)
315
+ B :MSTORE(mulFp12BN254_b11_y)
316
+ $ => A :MLOAD(inverseFp12BN254_c12_x)
317
+ $ => B :MLOAD(inverseFp12BN254_c12_y)
318
+ A :MSTORE(mulFp12BN254_b12_x)
319
+ B :MSTORE(mulFp12BN254_b12_y)
320
+ $ => A :MLOAD(inverseFp12BN254_c13_x)
321
+ $ => B :MLOAD(inverseFp12BN254_c13_y)
322
+ A :MSTORE(mulFp12BN254_b13_x)
323
+ B :MSTORE(mulFp12BN254_b13_y)
324
+ $ => A :MLOAD(inverseFp12BN254_c21_x)
325
+ $ => B :MLOAD(inverseFp12BN254_c21_y)
326
+ A :MSTORE(mulFp12BN254_b21_x)
327
+ B :MSTORE(mulFp12BN254_b21_y)
328
+ $ => A :MLOAD(inverseFp12BN254_c22_x)
329
+ $ => B :MLOAD(inverseFp12BN254_c22_y)
330
+ A :MSTORE(mulFp12BN254_b22_x)
331
+ B :MSTORE(mulFp12BN254_b22_y)
332
+ $ => A :MLOAD(inverseFp12BN254_c23_x)
333
+ $ => B :MLOAD(inverseFp12BN254_c23_y)
334
+ A :MSTORE(mulFp12BN254_b23_x)
335
+ B :MSTORE(mulFp12BN254_b23_y)
336
+ $ => A :MLOAD(finalExpBN254_f11_x)
337
+ $ => B :MLOAD(finalExpBN254_f11_y)
338
+ A :MSTORE(mulFp12BN254_a11_x)
339
+ B :MSTORE(mulFp12BN254_a11_y)
340
+ $ => A :MLOAD(finalExpBN254_f12_x)
341
+ $ => B :MLOAD(finalExpBN254_f12_y)
342
+ A :MSTORE(mulFp12BN254_a12_x)
343
+ B :MSTORE(mulFp12BN254_a12_y)
344
+ $ => A :MLOAD(finalExpBN254_f13_x)
345
+ $ => B :MLOAD(finalExpBN254_f13_y)
346
+ A :MSTORE(mulFp12BN254_a13_x)
347
+ B :MSTORE(mulFp12BN254_a13_y)
348
+
349
+ %BN254_P => A
350
+ $ => B :MLOAD(finalExpBN254_f21_x)
351
+ $ :SUB, MSTORE(mulFp12BN254_a21_x)
352
+ %BN254_P => A
353
+ $ => B :MLOAD(finalExpBN254_f21_y)
354
+ $ :SUB, MSTORE(mulFp12BN254_a21_y)
355
+ %BN254_P => A
356
+ $ => B :MLOAD(finalExpBN254_f22_x)
357
+ $ :SUB, MSTORE(mulFp12BN254_a22_x)
358
+ %BN254_P => A
359
+ $ => B :MLOAD(finalExpBN254_f22_y)
360
+ $ :SUB, MSTORE(mulFp12BN254_a22_y)
361
+ %BN254_P => A
362
+ $ => B :MLOAD(finalExpBN254_f23_x)
363
+ $ :SUB, MSTORE(mulFp12BN254_a23_x)
364
+ %BN254_P => A
365
+ $ => B :MLOAD(finalExpBN254_f23_y)
366
+ $ :SUB, MSTORE(mulFp12BN254_a23_y), CALL(mulFp12BN254)
367
+
368
+ $ => A :MLOAD(mulFp12BN254_c11_x)
369
+ $ => B :MLOAD(mulFp12BN254_c11_y)
370
+ A :MSTORE(finalExpBN254_f11_x)
371
+ B :MSTORE(finalExpBN254_f11_y)
372
+ $ => A :MLOAD(mulFp12BN254_c12_x)
373
+ $ => B :MLOAD(mulFp12BN254_c12_y)
374
+ A :MSTORE(finalExpBN254_f12_x)
375
+ B :MSTORE(finalExpBN254_f12_y)
376
+ $ => A :MLOAD(mulFp12BN254_c13_x)
377
+ $ => B :MLOAD(mulFp12BN254_c13_y)
378
+ A :MSTORE(finalExpBN254_f13_x)
379
+ B :MSTORE(finalExpBN254_f13_y)
380
+ $ => A :MLOAD(mulFp12BN254_c21_x)
381
+ $ => B :MLOAD(mulFp12BN254_c21_y)
382
+ A :MSTORE(finalExpBN254_f21_x)
383
+ B :MSTORE(finalExpBN254_f21_y)
384
+ $ => A :MLOAD(mulFp12BN254_c22_x)
385
+ $ => B :MLOAD(mulFp12BN254_c22_y)
386
+ A :MSTORE(finalExpBN254_f22_x)
387
+ B :MSTORE(finalExpBN254_f22_y)
388
+ $ => A :MLOAD(mulFp12BN254_c23_x)
389
+ $ => B :MLOAD(mulFp12BN254_c23_y)
390
+ A :MSTORE(finalExpBN254_f23_x)
391
+ B :MSTORE(finalExpBN254_f23_y)
392
+
393
+ ; 2] f^(p⁶-1)(p²-1) = (f^(p⁶-1))^p²·f^(p⁶-1)
394
+ $ => A :MLOAD(finalExpBN254_f11_x)
395
+ $ => B :MLOAD(finalExpBN254_f11_y)
396
+ A :MSTORE(frob2Fp12BN254_a11_x)
397
+ B :MSTORE(frob2Fp12BN254_a11_y)
398
+ $ => A :MLOAD(finalExpBN254_f12_x)
399
+ $ => B :MLOAD(finalExpBN254_f12_y)
400
+ A :MSTORE(frob2Fp12BN254_a12_x)
401
+ B :MSTORE(frob2Fp12BN254_a12_y)
402
+ $ => A :MLOAD(finalExpBN254_f13_x)
403
+ $ => B :MLOAD(finalExpBN254_f13_y)
404
+ A :MSTORE(frob2Fp12BN254_a13_x)
405
+ B :MSTORE(frob2Fp12BN254_a13_y)
406
+ $ => A :MLOAD(finalExpBN254_f21_x)
407
+ $ => B :MLOAD(finalExpBN254_f21_y)
408
+ A :MSTORE(frob2Fp12BN254_a21_x)
409
+ B :MSTORE(frob2Fp12BN254_a21_y)
410
+ $ => A :MLOAD(finalExpBN254_f22_x)
411
+ $ => B :MLOAD(finalExpBN254_f22_y)
412
+ A :MSTORE(frob2Fp12BN254_a22_x)
413
+ B :MSTORE(frob2Fp12BN254_a22_y)
414
+ $ => A :MLOAD(finalExpBN254_f23_x)
415
+ $ => B :MLOAD(finalExpBN254_f23_y)
416
+ A :MSTORE(frob2Fp12BN254_a23_x)
417
+ B :MSTORE(frob2Fp12BN254_a23_y), CALL(frob2Fp12BN254)
418
+
419
+ $ => A :MLOAD(frob2Fp12BN254_c11_x)
420
+ $ => B :MLOAD(frob2Fp12BN254_c11_y)
421
+ A :MSTORE(mulFp12BN254_a11_x)
422
+ B :MSTORE(mulFp12BN254_a11_y)
423
+ $ => A :MLOAD(frob2Fp12BN254_c12_x)
424
+ $ => B :MLOAD(frob2Fp12BN254_c12_y)
425
+ A :MSTORE(mulFp12BN254_a12_x)
426
+ B :MSTORE(mulFp12BN254_a12_y)
427
+ $ => A :MLOAD(frob2Fp12BN254_c13_x)
428
+ $ => B :MLOAD(frob2Fp12BN254_c13_y)
429
+ A :MSTORE(mulFp12BN254_a13_x)
430
+ B :MSTORE(mulFp12BN254_a13_y)
431
+ $ => A :MLOAD(frob2Fp12BN254_c21_x)
432
+ $ => B :MLOAD(frob2Fp12BN254_c21_y)
433
+ A :MSTORE(mulFp12BN254_a21_x)
434
+ B :MSTORE(mulFp12BN254_a21_y)
435
+ $ => A :MLOAD(frob2Fp12BN254_c22_x)
436
+ $ => B :MLOAD(frob2Fp12BN254_c22_y)
437
+ A :MSTORE(mulFp12BN254_a22_x)
438
+ B :MSTORE(mulFp12BN254_a22_y)
439
+ $ => A :MLOAD(frob2Fp12BN254_c23_x)
440
+ $ => B :MLOAD(frob2Fp12BN254_c23_y)
441
+ A :MSTORE(mulFp12BN254_a23_x)
442
+ B :MSTORE(mulFp12BN254_a23_y)
443
+ $ => A :MLOAD(finalExpBN254_f11_x)
444
+ $ => B :MLOAD(finalExpBN254_f11_y)
445
+ A :MSTORE(mulFp12BN254_b11_x)
446
+ B :MSTORE(mulFp12BN254_b11_y)
447
+ $ => A :MLOAD(finalExpBN254_f12_x)
448
+ $ => B :MLOAD(finalExpBN254_f12_y)
449
+ A :MSTORE(mulFp12BN254_b12_x)
450
+ B :MSTORE(mulFp12BN254_b12_y)
451
+ $ => A :MLOAD(finalExpBN254_f13_x)
452
+ $ => B :MLOAD(finalExpBN254_f13_y)
453
+ A :MSTORE(mulFp12BN254_b13_x)
454
+ B :MSTORE(mulFp12BN254_b13_y)
455
+ $ => A :MLOAD(finalExpBN254_f21_x)
456
+ $ => B :MLOAD(finalExpBN254_f21_y)
457
+ A :MSTORE(mulFp12BN254_b21_x)
458
+ B :MSTORE(mulFp12BN254_b21_y)
459
+ $ => A :MLOAD(finalExpBN254_f22_x)
460
+ $ => B :MLOAD(finalExpBN254_f22_y)
461
+ A :MSTORE(mulFp12BN254_b22_x)
462
+ B :MSTORE(mulFp12BN254_b22_y)
463
+ $ => A :MLOAD(finalExpBN254_f23_x)
464
+ $ => B :MLOAD(finalExpBN254_f23_y)
465
+ A :MSTORE(mulFp12BN254_b23_x)
466
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
467
+
468
+ $ => A :MLOAD(mulFp12BN254_c11_x)
469
+ $ => B :MLOAD(mulFp12BN254_c11_y)
470
+ A :MSTORE(finalExpBN254_f11_x)
471
+ B :MSTORE(finalExpBN254_f11_y)
472
+ $ => A :MLOAD(mulFp12BN254_c12_x)
473
+ $ => B :MLOAD(mulFp12BN254_c12_y)
474
+ A :MSTORE(finalExpBN254_f12_x)
475
+ B :MSTORE(finalExpBN254_f12_y)
476
+ $ => A :MLOAD(mulFp12BN254_c13_x)
477
+ $ => B :MLOAD(mulFp12BN254_c13_y)
478
+ A :MSTORE(finalExpBN254_f13_x)
479
+ B :MSTORE(finalExpBN254_f13_y)
480
+ $ => A :MLOAD(mulFp12BN254_c21_x)
481
+ $ => B :MLOAD(mulFp12BN254_c21_y)
482
+ A :MSTORE(finalExpBN254_f21_x)
483
+ B :MSTORE(finalExpBN254_f21_y)
484
+ $ => A :MLOAD(mulFp12BN254_c22_x)
485
+ $ => B :MLOAD(mulFp12BN254_c22_y)
486
+ A :MSTORE(finalExpBN254_f22_x)
487
+ B :MSTORE(finalExpBN254_f22_y)
488
+ $ => A :MLOAD(mulFp12BN254_c23_x)
489
+ $ => B :MLOAD(mulFp12BN254_c23_y)
490
+ A :MSTORE(finalExpBN254_f23_x)
491
+ B :MSTORE(finalExpBN254_f23_y)
492
+ ; ===========================================
493
+
494
+ ; The hard part:
495
+ ; ===========================================
496
+ ; 1] m^x, (m^x)^x, (m^{x²})^x
497
+ $ => A :MLOAD(finalExpBN254_f11_x)
498
+ $ => B :MLOAD(finalExpBN254_f11_y)
499
+ A :MSTORE(expByXCompCycloFp12BN254_a0_x)
500
+ B :MSTORE(expByXCompCycloFp12BN254_a0_y)
501
+ $ => A :MLOAD(finalExpBN254_f12_x)
502
+ $ => B :MLOAD(finalExpBN254_f12_y)
503
+ A :MSTORE(expByXCompCycloFp12BN254_a4_x)
504
+ B :MSTORE(expByXCompCycloFp12BN254_a4_y)
505
+ $ => A :MLOAD(finalExpBN254_f13_x)
506
+ $ => B :MLOAD(finalExpBN254_f13_y)
507
+ A :MSTORE(expByXCompCycloFp12BN254_a3_x)
508
+ B :MSTORE(expByXCompCycloFp12BN254_a3_y)
509
+ $ => A :MLOAD(finalExpBN254_f21_x)
510
+ $ => B :MLOAD(finalExpBN254_f21_y)
511
+ A :MSTORE(expByXCompCycloFp12BN254_a2_x)
512
+ B :MSTORE(expByXCompCycloFp12BN254_a2_y)
513
+ $ => A :MLOAD(finalExpBN254_f22_x)
514
+ $ => B :MLOAD(finalExpBN254_f22_y)
515
+ A :MSTORE(expByXCompCycloFp12BN254_a1_x)
516
+ B :MSTORE(expByXCompCycloFp12BN254_a1_y)
517
+ $ => A :MLOAD(finalExpBN254_f23_x)
518
+ $ => B :MLOAD(finalExpBN254_f23_y)
519
+ A :MSTORE(expByXCompCycloFp12BN254_a5_x)
520
+ B :MSTORE(expByXCompCycloFp12BN254_a5_y), CALL(expByXCompCycloFp12BN254)
521
+
522
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c0_x)
523
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c0_y)
524
+ A :MSTORE(finalExpBN254_mx11_x)
525
+ B :MSTORE(finalExpBN254_mx11_y)
526
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c2_x)
527
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c2_y)
528
+ A :MSTORE(finalExpBN254_mx21_x)
529
+ B :MSTORE(finalExpBN254_mx21_y)
530
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c4_x)
531
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c4_y)
532
+ A :MSTORE(finalExpBN254_mx12_x)
533
+ B :MSTORE(finalExpBN254_mx12_y)
534
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c1_x)
535
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c1_y)
536
+ A :MSTORE(finalExpBN254_mx22_x)
537
+ B :MSTORE(finalExpBN254_mx22_y)
538
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c3_x)
539
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c3_y)
540
+ A :MSTORE(finalExpBN254_mx13_x)
541
+ B :MSTORE(finalExpBN254_mx13_y)
542
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c5_x)
543
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c5_y)
544
+ A :MSTORE(finalExpBN254_mx23_x)
545
+ B :MSTORE(finalExpBN254_mx23_y)
546
+
547
+ $ => A :MLOAD(finalExpBN254_mx11_x)
548
+ $ => B :MLOAD(finalExpBN254_mx11_y)
549
+ A :MSTORE(expByXCompCycloFp12BN254_a0_x)
550
+ B :MSTORE(expByXCompCycloFp12BN254_a0_y)
551
+ $ => A :MLOAD(finalExpBN254_mx12_x)
552
+ $ => B :MLOAD(finalExpBN254_mx12_y)
553
+ A :MSTORE(expByXCompCycloFp12BN254_a4_x)
554
+ B :MSTORE(expByXCompCycloFp12BN254_a4_y)
555
+ $ => A :MLOAD(finalExpBN254_mx13_x)
556
+ $ => B :MLOAD(finalExpBN254_mx13_y)
557
+ A :MSTORE(expByXCompCycloFp12BN254_a3_x)
558
+ B :MSTORE(expByXCompCycloFp12BN254_a3_y)
559
+ $ => A :MLOAD(finalExpBN254_mx21_x)
560
+ $ => B :MLOAD(finalExpBN254_mx21_y)
561
+ A :MSTORE(expByXCompCycloFp12BN254_a2_x)
562
+ B :MSTORE(expByXCompCycloFp12BN254_a2_y)
563
+ $ => A :MLOAD(finalExpBN254_mx22_x)
564
+ $ => B :MLOAD(finalExpBN254_mx22_y)
565
+ A :MSTORE(expByXCompCycloFp12BN254_a1_x)
566
+ B :MSTORE(expByXCompCycloFp12BN254_a1_y)
567
+ $ => A :MLOAD(finalExpBN254_mx23_x)
568
+ $ => B :MLOAD(finalExpBN254_mx23_y)
569
+ A :MSTORE(expByXCompCycloFp12BN254_a5_x)
570
+ B :MSTORE(expByXCompCycloFp12BN254_a5_y), CALL(expByXCompCycloFp12BN254)
571
+
572
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c0_x)
573
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c0_y)
574
+ A :MSTORE(finalExpBN254_mxx11_x)
575
+ B :MSTORE(finalExpBN254_mxx11_y)
576
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c2_x)
577
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c2_y)
578
+ A :MSTORE(finalExpBN254_mxx21_x)
579
+ B :MSTORE(finalExpBN254_mxx21_y)
580
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c4_x)
581
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c4_y)
582
+ A :MSTORE(finalExpBN254_mxx12_x)
583
+ B :MSTORE(finalExpBN254_mxx12_y)
584
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c1_x)
585
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c1_y)
586
+ A :MSTORE(finalExpBN254_mxx22_x)
587
+ B :MSTORE(finalExpBN254_mxx22_y)
588
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c3_x)
589
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c3_y)
590
+ A :MSTORE(finalExpBN254_mxx13_x)
591
+ B :MSTORE(finalExpBN254_mxx13_y)
592
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c5_x)
593
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c5_y)
594
+ A :MSTORE(finalExpBN254_mxx23_x)
595
+ B :MSTORE(finalExpBN254_mxx23_y)
596
+
597
+ $ => A :MLOAD(finalExpBN254_mxx11_x)
598
+ $ => B :MLOAD(finalExpBN254_mxx11_y)
599
+ A :MSTORE(expByXCompCycloFp12BN254_a0_x)
600
+ B :MSTORE(expByXCompCycloFp12BN254_a0_y)
601
+ $ => A :MLOAD(finalExpBN254_mxx12_x)
602
+ $ => B :MLOAD(finalExpBN254_mxx12_y)
603
+ A :MSTORE(expByXCompCycloFp12BN254_a4_x)
604
+ B :MSTORE(expByXCompCycloFp12BN254_a4_y)
605
+ $ => A :MLOAD(finalExpBN254_mxx13_x)
606
+ $ => B :MLOAD(finalExpBN254_mxx13_y)
607
+ A :MSTORE(expByXCompCycloFp12BN254_a3_x)
608
+ B :MSTORE(expByXCompCycloFp12BN254_a3_y)
609
+ $ => A :MLOAD(finalExpBN254_mxx21_x)
610
+ $ => B :MLOAD(finalExpBN254_mxx21_y)
611
+ A :MSTORE(expByXCompCycloFp12BN254_a2_x)
612
+ B :MSTORE(expByXCompCycloFp12BN254_a2_y)
613
+ $ => A :MLOAD(finalExpBN254_mxx22_x)
614
+ $ => B :MLOAD(finalExpBN254_mxx22_y)
615
+ A :MSTORE(expByXCompCycloFp12BN254_a1_x)
616
+ B :MSTORE(expByXCompCycloFp12BN254_a1_y)
617
+ $ => A :MLOAD(finalExpBN254_mxx23_x)
618
+ $ => B :MLOAD(finalExpBN254_mxx23_y)
619
+ A :MSTORE(expByXCompCycloFp12BN254_a5_x)
620
+ B :MSTORE(expByXCompCycloFp12BN254_a5_y), CALL(expByXCompCycloFp12BN254)
621
+
622
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c0_x)
623
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c0_y)
624
+ A :MSTORE(finalExpBN254_mxxx11_x)
625
+ B :MSTORE(finalExpBN254_mxxx11_y)
626
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c2_x)
627
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c2_y)
628
+ A :MSTORE(finalExpBN254_mxxx21_x)
629
+ B :MSTORE(finalExpBN254_mxxx21_y)
630
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c4_x)
631
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c4_y)
632
+ A :MSTORE(finalExpBN254_mxxx12_x)
633
+ B :MSTORE(finalExpBN254_mxxx12_y)
634
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c1_x)
635
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c1_y)
636
+ A :MSTORE(finalExpBN254_mxxx22_x)
637
+ B :MSTORE(finalExpBN254_mxxx22_y)
638
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c3_x)
639
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c3_y)
640
+ A :MSTORE(finalExpBN254_mxxx13_x)
641
+ B :MSTORE(finalExpBN254_mxxx13_y)
642
+ $ => A :MLOAD(expByXCompCycloFp12BN254_c5_x)
643
+ $ => B :MLOAD(expByXCompCycloFp12BN254_c5_y)
644
+ A :MSTORE(finalExpBN254_mxxx23_x)
645
+ B :MSTORE(finalExpBN254_mxxx23_y)
646
+
647
+ ; 2] m^p, m^p², m^p³, (m^x)^p, (m^x²)^p, (m^x³)^p, (m^x²)^p²
648
+ $ => A :MLOAD(finalExpBN254_f11_x)
649
+ $ => B :MLOAD(finalExpBN254_f11_y)
650
+ A :MSTORE(frobFp12BN254_a11_x)
651
+ B :MSTORE(frobFp12BN254_a11_y)
652
+ $ => A :MLOAD(finalExpBN254_f12_x)
653
+ $ => B :MLOAD(finalExpBN254_f12_y)
654
+ A :MSTORE(frobFp12BN254_a12_x)
655
+ B :MSTORE(frobFp12BN254_a12_y)
656
+ $ => A :MLOAD(finalExpBN254_f13_x)
657
+ $ => B :MLOAD(finalExpBN254_f13_y)
658
+ A :MSTORE(frobFp12BN254_a13_x)
659
+ B :MSTORE(frobFp12BN254_a13_y)
660
+ $ => A :MLOAD(finalExpBN254_f21_x)
661
+ $ => B :MLOAD(finalExpBN254_f21_y)
662
+ A :MSTORE(frobFp12BN254_a21_x)
663
+ B :MSTORE(frobFp12BN254_a21_y)
664
+ $ => A :MLOAD(finalExpBN254_f22_x)
665
+ $ => B :MLOAD(finalExpBN254_f22_y)
666
+ A :MSTORE(frobFp12BN254_a22_x)
667
+ B :MSTORE(frobFp12BN254_a22_y)
668
+ $ => A :MLOAD(finalExpBN254_f23_x)
669
+ $ => B :MLOAD(finalExpBN254_f23_y)
670
+ A :MSTORE(frobFp12BN254_a23_x)
671
+ B :MSTORE(frobFp12BN254_a23_y), CALL(frobFp12BN254)
672
+
673
+ $ => A :MLOAD(frobFp12BN254_c11_x)
674
+ $ => B :MLOAD(frobFp12BN254_c11_y)
675
+ A :MSTORE(finalExpBN254_mp11_x)
676
+ B :MSTORE(finalExpBN254_mp11_y)
677
+ $ => A :MLOAD(frobFp12BN254_c12_x)
678
+ $ => B :MLOAD(frobFp12BN254_c12_y)
679
+ A :MSTORE(finalExpBN254_mp12_x)
680
+ B :MSTORE(finalExpBN254_mp12_y)
681
+ $ => A :MLOAD(frobFp12BN254_c13_x)
682
+ $ => B :MLOAD(frobFp12BN254_c13_y)
683
+ A :MSTORE(finalExpBN254_mp13_x)
684
+ B :MSTORE(finalExpBN254_mp13_y)
685
+ $ => A :MLOAD(frobFp12BN254_c21_x)
686
+ $ => B :MLOAD(frobFp12BN254_c21_y)
687
+ A :MSTORE(finalExpBN254_mp21_x)
688
+ B :MSTORE(finalExpBN254_mp21_y)
689
+ $ => A :MLOAD(frobFp12BN254_c22_x)
690
+ $ => B :MLOAD(frobFp12BN254_c22_y)
691
+ A :MSTORE(finalExpBN254_mp22_x)
692
+ B :MSTORE(finalExpBN254_mp22_y)
693
+ $ => A :MLOAD(frobFp12BN254_c23_x)
694
+ $ => B :MLOAD(frobFp12BN254_c23_y)
695
+ A :MSTORE(finalExpBN254_mp23_x)
696
+ B :MSTORE(finalExpBN254_mp23_y)
697
+
698
+ $ => A :MLOAD(finalExpBN254_f11_x)
699
+ $ => B :MLOAD(finalExpBN254_f11_y)
700
+ A :MSTORE(frob2Fp12BN254_a11_x)
701
+ B :MSTORE(frob2Fp12BN254_a11_y)
702
+ $ => A :MLOAD(finalExpBN254_f12_x)
703
+ $ => B :MLOAD(finalExpBN254_f12_y)
704
+ A :MSTORE(frob2Fp12BN254_a12_x)
705
+ B :MSTORE(frob2Fp12BN254_a12_y)
706
+ $ => A :MLOAD(finalExpBN254_f13_x)
707
+ $ => B :MLOAD(finalExpBN254_f13_y)
708
+ A :MSTORE(frob2Fp12BN254_a13_x)
709
+ B :MSTORE(frob2Fp12BN254_a13_y)
710
+ $ => A :MLOAD(finalExpBN254_f21_x)
711
+ $ => B :MLOAD(finalExpBN254_f21_y)
712
+ A :MSTORE(frob2Fp12BN254_a21_x)
713
+ B :MSTORE(frob2Fp12BN254_a21_y)
714
+ $ => A :MLOAD(finalExpBN254_f22_x)
715
+ $ => B :MLOAD(finalExpBN254_f22_y)
716
+ A :MSTORE(frob2Fp12BN254_a22_x)
717
+ B :MSTORE(frob2Fp12BN254_a22_y)
718
+ $ => A :MLOAD(finalExpBN254_f23_x)
719
+ $ => B :MLOAD(finalExpBN254_f23_y)
720
+ A :MSTORE(frob2Fp12BN254_a23_x)
721
+ B :MSTORE(frob2Fp12BN254_a23_y), CALL(frob2Fp12BN254)
722
+
723
+ $ => A :MLOAD(frob2Fp12BN254_c11_x)
724
+ $ => B :MLOAD(frob2Fp12BN254_c11_y)
725
+ A :MSTORE(finalExpBN254_mpp11_x)
726
+ B :MSTORE(finalExpBN254_mpp11_y)
727
+ $ => A :MLOAD(frob2Fp12BN254_c12_x)
728
+ $ => B :MLOAD(frob2Fp12BN254_c12_y)
729
+ A :MSTORE(finalExpBN254_mpp12_x)
730
+ B :MSTORE(finalExpBN254_mpp12_y)
731
+ $ => A :MLOAD(frob2Fp12BN254_c13_x)
732
+ $ => B :MLOAD(frob2Fp12BN254_c13_y)
733
+ A :MSTORE(finalExpBN254_mpp13_x)
734
+ B :MSTORE(finalExpBN254_mpp13_y)
735
+ $ => A :MLOAD(frob2Fp12BN254_c21_x)
736
+ $ => B :MLOAD(frob2Fp12BN254_c21_y)
737
+ A :MSTORE(finalExpBN254_mpp21_x)
738
+ B :MSTORE(finalExpBN254_mpp21_y)
739
+ $ => A :MLOAD(frob2Fp12BN254_c22_x)
740
+ $ => B :MLOAD(frob2Fp12BN254_c22_y)
741
+ A :MSTORE(finalExpBN254_mpp22_x)
742
+ B :MSTORE(finalExpBN254_mpp22_y)
743
+ $ => A :MLOAD(frob2Fp12BN254_c23_x)
744
+ $ => B :MLOAD(frob2Fp12BN254_c23_y)
745
+ A :MSTORE(finalExpBN254_mpp23_x)
746
+ B :MSTORE(finalExpBN254_mpp23_y)
747
+
748
+ $ => A :MLOAD(finalExpBN254_f11_x)
749
+ $ => B :MLOAD(finalExpBN254_f11_y)
750
+ A :MSTORE(frob3Fp12BN254_a11_x)
751
+ B :MSTORE(frob3Fp12BN254_a11_y)
752
+ $ => A :MLOAD(finalExpBN254_f12_x)
753
+ $ => B :MLOAD(finalExpBN254_f12_y)
754
+ A :MSTORE(frob3Fp12BN254_a12_x)
755
+ B :MSTORE(frob3Fp12BN254_a12_y)
756
+ $ => A :MLOAD(finalExpBN254_f13_x)
757
+ $ => B :MLOAD(finalExpBN254_f13_y)
758
+ A :MSTORE(frob3Fp12BN254_a13_x)
759
+ B :MSTORE(frob3Fp12BN254_a13_y)
760
+ $ => A :MLOAD(finalExpBN254_f21_x)
761
+ $ => B :MLOAD(finalExpBN254_f21_y)
762
+ A :MSTORE(frob3Fp12BN254_a21_x)
763
+ B :MSTORE(frob3Fp12BN254_a21_y)
764
+ $ => A :MLOAD(finalExpBN254_f22_x)
765
+ $ => B :MLOAD(finalExpBN254_f22_y)
766
+ A :MSTORE(frob3Fp12BN254_a22_x)
767
+ B :MSTORE(frob3Fp12BN254_a22_y)
768
+ $ => A :MLOAD(finalExpBN254_f23_x)
769
+ $ => B :MLOAD(finalExpBN254_f23_y)
770
+ A :MSTORE(frob3Fp12BN254_a23_x)
771
+ B :MSTORE(frob3Fp12BN254_a23_y), CALL(frob3Fp12BN254)
772
+
773
+ $ => A :MLOAD(frob3Fp12BN254_c11_x)
774
+ $ => B :MLOAD(frob3Fp12BN254_c11_y)
775
+ A :MSTORE(finalExpBN254_mppp11_x)
776
+ B :MSTORE(finalExpBN254_mppp11_y)
777
+ $ => A :MLOAD(frob3Fp12BN254_c12_x)
778
+ $ => B :MLOAD(frob3Fp12BN254_c12_y)
779
+ A :MSTORE(finalExpBN254_mppp12_x)
780
+ B :MSTORE(finalExpBN254_mppp12_y)
781
+ $ => A :MLOAD(frob3Fp12BN254_c13_x)
782
+ $ => B :MLOAD(frob3Fp12BN254_c13_y)
783
+ A :MSTORE(finalExpBN254_mppp13_x)
784
+ B :MSTORE(finalExpBN254_mppp13_y)
785
+ $ => A :MLOAD(frob3Fp12BN254_c21_x)
786
+ $ => B :MLOAD(frob3Fp12BN254_c21_y)
787
+ A :MSTORE(finalExpBN254_mppp21_x)
788
+ B :MSTORE(finalExpBN254_mppp21_y)
789
+ $ => A :MLOAD(frob3Fp12BN254_c22_x)
790
+ $ => B :MLOAD(frob3Fp12BN254_c22_y)
791
+ A :MSTORE(finalExpBN254_mppp22_x)
792
+ B :MSTORE(finalExpBN254_mppp22_y)
793
+ $ => A :MLOAD(frob3Fp12BN254_c23_x)
794
+ $ => B :MLOAD(frob3Fp12BN254_c23_y)
795
+ A :MSTORE(finalExpBN254_mppp23_x)
796
+ B :MSTORE(finalExpBN254_mppp23_y)
797
+
798
+ $ => A :MLOAD(finalExpBN254_mx11_x)
799
+ $ => B :MLOAD(finalExpBN254_mx11_y)
800
+ A :MSTORE(frobFp12BN254_a11_x)
801
+ B :MSTORE(frobFp12BN254_a11_y)
802
+ $ => A :MLOAD(finalExpBN254_mx12_x)
803
+ $ => B :MLOAD(finalExpBN254_mx12_y)
804
+ A :MSTORE(frobFp12BN254_a12_x)
805
+ B :MSTORE(frobFp12BN254_a12_y)
806
+ $ => A :MLOAD(finalExpBN254_mx13_x)
807
+ $ => B :MLOAD(finalExpBN254_mx13_y)
808
+ A :MSTORE(frobFp12BN254_a13_x)
809
+ B :MSTORE(frobFp12BN254_a13_y)
810
+ $ => A :MLOAD(finalExpBN254_mx21_x)
811
+ $ => B :MLOAD(finalExpBN254_mx21_y)
812
+ A :MSTORE(frobFp12BN254_a21_x)
813
+ B :MSTORE(frobFp12BN254_a21_y)
814
+ $ => A :MLOAD(finalExpBN254_mx22_x)
815
+ $ => B :MLOAD(finalExpBN254_mx22_y)
816
+ A :MSTORE(frobFp12BN254_a22_x)
817
+ B :MSTORE(frobFp12BN254_a22_y)
818
+ $ => A :MLOAD(finalExpBN254_mx23_x)
819
+ $ => B :MLOAD(finalExpBN254_mx23_y)
820
+ A :MSTORE(frobFp12BN254_a23_x)
821
+ B :MSTORE(frobFp12BN254_a23_y), CALL(frobFp12BN254)
822
+
823
+ $ => A :MLOAD(frobFp12BN254_c11_x)
824
+ $ => B :MLOAD(frobFp12BN254_c11_y)
825
+ A :MSTORE(finalExpBN254_mxp11_x)
826
+ B :MSTORE(finalExpBN254_mxp11_y)
827
+ $ => A :MLOAD(frobFp12BN254_c12_x)
828
+ $ => B :MLOAD(frobFp12BN254_c12_y)
829
+ A :MSTORE(finalExpBN254_mxp12_x)
830
+ B :MSTORE(finalExpBN254_mxp12_y)
831
+ $ => A :MLOAD(frobFp12BN254_c13_x)
832
+ $ => B :MLOAD(frobFp12BN254_c13_y)
833
+ A :MSTORE(finalExpBN254_mxp13_x)
834
+ B :MSTORE(finalExpBN254_mxp13_y)
835
+ $ => A :MLOAD(frobFp12BN254_c21_x)
836
+ $ => B :MLOAD(frobFp12BN254_c21_y)
837
+ A :MSTORE(finalExpBN254_mxp21_x)
838
+ B :MSTORE(finalExpBN254_mxp21_y)
839
+ $ => A :MLOAD(frobFp12BN254_c22_x)
840
+ $ => B :MLOAD(frobFp12BN254_c22_y)
841
+ A :MSTORE(finalExpBN254_mxp22_x)
842
+ B :MSTORE(finalExpBN254_mxp22_y)
843
+ $ => A :MLOAD(frobFp12BN254_c23_x)
844
+ $ => B :MLOAD(frobFp12BN254_c23_y)
845
+ A :MSTORE(finalExpBN254_mxp23_x)
846
+ B :MSTORE(finalExpBN254_mxp23_y)
847
+
848
+ $ => A :MLOAD(finalExpBN254_mxx11_x)
849
+ $ => B :MLOAD(finalExpBN254_mxx11_y)
850
+ A :MSTORE(frobFp12BN254_a11_x)
851
+ B :MSTORE(frobFp12BN254_a11_y)
852
+ $ => A :MLOAD(finalExpBN254_mxx12_x)
853
+ $ => B :MLOAD(finalExpBN254_mxx12_y)
854
+ A :MSTORE(frobFp12BN254_a12_x)
855
+ B :MSTORE(frobFp12BN254_a12_y)
856
+ $ => A :MLOAD(finalExpBN254_mxx13_x)
857
+ $ => B :MLOAD(finalExpBN254_mxx13_y)
858
+ A :MSTORE(frobFp12BN254_a13_x)
859
+ B :MSTORE(frobFp12BN254_a13_y)
860
+ $ => A :MLOAD(finalExpBN254_mxx21_x)
861
+ $ => B :MLOAD(finalExpBN254_mxx21_y)
862
+ A :MSTORE(frobFp12BN254_a21_x)
863
+ B :MSTORE(frobFp12BN254_a21_y)
864
+ $ => A :MLOAD(finalExpBN254_mxx22_x)
865
+ $ => B :MLOAD(finalExpBN254_mxx22_y)
866
+ A :MSTORE(frobFp12BN254_a22_x)
867
+ B :MSTORE(frobFp12BN254_a22_y)
868
+ $ => A :MLOAD(finalExpBN254_mxx23_x)
869
+ $ => B :MLOAD(finalExpBN254_mxx23_y)
870
+ A :MSTORE(frobFp12BN254_a23_x)
871
+ B :MSTORE(frobFp12BN254_a23_y), CALL(frobFp12BN254)
872
+
873
+ $ => A :MLOAD(frobFp12BN254_c11_x)
874
+ $ => B :MLOAD(frobFp12BN254_c11_y)
875
+ A :MSTORE(finalExpBN254_mxxp11_x)
876
+ B :MSTORE(finalExpBN254_mxxp11_y)
877
+ $ => A :MLOAD(frobFp12BN254_c12_x)
878
+ $ => B :MLOAD(frobFp12BN254_c12_y)
879
+ A :MSTORE(finalExpBN254_mxxp12_x)
880
+ B :MSTORE(finalExpBN254_mxxp12_y)
881
+ $ => A :MLOAD(frobFp12BN254_c13_x)
882
+ $ => B :MLOAD(frobFp12BN254_c13_y)
883
+ A :MSTORE(finalExpBN254_mxxp13_x)
884
+ B :MSTORE(finalExpBN254_mxxp13_y)
885
+ $ => A :MLOAD(frobFp12BN254_c21_x)
886
+ $ => B :MLOAD(frobFp12BN254_c21_y)
887
+ A :MSTORE(finalExpBN254_mxxp21_x)
888
+ B :MSTORE(finalExpBN254_mxxp21_y)
889
+ $ => A :MLOAD(frobFp12BN254_c22_x)
890
+ $ => B :MLOAD(frobFp12BN254_c22_y)
891
+ A :MSTORE(finalExpBN254_mxxp22_x)
892
+ B :MSTORE(finalExpBN254_mxxp22_y)
893
+ $ => A :MLOAD(frobFp12BN254_c23_x)
894
+ $ => B :MLOAD(frobFp12BN254_c23_y)
895
+ A :MSTORE(finalExpBN254_mxxp23_x)
896
+ B :MSTORE(finalExpBN254_mxxp23_y)
897
+
898
+ $ => A :MLOAD(finalExpBN254_mxxx11_x)
899
+ $ => B :MLOAD(finalExpBN254_mxxx11_y)
900
+ A :MSTORE(frobFp12BN254_a11_x)
901
+ B :MSTORE(frobFp12BN254_a11_y)
902
+ $ => A :MLOAD(finalExpBN254_mxxx12_x)
903
+ $ => B :MLOAD(finalExpBN254_mxxx12_y)
904
+ A :MSTORE(frobFp12BN254_a12_x)
905
+ B :MSTORE(frobFp12BN254_a12_y)
906
+ $ => A :MLOAD(finalExpBN254_mxxx13_x)
907
+ $ => B :MLOAD(finalExpBN254_mxxx13_y)
908
+ A :MSTORE(frobFp12BN254_a13_x)
909
+ B :MSTORE(frobFp12BN254_a13_y)
910
+ $ => A :MLOAD(finalExpBN254_mxxx21_x)
911
+ $ => B :MLOAD(finalExpBN254_mxxx21_y)
912
+ A :MSTORE(frobFp12BN254_a21_x)
913
+ B :MSTORE(frobFp12BN254_a21_y)
914
+ $ => A :MLOAD(finalExpBN254_mxxx22_x)
915
+ $ => B :MLOAD(finalExpBN254_mxxx22_y)
916
+ A :MSTORE(frobFp12BN254_a22_x)
917
+ B :MSTORE(frobFp12BN254_a22_y)
918
+ $ => A :MLOAD(finalExpBN254_mxxx23_x)
919
+ $ => B :MLOAD(finalExpBN254_mxxx23_y)
920
+ A :MSTORE(frobFp12BN254_a23_x)
921
+ B :MSTORE(frobFp12BN254_a23_y), CALL(frobFp12BN254)
922
+
923
+ $ => A :MLOAD(frobFp12BN254_c11_x)
924
+ $ => B :MLOAD(frobFp12BN254_c11_y)
925
+ A :MSTORE(finalExpBN254_mxxxp11_x)
926
+ B :MSTORE(finalExpBN254_mxxxp11_y)
927
+ $ => A :MLOAD(frobFp12BN254_c12_x)
928
+ $ => B :MLOAD(frobFp12BN254_c12_y)
929
+ A :MSTORE(finalExpBN254_mxxxp12_x)
930
+ B :MSTORE(finalExpBN254_mxxxp12_y)
931
+ $ => A :MLOAD(frobFp12BN254_c13_x)
932
+ $ => B :MLOAD(frobFp12BN254_c13_y)
933
+ A :MSTORE(finalExpBN254_mxxxp13_x)
934
+ B :MSTORE(finalExpBN254_mxxxp13_y)
935
+ $ => A :MLOAD(frobFp12BN254_c21_x)
936
+ $ => B :MLOAD(frobFp12BN254_c21_y)
937
+ A :MSTORE(finalExpBN254_mxxxp21_x)
938
+ B :MSTORE(finalExpBN254_mxxxp21_y)
939
+ $ => A :MLOAD(frobFp12BN254_c22_x)
940
+ $ => B :MLOAD(frobFp12BN254_c22_y)
941
+ A :MSTORE(finalExpBN254_mxxxp22_x)
942
+ B :MSTORE(finalExpBN254_mxxxp22_y)
943
+ $ => A :MLOAD(frobFp12BN254_c23_x)
944
+ $ => B :MLOAD(frobFp12BN254_c23_y)
945
+ A :MSTORE(finalExpBN254_mxxxp23_x)
946
+ B :MSTORE(finalExpBN254_mxxxp23_y)
947
+
948
+ $ => A :MLOAD(finalExpBN254_mxx11_x)
949
+ $ => B :MLOAD(finalExpBN254_mxx11_y)
950
+ A :MSTORE(frob2Fp12BN254_a11_x)
951
+ B :MSTORE(frob2Fp12BN254_a11_y)
952
+ $ => A :MLOAD(finalExpBN254_mxx12_x)
953
+ $ => B :MLOAD(finalExpBN254_mxx12_y)
954
+ A :MSTORE(frob2Fp12BN254_a12_x)
955
+ B :MSTORE(frob2Fp12BN254_a12_y)
956
+ $ => A :MLOAD(finalExpBN254_mxx13_x)
957
+ $ => B :MLOAD(finalExpBN254_mxx13_y)
958
+ A :MSTORE(frob2Fp12BN254_a13_x)
959
+ B :MSTORE(frob2Fp12BN254_a13_y)
960
+ $ => A :MLOAD(finalExpBN254_mxx21_x)
961
+ $ => B :MLOAD(finalExpBN254_mxx21_y)
962
+ A :MSTORE(frob2Fp12BN254_a21_x)
963
+ B :MSTORE(frob2Fp12BN254_a21_y)
964
+ $ => A :MLOAD(finalExpBN254_mxx22_x)
965
+ $ => B :MLOAD(finalExpBN254_mxx22_y)
966
+ A :MSTORE(frob2Fp12BN254_a22_x)
967
+ B :MSTORE(frob2Fp12BN254_a22_y)
968
+ $ => A :MLOAD(finalExpBN254_mxx23_x)
969
+ $ => B :MLOAD(finalExpBN254_mxx23_y)
970
+ A :MSTORE(frob2Fp12BN254_a23_x)
971
+ B :MSTORE(frob2Fp12BN254_a23_y), CALL(frob2Fp12BN254)
972
+
973
+ $ => A :MLOAD(frob2Fp12BN254_c11_x)
974
+ $ => B :MLOAD(frob2Fp12BN254_c11_y)
975
+ A :MSTORE(finalExpBN254_mxxpp11_x)
976
+ B :MSTORE(finalExpBN254_mxxpp11_y)
977
+ $ => A :MLOAD(frob2Fp12BN254_c12_x)
978
+ $ => B :MLOAD(frob2Fp12BN254_c12_y)
979
+ A :MSTORE(finalExpBN254_mxxpp12_x)
980
+ B :MSTORE(finalExpBN254_mxxpp12_y)
981
+ $ => A :MLOAD(frob2Fp12BN254_c13_x)
982
+ $ => B :MLOAD(frob2Fp12BN254_c13_y)
983
+ A :MSTORE(finalExpBN254_mxxpp13_x)
984
+ B :MSTORE(finalExpBN254_mxxpp13_y)
985
+ $ => A :MLOAD(frob2Fp12BN254_c21_x)
986
+ $ => B :MLOAD(frob2Fp12BN254_c21_y)
987
+ A :MSTORE(finalExpBN254_mxxpp21_x)
988
+ B :MSTORE(finalExpBN254_mxxpp21_y)
989
+ $ => A :MLOAD(frob2Fp12BN254_c22_x)
990
+ $ => B :MLOAD(frob2Fp12BN254_c22_y)
991
+ A :MSTORE(finalExpBN254_mxxpp22_x)
992
+ B :MSTORE(finalExpBN254_mxxpp22_y)
993
+ $ => A :MLOAD(frob2Fp12BN254_c23_x)
994
+ $ => B :MLOAD(frob2Fp12BN254_c23_y)
995
+ A :MSTORE(finalExpBN254_mxxpp23_x)
996
+ B :MSTORE(finalExpBN254_mxxpp23_y)
997
+
998
+ ; 3] y1 = m^p·m^p²·m^p³
999
+ $ => A :MLOAD(finalExpBN254_mp11_x)
1000
+ $ => B :MLOAD(finalExpBN254_mp11_y)
1001
+ A :MSTORE(mulFp12BN254_a11_x)
1002
+ B :MSTORE(mulFp12BN254_a11_y)
1003
+ $ => A :MLOAD(finalExpBN254_mp12_x)
1004
+ $ => B :MLOAD(finalExpBN254_mp12_y)
1005
+ A :MSTORE(mulFp12BN254_a12_x)
1006
+ B :MSTORE(mulFp12BN254_a12_y)
1007
+ $ => A :MLOAD(finalExpBN254_mp13_x)
1008
+ $ => B :MLOAD(finalExpBN254_mp13_y)
1009
+ A :MSTORE(mulFp12BN254_a13_x)
1010
+ B :MSTORE(mulFp12BN254_a13_y)
1011
+ $ => A :MLOAD(finalExpBN254_mp21_x)
1012
+ $ => B :MLOAD(finalExpBN254_mp21_y)
1013
+ A :MSTORE(mulFp12BN254_a21_x)
1014
+ B :MSTORE(mulFp12BN254_a21_y)
1015
+ $ => A :MLOAD(finalExpBN254_mp22_x)
1016
+ $ => B :MLOAD(finalExpBN254_mp22_y)
1017
+ A :MSTORE(mulFp12BN254_a22_x)
1018
+ B :MSTORE(mulFp12BN254_a22_y)
1019
+ $ => A :MLOAD(finalExpBN254_mp23_x)
1020
+ $ => B :MLOAD(finalExpBN254_mp23_y)
1021
+ A :MSTORE(mulFp12BN254_a23_x)
1022
+ B :MSTORE(mulFp12BN254_a23_y)
1023
+ $ => A :MLOAD(finalExpBN254_mpp11_x)
1024
+ $ => B :MLOAD(finalExpBN254_mpp11_y)
1025
+ A :MSTORE(mulFp12BN254_b11_x)
1026
+ B :MSTORE(mulFp12BN254_b11_y)
1027
+ $ => A :MLOAD(finalExpBN254_mpp12_x)
1028
+ $ => B :MLOAD(finalExpBN254_mpp12_y)
1029
+ A :MSTORE(mulFp12BN254_b12_x)
1030
+ B :MSTORE(mulFp12BN254_b12_y)
1031
+ $ => A :MLOAD(finalExpBN254_mpp13_x)
1032
+ $ => B :MLOAD(finalExpBN254_mpp13_y)
1033
+ A :MSTORE(mulFp12BN254_b13_x)
1034
+ B :MSTORE(mulFp12BN254_b13_y)
1035
+ $ => A :MLOAD(finalExpBN254_mpp21_x)
1036
+ $ => B :MLOAD(finalExpBN254_mpp21_y)
1037
+ A :MSTORE(mulFp12BN254_b21_x)
1038
+ B :MSTORE(mulFp12BN254_b21_y)
1039
+ $ => A :MLOAD(finalExpBN254_mpp22_x)
1040
+ $ => B :MLOAD(finalExpBN254_mpp22_y)
1041
+ A :MSTORE(mulFp12BN254_b22_x)
1042
+ B :MSTORE(mulFp12BN254_b22_y)
1043
+ $ => A :MLOAD(finalExpBN254_mpp23_x)
1044
+ $ => B :MLOAD(finalExpBN254_mpp23_y)
1045
+ A :MSTORE(mulFp12BN254_b23_x)
1046
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1047
+
1048
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1049
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1050
+ A :MSTORE(mulFp12BN254_a11_x)
1051
+ B :MSTORE(mulFp12BN254_a11_y)
1052
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1053
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1054
+ A :MSTORE(mulFp12BN254_a12_x)
1055
+ B :MSTORE(mulFp12BN254_a12_y)
1056
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1057
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1058
+ A :MSTORE(mulFp12BN254_a13_x)
1059
+ B :MSTORE(mulFp12BN254_a13_y)
1060
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1061
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1062
+ A :MSTORE(mulFp12BN254_a21_x)
1063
+ B :MSTORE(mulFp12BN254_a21_y)
1064
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1065
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1066
+ A :MSTORE(mulFp12BN254_a22_x)
1067
+ B :MSTORE(mulFp12BN254_a22_y)
1068
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1069
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1070
+ A :MSTORE(mulFp12BN254_a23_x)
1071
+ B :MSTORE(mulFp12BN254_a23_y)
1072
+ $ => A :MLOAD(finalExpBN254_mppp11_x)
1073
+ $ => B :MLOAD(finalExpBN254_mppp11_y)
1074
+ A :MSTORE(mulFp12BN254_b11_x)
1075
+ B :MSTORE(mulFp12BN254_b11_y)
1076
+ $ => A :MLOAD(finalExpBN254_mppp12_x)
1077
+ $ => B :MLOAD(finalExpBN254_mppp12_y)
1078
+ A :MSTORE(mulFp12BN254_b12_x)
1079
+ B :MSTORE(mulFp12BN254_b12_y)
1080
+ $ => A :MLOAD(finalExpBN254_mppp13_x)
1081
+ $ => B :MLOAD(finalExpBN254_mppp13_y)
1082
+ A :MSTORE(mulFp12BN254_b13_x)
1083
+ B :MSTORE(mulFp12BN254_b13_y)
1084
+ $ => A :MLOAD(finalExpBN254_mppp21_x)
1085
+ $ => B :MLOAD(finalExpBN254_mppp21_y)
1086
+ A :MSTORE(mulFp12BN254_b21_x)
1087
+ B :MSTORE(mulFp12BN254_b21_y)
1088
+ $ => A :MLOAD(finalExpBN254_mppp22_x)
1089
+ $ => B :MLOAD(finalExpBN254_mppp22_y)
1090
+ A :MSTORE(mulFp12BN254_b22_x)
1091
+ B :MSTORE(mulFp12BN254_b22_y)
1092
+ $ => A :MLOAD(finalExpBN254_mppp23_x)
1093
+ $ => B :MLOAD(finalExpBN254_mppp23_y)
1094
+ A :MSTORE(mulFp12BN254_b23_x)
1095
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1096
+
1097
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1098
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1099
+ A :MSTORE(finalExpBN254_y1_11_x)
1100
+ B :MSTORE(finalExpBN254_y1_11_y)
1101
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1102
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1103
+ A :MSTORE(finalExpBN254_y1_12_x)
1104
+ B :MSTORE(finalExpBN254_y1_12_y)
1105
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1106
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1107
+ A :MSTORE(finalExpBN254_y1_13_x)
1108
+ B :MSTORE(finalExpBN254_y1_13_y)
1109
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1110
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1111
+ A :MSTORE(finalExpBN254_y1_21_x)
1112
+ B :MSTORE(finalExpBN254_y1_21_y)
1113
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1114
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1115
+ A :MSTORE(finalExpBN254_y1_22_x)
1116
+ B :MSTORE(finalExpBN254_y1_22_y)
1117
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1118
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1119
+ A :MSTORE(finalExpBN254_y1_23_x)
1120
+ B :MSTORE(finalExpBN254_y1_23_y)
1121
+
1122
+ ; 4] y2 = m̅
1123
+ $ => A :MLOAD(finalExpBN254_f11_x)
1124
+ $ => B :MLOAD(finalExpBN254_f11_y)
1125
+ A :MSTORE(finalExpBN254_y2_11_x)
1126
+ B :MSTORE(finalExpBN254_y2_11_y)
1127
+ $ => A :MLOAD(finalExpBN254_f12_x)
1128
+ $ => B :MLOAD(finalExpBN254_f12_y)
1129
+ A :MSTORE(finalExpBN254_y2_12_x)
1130
+ B :MSTORE(finalExpBN254_y2_12_y)
1131
+ $ => A :MLOAD(finalExpBN254_f13_x)
1132
+ $ => B :MLOAD(finalExpBN254_f13_y)
1133
+ A :MSTORE(finalExpBN254_y2_13_x)
1134
+ B :MSTORE(finalExpBN254_y2_13_y)
1135
+
1136
+ %BN254_P => A
1137
+ $ => B :MLOAD(finalExpBN254_f21_x)
1138
+ $ :SUB, MSTORE(finalExpBN254_y2_21_x)
1139
+ %BN254_P => A
1140
+ $ => B :MLOAD(finalExpBN254_f21_y)
1141
+ $ :SUB, MSTORE(finalExpBN254_y2_21_y)
1142
+ %BN254_P => A
1143
+ $ => B :MLOAD(finalExpBN254_f22_x)
1144
+ $ :SUB, MSTORE(finalExpBN254_y2_22_x)
1145
+ %BN254_P => A
1146
+ $ => B :MLOAD(finalExpBN254_f22_y)
1147
+ $ :SUB, MSTORE(finalExpBN254_y2_22_y)
1148
+ %BN254_P => A
1149
+ $ => B :MLOAD(finalExpBN254_f23_x)
1150
+ $ :SUB, MSTORE(finalExpBN254_y2_23_x)
1151
+ %BN254_P => A
1152
+ $ => B :MLOAD(finalExpBN254_f23_y)
1153
+ $ :SUB, MSTORE(finalExpBN254_y2_23_y)
1154
+
1155
+ ; 5] y3 = (m^x²)^p²
1156
+ ; This has already been computed
1157
+
1158
+ ; 6] y4 = \bar{(m^x)^p}
1159
+ $ => A :MLOAD(finalExpBN254_mxp11_x)
1160
+ $ => B :MLOAD(finalExpBN254_mxp11_y)
1161
+ A :MSTORE(finalExpBN254_y4_11_x)
1162
+ B :MSTORE(finalExpBN254_y4_11_y)
1163
+ $ => A :MLOAD(finalExpBN254_mxp12_x)
1164
+ $ => B :MLOAD(finalExpBN254_mxp12_y)
1165
+ A :MSTORE(finalExpBN254_y4_12_x)
1166
+ B :MSTORE(finalExpBN254_y4_12_y)
1167
+ $ => A :MLOAD(finalExpBN254_mxp13_x)
1168
+ $ => B :MLOAD(finalExpBN254_mxp13_y)
1169
+ A :MSTORE(finalExpBN254_y4_13_x)
1170
+ B :MSTORE(finalExpBN254_y4_13_y)
1171
+
1172
+ %BN254_P => A
1173
+ $ => B :MLOAD(finalExpBN254_mxp21_x)
1174
+ $ :SUB, MSTORE(finalExpBN254_y4_21_x)
1175
+ %BN254_P => A
1176
+ $ => B :MLOAD(finalExpBN254_mxp21_y)
1177
+ $ :SUB, MSTORE(finalExpBN254_y4_21_y)
1178
+ %BN254_P => A
1179
+ $ => B :MLOAD(finalExpBN254_mxp22_x)
1180
+ $ :SUB, MSTORE(finalExpBN254_y4_22_x)
1181
+ %BN254_P => A
1182
+ $ => B :MLOAD(finalExpBN254_mxp22_y)
1183
+ $ :SUB, MSTORE(finalExpBN254_y4_22_y)
1184
+ %BN254_P => A
1185
+ $ => B :MLOAD(finalExpBN254_mxp23_x)
1186
+ $ :SUB, MSTORE(finalExpBN254_y4_23_x)
1187
+ %BN254_P => A
1188
+ $ => B :MLOAD(finalExpBN254_mxp23_y)
1189
+ $ :SUB, MSTORE(finalExpBN254_y4_23_y)
1190
+
1191
+ ; 7] y5 = \bar{m^x·(m^x²)^p}
1192
+ $ => A :MLOAD(finalExpBN254_mx11_x)
1193
+ $ => B :MLOAD(finalExpBN254_mx11_y)
1194
+ A :MSTORE(mulFp12BN254_a11_x)
1195
+ B :MSTORE(mulFp12BN254_a11_y)
1196
+ $ => A :MLOAD(finalExpBN254_mx12_x)
1197
+ $ => B :MLOAD(finalExpBN254_mx12_y)
1198
+ A :MSTORE(mulFp12BN254_a12_x)
1199
+ B :MSTORE(mulFp12BN254_a12_y)
1200
+ $ => A :MLOAD(finalExpBN254_mx13_x)
1201
+ $ => B :MLOAD(finalExpBN254_mx13_y)
1202
+ A :MSTORE(mulFp12BN254_a13_x)
1203
+ B :MSTORE(mulFp12BN254_a13_y)
1204
+ $ => A :MLOAD(finalExpBN254_mx21_x)
1205
+ $ => B :MLOAD(finalExpBN254_mx21_y)
1206
+ A :MSTORE(mulFp12BN254_a21_x)
1207
+ B :MSTORE(mulFp12BN254_a21_y)
1208
+ $ => A :MLOAD(finalExpBN254_mx22_x)
1209
+ $ => B :MLOAD(finalExpBN254_mx22_y)
1210
+ A :MSTORE(mulFp12BN254_a22_x)
1211
+ B :MSTORE(mulFp12BN254_a22_y)
1212
+ $ => A :MLOAD(finalExpBN254_mx23_x)
1213
+ $ => B :MLOAD(finalExpBN254_mx23_y)
1214
+ A :MSTORE(mulFp12BN254_a23_x)
1215
+ B :MSTORE(mulFp12BN254_a23_y)
1216
+ $ => A :MLOAD(finalExpBN254_mxxp11_x)
1217
+ $ => B :MLOAD(finalExpBN254_mxxp11_y)
1218
+ A :MSTORE(mulFp12BN254_b11_x)
1219
+ B :MSTORE(mulFp12BN254_b11_y)
1220
+ $ => A :MLOAD(finalExpBN254_mxxp12_x)
1221
+ $ => B :MLOAD(finalExpBN254_mxxp12_y)
1222
+ A :MSTORE(mulFp12BN254_b12_x)
1223
+ B :MSTORE(mulFp12BN254_b12_y)
1224
+ $ => A :MLOAD(finalExpBN254_mxxp13_x)
1225
+ $ => B :MLOAD(finalExpBN254_mxxp13_y)
1226
+ A :MSTORE(mulFp12BN254_b13_x)
1227
+ B :MSTORE(mulFp12BN254_b13_y)
1228
+ $ => A :MLOAD(finalExpBN254_mxxp21_x)
1229
+ $ => B :MLOAD(finalExpBN254_mxxp21_y)
1230
+ A :MSTORE(mulFp12BN254_b21_x)
1231
+ B :MSTORE(mulFp12BN254_b21_y)
1232
+ $ => A :MLOAD(finalExpBN254_mxxp22_x)
1233
+ $ => B :MLOAD(finalExpBN254_mxxp22_y)
1234
+ A :MSTORE(mulFp12BN254_b22_x)
1235
+ B :MSTORE(mulFp12BN254_b22_y)
1236
+ $ => A :MLOAD(finalExpBN254_mxxp23_x)
1237
+ $ => B :MLOAD(finalExpBN254_mxxp23_y)
1238
+ A :MSTORE(mulFp12BN254_b23_x)
1239
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1240
+
1241
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1242
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1243
+ A :MSTORE(finalExpBN254_y5_11_x)
1244
+ B :MSTORE(finalExpBN254_y5_11_y)
1245
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1246
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1247
+ A :MSTORE(finalExpBN254_y5_12_x)
1248
+ B :MSTORE(finalExpBN254_y5_12_y)
1249
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1250
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1251
+ A :MSTORE(finalExpBN254_y5_13_x)
1252
+ B :MSTORE(finalExpBN254_y5_13_y)
1253
+
1254
+ %BN254_P => A
1255
+ $ => B :MLOAD(mulFp12BN254_c21_x)
1256
+ $ :SUB, MSTORE(finalExpBN254_y5_21_x)
1257
+ %BN254_P => A
1258
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1259
+ $ :SUB, MSTORE(finalExpBN254_y5_21_y)
1260
+ %BN254_P => A
1261
+ $ => B :MLOAD(mulFp12BN254_c22_x)
1262
+ $ :SUB, MSTORE(finalExpBN254_y5_22_x)
1263
+ %BN254_P => A
1264
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1265
+ $ :SUB, MSTORE(finalExpBN254_y5_22_y)
1266
+ %BN254_P => A
1267
+ $ => B :MLOAD(mulFp12BN254_c23_x)
1268
+ $ :SUB, MSTORE(finalExpBN254_y5_23_x)
1269
+ %BN254_P => A
1270
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1271
+ $ :SUB, MSTORE(finalExpBN254_y5_23_y)
1272
+
1273
+ ; 8] y6 = \bar{m^x²}
1274
+ $ => A :MLOAD(finalExpBN254_mxx11_x)
1275
+ $ => B :MLOAD(finalExpBN254_mxx11_y)
1276
+ A :MSTORE(finalExpBN254_y6_11_x)
1277
+ B :MSTORE(finalExpBN254_y6_11_y)
1278
+ $ => A :MLOAD(finalExpBN254_mxx12_x)
1279
+ $ => B :MLOAD(finalExpBN254_mxx12_y)
1280
+ A :MSTORE(finalExpBN254_y6_12_x)
1281
+ B :MSTORE(finalExpBN254_y6_12_y)
1282
+ $ => A :MLOAD(finalExpBN254_mxx13_x)
1283
+ $ => B :MLOAD(finalExpBN254_mxx13_y)
1284
+ A :MSTORE(finalExpBN254_y6_13_x)
1285
+ B :MSTORE(finalExpBN254_y6_13_y)
1286
+
1287
+ %BN254_P => A
1288
+ $ => B :MLOAD(finalExpBN254_mxx21_x)
1289
+ $ :SUB, MSTORE(finalExpBN254_y6_21_x)
1290
+ %BN254_P => A
1291
+ $ => B :MLOAD(finalExpBN254_mxx21_y)
1292
+ $ :SUB, MSTORE(finalExpBN254_y6_21_y)
1293
+ %BN254_P => A
1294
+ $ => B :MLOAD(finalExpBN254_mxx22_x)
1295
+ $ :SUB, MSTORE(finalExpBN254_y6_22_x)
1296
+ %BN254_P => A
1297
+ $ => B :MLOAD(finalExpBN254_mxx22_y)
1298
+ $ :SUB, MSTORE(finalExpBN254_y6_22_y)
1299
+ %BN254_P => A
1300
+ $ => B :MLOAD(finalExpBN254_mxx23_x)
1301
+ $ :SUB, MSTORE(finalExpBN254_y6_23_x)
1302
+ %BN254_P => A
1303
+ $ => B :MLOAD(finalExpBN254_mxx23_y)
1304
+ $ :SUB, MSTORE(finalExpBN254_y6_23_y)
1305
+
1306
+ ; 9] y7 = \bar{m^x³·(m^x³)^p}
1307
+ $ => A :MLOAD(finalExpBN254_mxxx11_x)
1308
+ $ => B :MLOAD(finalExpBN254_mxxx11_y)
1309
+ A :MSTORE(mulFp12BN254_a11_x)
1310
+ B :MSTORE(mulFp12BN254_a11_y)
1311
+ $ => A :MLOAD(finalExpBN254_mxxx12_x)
1312
+ $ => B :MLOAD(finalExpBN254_mxxx12_y)
1313
+ A :MSTORE(mulFp12BN254_a12_x)
1314
+ B :MSTORE(mulFp12BN254_a12_y)
1315
+ $ => A :MLOAD(finalExpBN254_mxxx13_x)
1316
+ $ => B :MLOAD(finalExpBN254_mxxx13_y)
1317
+ A :MSTORE(mulFp12BN254_a13_x)
1318
+ B :MSTORE(mulFp12BN254_a13_y)
1319
+ $ => A :MLOAD(finalExpBN254_mxxx21_x)
1320
+ $ => B :MLOAD(finalExpBN254_mxxx21_y)
1321
+ A :MSTORE(mulFp12BN254_a21_x)
1322
+ B :MSTORE(mulFp12BN254_a21_y)
1323
+ $ => A :MLOAD(finalExpBN254_mxxx22_x)
1324
+ $ => B :MLOAD(finalExpBN254_mxxx22_y)
1325
+ A :MSTORE(mulFp12BN254_a22_x)
1326
+ B :MSTORE(mulFp12BN254_a22_y)
1327
+ $ => A :MLOAD(finalExpBN254_mxxx23_x)
1328
+ $ => B :MLOAD(finalExpBN254_mxxx23_y)
1329
+ A :MSTORE(mulFp12BN254_a23_x)
1330
+ B :MSTORE(mulFp12BN254_a23_y)
1331
+ $ => A :MLOAD(finalExpBN254_mxxxp11_x)
1332
+ $ => B :MLOAD(finalExpBN254_mxxxp11_y)
1333
+ A :MSTORE(mulFp12BN254_b11_x)
1334
+ B :MSTORE(mulFp12BN254_b11_y)
1335
+ $ => A :MLOAD(finalExpBN254_mxxxp12_x)
1336
+ $ => B :MLOAD(finalExpBN254_mxxxp12_y)
1337
+ A :MSTORE(mulFp12BN254_b12_x)
1338
+ B :MSTORE(mulFp12BN254_b12_y)
1339
+ $ => A :MLOAD(finalExpBN254_mxxxp13_x)
1340
+ $ => B :MLOAD(finalExpBN254_mxxxp13_y)
1341
+ A :MSTORE(mulFp12BN254_b13_x)
1342
+ B :MSTORE(mulFp12BN254_b13_y)
1343
+ $ => A :MLOAD(finalExpBN254_mxxxp21_x)
1344
+ $ => B :MLOAD(finalExpBN254_mxxxp21_y)
1345
+ A :MSTORE(mulFp12BN254_b21_x)
1346
+ B :MSTORE(mulFp12BN254_b21_y)
1347
+ $ => A :MLOAD(finalExpBN254_mxxxp22_x)
1348
+ $ => B :MLOAD(finalExpBN254_mxxxp22_y)
1349
+ A :MSTORE(mulFp12BN254_b22_x)
1350
+ B :MSTORE(mulFp12BN254_b22_y)
1351
+ $ => A :MLOAD(finalExpBN254_mxxxp23_x)
1352
+ $ => B :MLOAD(finalExpBN254_mxxxp23_y)
1353
+ A :MSTORE(mulFp12BN254_b23_x)
1354
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1355
+
1356
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1357
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1358
+ A :MSTORE(finalExpBN254_y7_11_x)
1359
+ B :MSTORE(finalExpBN254_y7_11_y)
1360
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1361
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1362
+ A :MSTORE(finalExpBN254_y7_12_x)
1363
+ B :MSTORE(finalExpBN254_y7_12_y)
1364
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1365
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1366
+ A :MSTORE(finalExpBN254_y7_13_x)
1367
+ B :MSTORE(finalExpBN254_y7_13_y)
1368
+
1369
+ %BN254_P => A
1370
+ $ => B :MLOAD(mulFp12BN254_c21_x)
1371
+ $ :SUB, MSTORE(finalExpBN254_y7_21_x)
1372
+ %BN254_P => A
1373
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1374
+ $ :SUB, MSTORE(finalExpBN254_y7_21_y)
1375
+ %BN254_P => A
1376
+ $ => B :MLOAD(mulFp12BN254_c22_x)
1377
+ $ :SUB, MSTORE(finalExpBN254_y7_22_x)
1378
+ %BN254_P => A
1379
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1380
+ $ :SUB, MSTORE(finalExpBN254_y7_22_y)
1381
+ %BN254_P => A
1382
+ $ => B :MLOAD(mulFp12BN254_c23_x)
1383
+ $ :SUB, MSTORE(finalExpBN254_y7_23_x)
1384
+ %BN254_P => A
1385
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1386
+ $ :SUB, MSTORE(finalExpBN254_y7_23_y)
1387
+
1388
+ ; 10] Compute y1·y2²·y3⁶·y4¹²·y5¹⁸·y6³⁰·y7³⁶ as follows
1389
+
1390
+ ; 10.1] T11 = y7²·y5·y6
1391
+ $ => A :MLOAD(finalExpBN254_y7_11_x)
1392
+ $ => B :MLOAD(finalExpBN254_y7_11_y)
1393
+ A :MSTORE(squareCycloFp12BN254_a11_x)
1394
+ B :MSTORE(squareCycloFp12BN254_a11_y)
1395
+ $ => A :MLOAD(finalExpBN254_y7_12_x)
1396
+ $ => B :MLOAD(finalExpBN254_y7_12_y)
1397
+ A :MSTORE(squareCycloFp12BN254_a12_x)
1398
+ B :MSTORE(squareCycloFp12BN254_a12_y)
1399
+ $ => A :MLOAD(finalExpBN254_y7_13_x)
1400
+ $ => B :MLOAD(finalExpBN254_y7_13_y)
1401
+ A :MSTORE(squareCycloFp12BN254_a13_x)
1402
+ B :MSTORE(squareCycloFp12BN254_a13_y)
1403
+ $ => A :MLOAD(finalExpBN254_y7_21_x)
1404
+ $ => B :MLOAD(finalExpBN254_y7_21_y)
1405
+ A :MSTORE(squareCycloFp12BN254_a21_x)
1406
+ B :MSTORE(squareCycloFp12BN254_a21_y)
1407
+ $ => A :MLOAD(finalExpBN254_y7_22_x)
1408
+ $ => B :MLOAD(finalExpBN254_y7_22_y)
1409
+ A :MSTORE(squareCycloFp12BN254_a22_x)
1410
+ B :MSTORE(squareCycloFp12BN254_a22_y)
1411
+ $ => A :MLOAD(finalExpBN254_y7_23_x)
1412
+ $ => B :MLOAD(finalExpBN254_y7_23_y)
1413
+ A :MSTORE(squareCycloFp12BN254_a23_x)
1414
+ B :MSTORE(squareCycloFp12BN254_a23_y), CALL(squareCycloFp12BN254)
1415
+
1416
+ $ => A :MLOAD(squareCycloFp12BN254_c11_x)
1417
+ $ => B :MLOAD(squareCycloFp12BN254_c11_y)
1418
+ A :MSTORE(mulFp12BN254_a11_x)
1419
+ B :MSTORE(mulFp12BN254_a11_y)
1420
+ $ => A :MLOAD(squareCycloFp12BN254_c12_x)
1421
+ $ => B :MLOAD(squareCycloFp12BN254_c12_y)
1422
+ A :MSTORE(mulFp12BN254_a12_x)
1423
+ B :MSTORE(mulFp12BN254_a12_y)
1424
+ $ => A :MLOAD(squareCycloFp12BN254_c13_x)
1425
+ $ => B :MLOAD(squareCycloFp12BN254_c13_y)
1426
+ A :MSTORE(mulFp12BN254_a13_x)
1427
+ B :MSTORE(mulFp12BN254_a13_y)
1428
+ $ => A :MLOAD(squareCycloFp12BN254_c21_x)
1429
+ $ => B :MLOAD(squareCycloFp12BN254_c21_y)
1430
+ A :MSTORE(mulFp12BN254_a21_x)
1431
+ B :MSTORE(mulFp12BN254_a21_y)
1432
+ $ => A :MLOAD(squareCycloFp12BN254_c22_x)
1433
+ $ => B :MLOAD(squareCycloFp12BN254_c22_y)
1434
+ A :MSTORE(mulFp12BN254_a22_x)
1435
+ B :MSTORE(mulFp12BN254_a22_y)
1436
+ $ => A :MLOAD(squareCycloFp12BN254_c23_x)
1437
+ $ => B :MLOAD(squareCycloFp12BN254_c23_y)
1438
+ A :MSTORE(mulFp12BN254_a23_x)
1439
+ B :MSTORE(mulFp12BN254_a23_y)
1440
+ $ => A :MLOAD(finalExpBN254_y5_11_x)
1441
+ $ => B :MLOAD(finalExpBN254_y5_11_y)
1442
+ A :MSTORE(mulFp12BN254_b11_x)
1443
+ B :MSTORE(mulFp12BN254_b11_y)
1444
+ $ => A :MLOAD(finalExpBN254_y5_12_x)
1445
+ $ => B :MLOAD(finalExpBN254_y5_12_y)
1446
+ A :MSTORE(mulFp12BN254_b12_x)
1447
+ B :MSTORE(mulFp12BN254_b12_y)
1448
+ $ => A :MLOAD(finalExpBN254_y5_13_x)
1449
+ $ => B :MLOAD(finalExpBN254_y5_13_y)
1450
+ A :MSTORE(mulFp12BN254_b13_x)
1451
+ B :MSTORE(mulFp12BN254_b13_y)
1452
+ $ => A :MLOAD(finalExpBN254_y5_21_x)
1453
+ $ => B :MLOAD(finalExpBN254_y5_21_y)
1454
+ A :MSTORE(mulFp12BN254_b21_x)
1455
+ B :MSTORE(mulFp12BN254_b21_y)
1456
+ $ => A :MLOAD(finalExpBN254_y5_22_x)
1457
+ $ => B :MLOAD(finalExpBN254_y5_22_y)
1458
+ A :MSTORE(mulFp12BN254_b22_x)
1459
+ B :MSTORE(mulFp12BN254_b22_y)
1460
+ $ => A :MLOAD(finalExpBN254_y5_23_x)
1461
+ $ => B :MLOAD(finalExpBN254_y5_23_y)
1462
+ A :MSTORE(mulFp12BN254_b23_x)
1463
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1464
+
1465
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1466
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1467
+ A :MSTORE(mulFp12BN254_a11_x)
1468
+ B :MSTORE(mulFp12BN254_a11_y)
1469
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1470
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1471
+ A :MSTORE(mulFp12BN254_a12_x)
1472
+ B :MSTORE(mulFp12BN254_a12_y)
1473
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1474
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1475
+ A :MSTORE(mulFp12BN254_a13_x)
1476
+ B :MSTORE(mulFp12BN254_a13_y)
1477
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1478
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1479
+ A :MSTORE(mulFp12BN254_a21_x)
1480
+ B :MSTORE(mulFp12BN254_a21_y)
1481
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1482
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1483
+ A :MSTORE(mulFp12BN254_a22_x)
1484
+ B :MSTORE(mulFp12BN254_a22_y)
1485
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1486
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1487
+ A :MSTORE(mulFp12BN254_a23_x)
1488
+ B :MSTORE(mulFp12BN254_a23_y)
1489
+ $ => A :MLOAD(finalExpBN254_y6_11_x)
1490
+ $ => B :MLOAD(finalExpBN254_y6_11_y)
1491
+ A :MSTORE(mulFp12BN254_b11_x)
1492
+ B :MSTORE(mulFp12BN254_b11_y)
1493
+ $ => A :MLOAD(finalExpBN254_y6_12_x)
1494
+ $ => B :MLOAD(finalExpBN254_y6_12_y)
1495
+ A :MSTORE(mulFp12BN254_b12_x)
1496
+ B :MSTORE(mulFp12BN254_b12_y)
1497
+ $ => A :MLOAD(finalExpBN254_y6_13_x)
1498
+ $ => B :MLOAD(finalExpBN254_y6_13_y)
1499
+ A :MSTORE(mulFp12BN254_b13_x)
1500
+ B :MSTORE(mulFp12BN254_b13_y)
1501
+ $ => A :MLOAD(finalExpBN254_y6_21_x)
1502
+ $ => B :MLOAD(finalExpBN254_y6_21_y)
1503
+ A :MSTORE(mulFp12BN254_b21_x)
1504
+ B :MSTORE(mulFp12BN254_b21_y)
1505
+ $ => A :MLOAD(finalExpBN254_y6_22_x)
1506
+ $ => B :MLOAD(finalExpBN254_y6_22_y)
1507
+ A :MSTORE(mulFp12BN254_b22_x)
1508
+ B :MSTORE(mulFp12BN254_b22_y)
1509
+ $ => A :MLOAD(finalExpBN254_y6_23_x)
1510
+ $ => B :MLOAD(finalExpBN254_y6_23_y)
1511
+ A :MSTORE(mulFp12BN254_b23_x)
1512
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1513
+
1514
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1515
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1516
+ A :MSTORE(finalExpBN254_T11_11_x)
1517
+ B :MSTORE(finalExpBN254_T11_11_y)
1518
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1519
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1520
+ A :MSTORE(finalExpBN254_T11_12_x)
1521
+ B :MSTORE(finalExpBN254_T11_12_y)
1522
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1523
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1524
+ A :MSTORE(finalExpBN254_T11_13_x)
1525
+ B :MSTORE(finalExpBN254_T11_13_y)
1526
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1527
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1528
+ A :MSTORE(finalExpBN254_T11_21_x)
1529
+ B :MSTORE(finalExpBN254_T11_21_y)
1530
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1531
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1532
+ A :MSTORE(finalExpBN254_T11_22_x)
1533
+ B :MSTORE(finalExpBN254_T11_22_y)
1534
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1535
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1536
+ A :MSTORE(finalExpBN254_T11_23_x)
1537
+ B :MSTORE(finalExpBN254_T11_23_y)
1538
+
1539
+ ; 10.2] T21 = T11·y4·y6
1540
+ $ => A :MLOAD(finalExpBN254_T11_11_x)
1541
+ $ => B :MLOAD(finalExpBN254_T11_11_y)
1542
+ A :MSTORE(mulFp12BN254_a11_x)
1543
+ B :MSTORE(mulFp12BN254_a11_y)
1544
+ $ => A :MLOAD(finalExpBN254_T11_12_x)
1545
+ $ => B :MLOAD(finalExpBN254_T11_12_y)
1546
+ A :MSTORE(mulFp12BN254_a12_x)
1547
+ B :MSTORE(mulFp12BN254_a12_y)
1548
+ $ => A :MLOAD(finalExpBN254_T11_13_x)
1549
+ $ => B :MLOAD(finalExpBN254_T11_13_y)
1550
+ A :MSTORE(mulFp12BN254_a13_x)
1551
+ B :MSTORE(mulFp12BN254_a13_y)
1552
+ $ => A :MLOAD(finalExpBN254_T11_21_x)
1553
+ $ => B :MLOAD(finalExpBN254_T11_21_y)
1554
+ A :MSTORE(mulFp12BN254_a21_x)
1555
+ B :MSTORE(mulFp12BN254_a21_y)
1556
+ $ => A :MLOAD(finalExpBN254_T11_22_x)
1557
+ $ => B :MLOAD(finalExpBN254_T11_22_y)
1558
+ A :MSTORE(mulFp12BN254_a22_x)
1559
+ B :MSTORE(mulFp12BN254_a22_y)
1560
+ $ => A :MLOAD(finalExpBN254_T11_23_x)
1561
+ $ => B :MLOAD(finalExpBN254_T11_23_y)
1562
+ A :MSTORE(mulFp12BN254_a23_x)
1563
+ B :MSTORE(mulFp12BN254_a23_y)
1564
+ $ => A :MLOAD(finalExpBN254_y4_11_x)
1565
+ $ => B :MLOAD(finalExpBN254_y4_11_y)
1566
+ A :MSTORE(mulFp12BN254_b11_x)
1567
+ B :MSTORE(mulFp12BN254_b11_y)
1568
+ $ => A :MLOAD(finalExpBN254_y4_12_x)
1569
+ $ => B :MLOAD(finalExpBN254_y4_12_y)
1570
+ A :MSTORE(mulFp12BN254_b12_x)
1571
+ B :MSTORE(mulFp12BN254_b12_y)
1572
+ $ => A :MLOAD(finalExpBN254_y4_13_x)
1573
+ $ => B :MLOAD(finalExpBN254_y4_13_y)
1574
+ A :MSTORE(mulFp12BN254_b13_x)
1575
+ B :MSTORE(mulFp12BN254_b13_y)
1576
+ $ => A :MLOAD(finalExpBN254_y4_21_x)
1577
+ $ => B :MLOAD(finalExpBN254_y4_21_y)
1578
+ A :MSTORE(mulFp12BN254_b21_x)
1579
+ B :MSTORE(mulFp12BN254_b21_y)
1580
+ $ => A :MLOAD(finalExpBN254_y4_22_x)
1581
+ $ => B :MLOAD(finalExpBN254_y4_22_y)
1582
+ A :MSTORE(mulFp12BN254_b22_x)
1583
+ B :MSTORE(mulFp12BN254_b22_y)
1584
+ $ => A :MLOAD(finalExpBN254_y4_23_x)
1585
+ $ => B :MLOAD(finalExpBN254_y4_23_y)
1586
+ A :MSTORE(mulFp12BN254_b23_x)
1587
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1588
+
1589
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1590
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1591
+ A :MSTORE(mulFp12BN254_a11_x)
1592
+ B :MSTORE(mulFp12BN254_a11_y)
1593
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1594
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1595
+ A :MSTORE(mulFp12BN254_a12_x)
1596
+ B :MSTORE(mulFp12BN254_a12_y)
1597
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1598
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1599
+ A :MSTORE(mulFp12BN254_a13_x)
1600
+ B :MSTORE(mulFp12BN254_a13_y)
1601
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1602
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1603
+ A :MSTORE(mulFp12BN254_a21_x)
1604
+ B :MSTORE(mulFp12BN254_a21_y)
1605
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1606
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1607
+ A :MSTORE(mulFp12BN254_a22_x)
1608
+ B :MSTORE(mulFp12BN254_a22_y)
1609
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1610
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1611
+ A :MSTORE(mulFp12BN254_a23_x)
1612
+ B :MSTORE(mulFp12BN254_a23_y)
1613
+ $ => A :MLOAD(finalExpBN254_y6_11_x)
1614
+ $ => B :MLOAD(finalExpBN254_y6_11_y)
1615
+ A :MSTORE(mulFp12BN254_b11_x)
1616
+ B :MSTORE(mulFp12BN254_b11_y)
1617
+ $ => A :MLOAD(finalExpBN254_y6_12_x)
1618
+ $ => B :MLOAD(finalExpBN254_y6_12_y)
1619
+ A :MSTORE(mulFp12BN254_b12_x)
1620
+ B :MSTORE(mulFp12BN254_b12_y)
1621
+ $ => A :MLOAD(finalExpBN254_y6_13_x)
1622
+ $ => B :MLOAD(finalExpBN254_y6_13_y)
1623
+ A :MSTORE(mulFp12BN254_b13_x)
1624
+ B :MSTORE(mulFp12BN254_b13_y)
1625
+ $ => A :MLOAD(finalExpBN254_y6_21_x)
1626
+ $ => B :MLOAD(finalExpBN254_y6_21_y)
1627
+ A :MSTORE(mulFp12BN254_b21_x)
1628
+ B :MSTORE(mulFp12BN254_b21_y)
1629
+ $ => A :MLOAD(finalExpBN254_y6_22_x)
1630
+ $ => B :MLOAD(finalExpBN254_y6_22_y)
1631
+ A :MSTORE(mulFp12BN254_b22_x)
1632
+ B :MSTORE(mulFp12BN254_b22_y)
1633
+ $ => A :MLOAD(finalExpBN254_y6_23_x)
1634
+ $ => B :MLOAD(finalExpBN254_y6_23_y)
1635
+ A :MSTORE(mulFp12BN254_b23_x)
1636
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1637
+
1638
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1639
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1640
+ A :MSTORE(finalExpBN254_T21_11_x)
1641
+ B :MSTORE(finalExpBN254_T21_11_y)
1642
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1643
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1644
+ A :MSTORE(finalExpBN254_T21_12_x)
1645
+ B :MSTORE(finalExpBN254_T21_12_y)
1646
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1647
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1648
+ A :MSTORE(finalExpBN254_T21_13_x)
1649
+ B :MSTORE(finalExpBN254_T21_13_y)
1650
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1651
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1652
+ A :MSTORE(finalExpBN254_T21_21_x)
1653
+ B :MSTORE(finalExpBN254_T21_21_y)
1654
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1655
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1656
+ A :MSTORE(finalExpBN254_T21_22_x)
1657
+ B :MSTORE(finalExpBN254_T21_22_y)
1658
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1659
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1660
+ A :MSTORE(finalExpBN254_T21_23_x)
1661
+ B :MSTORE(finalExpBN254_T21_23_y)
1662
+
1663
+ ; 10.3] T12 = T11·y3
1664
+ $ => A :MLOAD(finalExpBN254_T11_11_x)
1665
+ $ => B :MLOAD(finalExpBN254_T11_11_y)
1666
+ A :MSTORE(mulFp12BN254_a11_x)
1667
+ B :MSTORE(mulFp12BN254_a11_y)
1668
+ $ => A :MLOAD(finalExpBN254_T11_12_x)
1669
+ $ => B :MLOAD(finalExpBN254_T11_12_y)
1670
+ A :MSTORE(mulFp12BN254_a12_x)
1671
+ B :MSTORE(mulFp12BN254_a12_y)
1672
+ $ => A :MLOAD(finalExpBN254_T11_13_x)
1673
+ $ => B :MLOAD(finalExpBN254_T11_13_y)
1674
+ A :MSTORE(mulFp12BN254_a13_x)
1675
+ B :MSTORE(mulFp12BN254_a13_y)
1676
+ $ => A :MLOAD(finalExpBN254_T11_21_x)
1677
+ $ => B :MLOAD(finalExpBN254_T11_21_y)
1678
+ A :MSTORE(mulFp12BN254_a21_x)
1679
+ B :MSTORE(mulFp12BN254_a21_y)
1680
+ $ => A :MLOAD(finalExpBN254_T11_22_x)
1681
+ $ => B :MLOAD(finalExpBN254_T11_22_y)
1682
+ A :MSTORE(mulFp12BN254_a22_x)
1683
+ B :MSTORE(mulFp12BN254_a22_y)
1684
+ $ => A :MLOAD(finalExpBN254_T11_23_x)
1685
+ $ => B :MLOAD(finalExpBN254_T11_23_y)
1686
+ A :MSTORE(mulFp12BN254_a23_x)
1687
+ B :MSTORE(mulFp12BN254_a23_y)
1688
+ $ => A :MLOAD(finalExpBN254_mxxpp11_x)
1689
+ $ => B :MLOAD(finalExpBN254_mxxpp11_y)
1690
+ A :MSTORE(mulFp12BN254_b11_x)
1691
+ B :MSTORE(mulFp12BN254_b11_y)
1692
+ $ => A :MLOAD(finalExpBN254_mxxpp12_x)
1693
+ $ => B :MLOAD(finalExpBN254_mxxpp12_y)
1694
+ A :MSTORE(mulFp12BN254_b12_x)
1695
+ B :MSTORE(mulFp12BN254_b12_y)
1696
+ $ => A :MLOAD(finalExpBN254_mxxpp13_x)
1697
+ $ => B :MLOAD(finalExpBN254_mxxpp13_y)
1698
+ A :MSTORE(mulFp12BN254_b13_x)
1699
+ B :MSTORE(mulFp12BN254_b13_y)
1700
+ $ => A :MLOAD(finalExpBN254_mxxpp21_x)
1701
+ $ => B :MLOAD(finalExpBN254_mxxpp21_y)
1702
+ A :MSTORE(mulFp12BN254_b21_x)
1703
+ B :MSTORE(mulFp12BN254_b21_y)
1704
+ $ => A :MLOAD(finalExpBN254_mxxpp22_x)
1705
+ $ => B :MLOAD(finalExpBN254_mxxpp22_y)
1706
+ A :MSTORE(mulFp12BN254_b22_x)
1707
+ B :MSTORE(mulFp12BN254_b22_y)
1708
+ $ => A :MLOAD(finalExpBN254_mxxpp23_x)
1709
+ $ => B :MLOAD(finalExpBN254_mxxpp23_y)
1710
+ A :MSTORE(mulFp12BN254_b23_x)
1711
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1712
+
1713
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1714
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1715
+ A :MSTORE(finalExpBN254_T12_11_x)
1716
+ B :MSTORE(finalExpBN254_T12_11_y)
1717
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1718
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1719
+ A :MSTORE(finalExpBN254_T12_12_x)
1720
+ B :MSTORE(finalExpBN254_T12_12_y)
1721
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1722
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1723
+ A :MSTORE(finalExpBN254_T12_13_x)
1724
+ B :MSTORE(finalExpBN254_T12_13_y)
1725
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1726
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1727
+ A :MSTORE(finalExpBN254_T12_21_x)
1728
+ B :MSTORE(finalExpBN254_T12_21_y)
1729
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1730
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1731
+ A :MSTORE(finalExpBN254_T12_22_x)
1732
+ B :MSTORE(finalExpBN254_T12_22_y)
1733
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1734
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1735
+ A :MSTORE(finalExpBN254_T12_23_x)
1736
+ B :MSTORE(finalExpBN254_T12_23_y)
1737
+
1738
+ ; 10.4] T22 = T21²·T12
1739
+ $ => A :MLOAD(finalExpBN254_T21_11_x)
1740
+ $ => B :MLOAD(finalExpBN254_T21_11_y)
1741
+ A :MSTORE(squareCycloFp12BN254_a11_x)
1742
+ B :MSTORE(squareCycloFp12BN254_a11_y)
1743
+ $ => A :MLOAD(finalExpBN254_T21_12_x)
1744
+ $ => B :MLOAD(finalExpBN254_T21_12_y)
1745
+ A :MSTORE(squareCycloFp12BN254_a12_x)
1746
+ B :MSTORE(squareCycloFp12BN254_a12_y)
1747
+ $ => A :MLOAD(finalExpBN254_T21_13_x)
1748
+ $ => B :MLOAD(finalExpBN254_T21_13_y)
1749
+ A :MSTORE(squareCycloFp12BN254_a13_x)
1750
+ B :MSTORE(squareCycloFp12BN254_a13_y)
1751
+ $ => A :MLOAD(finalExpBN254_T21_21_x)
1752
+ $ => B :MLOAD(finalExpBN254_T21_21_y)
1753
+ A :MSTORE(squareCycloFp12BN254_a21_x)
1754
+ B :MSTORE(squareCycloFp12BN254_a21_y)
1755
+ $ => A :MLOAD(finalExpBN254_T21_22_x)
1756
+ $ => B :MLOAD(finalExpBN254_T21_22_y)
1757
+ A :MSTORE(squareCycloFp12BN254_a22_x)
1758
+ B :MSTORE(squareCycloFp12BN254_a22_y)
1759
+ $ => A :MLOAD(finalExpBN254_T21_23_x)
1760
+ $ => B :MLOAD(finalExpBN254_T21_23_y)
1761
+ A :MSTORE(squareCycloFp12BN254_a23_x)
1762
+ B :MSTORE(squareCycloFp12BN254_a23_y), CALL(squareCycloFp12BN254)
1763
+
1764
+ $ => A :MLOAD(squareCycloFp12BN254_c11_x)
1765
+ $ => B :MLOAD(squareCycloFp12BN254_c11_y)
1766
+ A :MSTORE(mulFp12BN254_a11_x)
1767
+ B :MSTORE(mulFp12BN254_a11_y)
1768
+ $ => A :MLOAD(squareCycloFp12BN254_c12_x)
1769
+ $ => B :MLOAD(squareCycloFp12BN254_c12_y)
1770
+ A :MSTORE(mulFp12BN254_a12_x)
1771
+ B :MSTORE(mulFp12BN254_a12_y)
1772
+ $ => A :MLOAD(squareCycloFp12BN254_c13_x)
1773
+ $ => B :MLOAD(squareCycloFp12BN254_c13_y)
1774
+ A :MSTORE(mulFp12BN254_a13_x)
1775
+ B :MSTORE(mulFp12BN254_a13_y)
1776
+ $ => A :MLOAD(squareCycloFp12BN254_c21_x)
1777
+ $ => B :MLOAD(squareCycloFp12BN254_c21_y)
1778
+ A :MSTORE(mulFp12BN254_a21_x)
1779
+ B :MSTORE(mulFp12BN254_a21_y)
1780
+ $ => A :MLOAD(squareCycloFp12BN254_c22_x)
1781
+ $ => B :MLOAD(squareCycloFp12BN254_c22_y)
1782
+ A :MSTORE(mulFp12BN254_a22_x)
1783
+ B :MSTORE(mulFp12BN254_a22_y)
1784
+ $ => A :MLOAD(squareCycloFp12BN254_c23_x)
1785
+ $ => B :MLOAD(squareCycloFp12BN254_c23_y)
1786
+ A :MSTORE(mulFp12BN254_a23_x)
1787
+ B :MSTORE(mulFp12BN254_a23_y)
1788
+ $ => A :MLOAD(finalExpBN254_T12_11_x)
1789
+ $ => B :MLOAD(finalExpBN254_T12_11_y)
1790
+ A :MSTORE(mulFp12BN254_b11_x)
1791
+ B :MSTORE(mulFp12BN254_b11_y)
1792
+ $ => A :MLOAD(finalExpBN254_T12_12_x)
1793
+ $ => B :MLOAD(finalExpBN254_T12_12_y)
1794
+ A :MSTORE(mulFp12BN254_b12_x)
1795
+ B :MSTORE(mulFp12BN254_b12_y)
1796
+ $ => A :MLOAD(finalExpBN254_T12_13_x)
1797
+ $ => B :MLOAD(finalExpBN254_T12_13_y)
1798
+ A :MSTORE(mulFp12BN254_b13_x)
1799
+ B :MSTORE(mulFp12BN254_b13_y)
1800
+ $ => A :MLOAD(finalExpBN254_T12_21_x)
1801
+ $ => B :MLOAD(finalExpBN254_T12_21_y)
1802
+ A :MSTORE(mulFp12BN254_b21_x)
1803
+ B :MSTORE(mulFp12BN254_b21_y)
1804
+ $ => A :MLOAD(finalExpBN254_T12_22_x)
1805
+ $ => B :MLOAD(finalExpBN254_T12_22_y)
1806
+ A :MSTORE(mulFp12BN254_b22_x)
1807
+ B :MSTORE(mulFp12BN254_b22_y)
1808
+ $ => A :MLOAD(finalExpBN254_T12_23_x)
1809
+ $ => B :MLOAD(finalExpBN254_T12_23_y)
1810
+ A :MSTORE(mulFp12BN254_b23_x)
1811
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1812
+
1813
+ ; 10.5] T23 = T22²
1814
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1815
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1816
+ A :MSTORE(squareCycloFp12BN254_a11_x)
1817
+ B :MSTORE(squareCycloFp12BN254_a11_y)
1818
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1819
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1820
+ A :MSTORE(squareCycloFp12BN254_a12_x)
1821
+ B :MSTORE(squareCycloFp12BN254_a12_y)
1822
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1823
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1824
+ A :MSTORE(squareCycloFp12BN254_a13_x)
1825
+ B :MSTORE(squareCycloFp12BN254_a13_y)
1826
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1827
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1828
+ A :MSTORE(squareCycloFp12BN254_a21_x)
1829
+ B :MSTORE(squareCycloFp12BN254_a21_y)
1830
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1831
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1832
+ A :MSTORE(squareCycloFp12BN254_a22_x)
1833
+ B :MSTORE(squareCycloFp12BN254_a22_y)
1834
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1835
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1836
+ A :MSTORE(squareCycloFp12BN254_a23_x)
1837
+ B :MSTORE(squareCycloFp12BN254_a23_y), CALL(squareCycloFp12BN254)
1838
+
1839
+ $ => A :MLOAD(squareCycloFp12BN254_c11_x)
1840
+ $ => B :MLOAD(squareCycloFp12BN254_c11_y)
1841
+ A :MSTORE(finalExpBN254_T23_11_x)
1842
+ B :MSTORE(finalExpBN254_T23_11_y)
1843
+ $ => A :MLOAD(squareCycloFp12BN254_c12_x)
1844
+ $ => B :MLOAD(squareCycloFp12BN254_c12_y)
1845
+ A :MSTORE(finalExpBN254_T23_12_x)
1846
+ B :MSTORE(finalExpBN254_T23_12_y)
1847
+ $ => A :MLOAD(squareCycloFp12BN254_c13_x)
1848
+ $ => B :MLOAD(squareCycloFp12BN254_c13_y)
1849
+ A :MSTORE(finalExpBN254_T23_13_x)
1850
+ B :MSTORE(finalExpBN254_T23_13_y)
1851
+ $ => A :MLOAD(squareCycloFp12BN254_c21_x)
1852
+ $ => B :MLOAD(squareCycloFp12BN254_c21_y)
1853
+ A :MSTORE(finalExpBN254_T23_21_x)
1854
+ B :MSTORE(finalExpBN254_T23_21_y)
1855
+ $ => A :MLOAD(squareCycloFp12BN254_c22_x)
1856
+ $ => B :MLOAD(squareCycloFp12BN254_c22_y)
1857
+ A :MSTORE(finalExpBN254_T23_22_x)
1858
+ B :MSTORE(finalExpBN254_T23_22_y)
1859
+ $ => A :MLOAD(squareCycloFp12BN254_c23_x)
1860
+ $ => B :MLOAD(squareCycloFp12BN254_c23_y)
1861
+ A :MSTORE(finalExpBN254_T23_23_x)
1862
+ B :MSTORE(finalExpBN254_T23_23_y)
1863
+
1864
+ ; 10.6] T24 = T23·y1
1865
+ $ => A :MLOAD(finalExpBN254_T23_11_x)
1866
+ $ => B :MLOAD(finalExpBN254_T23_11_y)
1867
+ A :MSTORE(mulFp12BN254_a11_x)
1868
+ B :MSTORE(mulFp12BN254_a11_y)
1869
+ $ => A :MLOAD(finalExpBN254_T23_12_x)
1870
+ $ => B :MLOAD(finalExpBN254_T23_12_y)
1871
+ A :MSTORE(mulFp12BN254_a12_x)
1872
+ B :MSTORE(mulFp12BN254_a12_y)
1873
+ $ => A :MLOAD(finalExpBN254_T23_13_x)
1874
+ $ => B :MLOAD(finalExpBN254_T23_13_y)
1875
+ A :MSTORE(mulFp12BN254_a13_x)
1876
+ B :MSTORE(mulFp12BN254_a13_y)
1877
+ $ => A :MLOAD(finalExpBN254_T23_21_x)
1878
+ $ => B :MLOAD(finalExpBN254_T23_21_y)
1879
+ A :MSTORE(mulFp12BN254_a21_x)
1880
+ B :MSTORE(mulFp12BN254_a21_y)
1881
+ $ => A :MLOAD(finalExpBN254_T23_22_x)
1882
+ $ => B :MLOAD(finalExpBN254_T23_22_y)
1883
+ A :MSTORE(mulFp12BN254_a22_x)
1884
+ B :MSTORE(mulFp12BN254_a22_y)
1885
+ $ => A :MLOAD(finalExpBN254_T23_23_x)
1886
+ $ => B :MLOAD(finalExpBN254_T23_23_y)
1887
+ A :MSTORE(mulFp12BN254_a23_x)
1888
+ B :MSTORE(mulFp12BN254_a23_y)
1889
+ $ => A :MLOAD(finalExpBN254_y1_11_x)
1890
+ $ => B :MLOAD(finalExpBN254_y1_11_y)
1891
+ A :MSTORE(mulFp12BN254_b11_x)
1892
+ B :MSTORE(mulFp12BN254_b11_y)
1893
+ $ => A :MLOAD(finalExpBN254_y1_12_x)
1894
+ $ => B :MLOAD(finalExpBN254_y1_12_y)
1895
+ A :MSTORE(mulFp12BN254_b12_x)
1896
+ B :MSTORE(mulFp12BN254_b12_y)
1897
+ $ => A :MLOAD(finalExpBN254_y1_13_x)
1898
+ $ => B :MLOAD(finalExpBN254_y1_13_y)
1899
+ A :MSTORE(mulFp12BN254_b13_x)
1900
+ B :MSTORE(mulFp12BN254_b13_y)
1901
+ $ => A :MLOAD(finalExpBN254_y1_21_x)
1902
+ $ => B :MLOAD(finalExpBN254_y1_21_y)
1903
+ A :MSTORE(mulFp12BN254_b21_x)
1904
+ B :MSTORE(mulFp12BN254_b21_y)
1905
+ $ => A :MLOAD(finalExpBN254_y1_22_x)
1906
+ $ => B :MLOAD(finalExpBN254_y1_22_y)
1907
+ A :MSTORE(mulFp12BN254_b22_x)
1908
+ B :MSTORE(mulFp12BN254_b22_y)
1909
+ $ => A :MLOAD(finalExpBN254_y1_23_x)
1910
+ $ => B :MLOAD(finalExpBN254_y1_23_y)
1911
+ A :MSTORE(mulFp12BN254_b23_x)
1912
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1913
+
1914
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1915
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1916
+ A :MSTORE(finalExpBN254_T24_11_x)
1917
+ B :MSTORE(finalExpBN254_T24_11_y)
1918
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1919
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1920
+ A :MSTORE(finalExpBN254_T24_12_x)
1921
+ B :MSTORE(finalExpBN254_T24_12_y)
1922
+ $ => A :MLOAD(mulFp12BN254_c13_x)
1923
+ $ => B :MLOAD(mulFp12BN254_c13_y)
1924
+ A :MSTORE(finalExpBN254_T24_13_x)
1925
+ B :MSTORE(finalExpBN254_T24_13_y)
1926
+ $ => A :MLOAD(mulFp12BN254_c21_x)
1927
+ $ => B :MLOAD(mulFp12BN254_c21_y)
1928
+ A :MSTORE(finalExpBN254_T24_21_x)
1929
+ B :MSTORE(finalExpBN254_T24_21_y)
1930
+ $ => A :MLOAD(mulFp12BN254_c22_x)
1931
+ $ => B :MLOAD(mulFp12BN254_c22_y)
1932
+ A :MSTORE(finalExpBN254_T24_22_x)
1933
+ B :MSTORE(finalExpBN254_T24_22_y)
1934
+ $ => A :MLOAD(mulFp12BN254_c23_x)
1935
+ $ => B :MLOAD(mulFp12BN254_c23_y)
1936
+ A :MSTORE(finalExpBN254_T24_23_x)
1937
+ B :MSTORE(finalExpBN254_T24_23_y)
1938
+
1939
+
1940
+ ; 10.7] T13 = T23·y2
1941
+ $ => A :MLOAD(finalExpBN254_T23_11_x)
1942
+ $ => B :MLOAD(finalExpBN254_T23_11_y)
1943
+ A :MSTORE(mulFp12BN254_a11_x)
1944
+ B :MSTORE(mulFp12BN254_a11_y)
1945
+ $ => A :MLOAD(finalExpBN254_T23_12_x)
1946
+ $ => B :MLOAD(finalExpBN254_T23_12_y)
1947
+ A :MSTORE(mulFp12BN254_a12_x)
1948
+ B :MSTORE(mulFp12BN254_a12_y)
1949
+ $ => A :MLOAD(finalExpBN254_T23_13_x)
1950
+ $ => B :MLOAD(finalExpBN254_T23_13_y)
1951
+ A :MSTORE(mulFp12BN254_a13_x)
1952
+ B :MSTORE(mulFp12BN254_a13_y)
1953
+ $ => A :MLOAD(finalExpBN254_T23_21_x)
1954
+ $ => B :MLOAD(finalExpBN254_T23_21_y)
1955
+ A :MSTORE(mulFp12BN254_a21_x)
1956
+ B :MSTORE(mulFp12BN254_a21_y)
1957
+ $ => A :MLOAD(finalExpBN254_T23_22_x)
1958
+ $ => B :MLOAD(finalExpBN254_T23_22_y)
1959
+ A :MSTORE(mulFp12BN254_a22_x)
1960
+ B :MSTORE(mulFp12BN254_a22_y)
1961
+ $ => A :MLOAD(finalExpBN254_T23_23_x)
1962
+ $ => B :MLOAD(finalExpBN254_T23_23_y)
1963
+ A :MSTORE(mulFp12BN254_a23_x)
1964
+ B :MSTORE(mulFp12BN254_a23_y)
1965
+ $ => A :MLOAD(finalExpBN254_y2_11_x)
1966
+ $ => B :MLOAD(finalExpBN254_y2_11_y)
1967
+ A :MSTORE(mulFp12BN254_b11_x)
1968
+ B :MSTORE(mulFp12BN254_b11_y)
1969
+ $ => A :MLOAD(finalExpBN254_y2_12_x)
1970
+ $ => B :MLOAD(finalExpBN254_y2_12_y)
1971
+ A :MSTORE(mulFp12BN254_b12_x)
1972
+ B :MSTORE(mulFp12BN254_b12_y)
1973
+ $ => A :MLOAD(finalExpBN254_y2_13_x)
1974
+ $ => B :MLOAD(finalExpBN254_y2_13_y)
1975
+ A :MSTORE(mulFp12BN254_b13_x)
1976
+ B :MSTORE(mulFp12BN254_b13_y)
1977
+ $ => A :MLOAD(finalExpBN254_y2_21_x)
1978
+ $ => B :MLOAD(finalExpBN254_y2_21_y)
1979
+ A :MSTORE(mulFp12BN254_b21_x)
1980
+ B :MSTORE(mulFp12BN254_b21_y)
1981
+ $ => A :MLOAD(finalExpBN254_y2_22_x)
1982
+ $ => B :MLOAD(finalExpBN254_y2_22_y)
1983
+ A :MSTORE(mulFp12BN254_b22_x)
1984
+ B :MSTORE(mulFp12BN254_b22_y)
1985
+ $ => A :MLOAD(finalExpBN254_y2_23_x)
1986
+ $ => B :MLOAD(finalExpBN254_y2_23_y)
1987
+ A :MSTORE(mulFp12BN254_b23_x)
1988
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
1989
+
1990
+
1991
+ ; 10.8] T14 = T13²·T24
1992
+ $ => A :MLOAD(mulFp12BN254_c11_x)
1993
+ $ => B :MLOAD(mulFp12BN254_c11_y)
1994
+ A :MSTORE(squareCycloFp12BN254_a11_x)
1995
+ B :MSTORE(squareCycloFp12BN254_a11_y)
1996
+ $ => A :MLOAD(mulFp12BN254_c12_x)
1997
+ $ => B :MLOAD(mulFp12BN254_c12_y)
1998
+ A :MSTORE(squareCycloFp12BN254_a12_x)
1999
+ B :MSTORE(squareCycloFp12BN254_a12_y)
2000
+ $ => A :MLOAD(mulFp12BN254_c13_x)
2001
+ $ => B :MLOAD(mulFp12BN254_c13_y)
2002
+ A :MSTORE(squareCycloFp12BN254_a13_x)
2003
+ B :MSTORE(squareCycloFp12BN254_a13_y)
2004
+ $ => A :MLOAD(mulFp12BN254_c21_x)
2005
+ $ => B :MLOAD(mulFp12BN254_c21_y)
2006
+ A :MSTORE(squareCycloFp12BN254_a21_x)
2007
+ B :MSTORE(squareCycloFp12BN254_a21_y)
2008
+ $ => A :MLOAD(mulFp12BN254_c22_x)
2009
+ $ => B :MLOAD(mulFp12BN254_c22_y)
2010
+ A :MSTORE(squareCycloFp12BN254_a22_x)
2011
+ B :MSTORE(squareCycloFp12BN254_a22_y)
2012
+ $ => A :MLOAD(mulFp12BN254_c23_x)
2013
+ $ => B :MLOAD(mulFp12BN254_c23_y)
2014
+ A :MSTORE(squareCycloFp12BN254_a23_x)
2015
+ B :MSTORE(squareCycloFp12BN254_a23_y), CALL(squareCycloFp12BN254)
2016
+
2017
+ $ => A :MLOAD(squareCycloFp12BN254_c11_x)
2018
+ $ => B :MLOAD(squareCycloFp12BN254_c11_y)
2019
+ A :MSTORE(mulFp12BN254_a11_x)
2020
+ B :MSTORE(mulFp12BN254_a11_y)
2021
+ $ => A :MLOAD(squareCycloFp12BN254_c12_x)
2022
+ $ => B :MLOAD(squareCycloFp12BN254_c12_y)
2023
+ A :MSTORE(mulFp12BN254_a12_x)
2024
+ B :MSTORE(mulFp12BN254_a12_y)
2025
+ $ => A :MLOAD(squareCycloFp12BN254_c13_x)
2026
+ $ => B :MLOAD(squareCycloFp12BN254_c13_y)
2027
+ A :MSTORE(mulFp12BN254_a13_x)
2028
+ B :MSTORE(mulFp12BN254_a13_y)
2029
+ $ => A :MLOAD(squareCycloFp12BN254_c21_x)
2030
+ $ => B :MLOAD(squareCycloFp12BN254_c21_y)
2031
+ A :MSTORE(mulFp12BN254_a21_x)
2032
+ B :MSTORE(mulFp12BN254_a21_y)
2033
+ $ => A :MLOAD(squareCycloFp12BN254_c22_x)
2034
+ $ => B :MLOAD(squareCycloFp12BN254_c22_y)
2035
+ A :MSTORE(mulFp12BN254_a22_x)
2036
+ B :MSTORE(mulFp12BN254_a22_y)
2037
+ $ => A :MLOAD(squareCycloFp12BN254_c23_x)
2038
+ $ => B :MLOAD(squareCycloFp12BN254_c23_y)
2039
+ A :MSTORE(mulFp12BN254_a23_x)
2040
+ B :MSTORE(mulFp12BN254_a23_y)
2041
+ $ => A :MLOAD(finalExpBN254_T24_11_x)
2042
+ $ => B :MLOAD(finalExpBN254_T24_11_y)
2043
+ A :MSTORE(mulFp12BN254_b11_x)
2044
+ B :MSTORE(mulFp12BN254_b11_y)
2045
+ $ => A :MLOAD(finalExpBN254_T24_12_x)
2046
+ $ => B :MLOAD(finalExpBN254_T24_12_y)
2047
+ A :MSTORE(mulFp12BN254_b12_x)
2048
+ B :MSTORE(mulFp12BN254_b12_y)
2049
+ $ => A :MLOAD(finalExpBN254_T24_13_x)
2050
+ $ => B :MLOAD(finalExpBN254_T24_13_y)
2051
+ A :MSTORE(mulFp12BN254_b13_x)
2052
+ B :MSTORE(mulFp12BN254_b13_y)
2053
+ $ => A :MLOAD(finalExpBN254_T24_21_x)
2054
+ $ => B :MLOAD(finalExpBN254_T24_21_y)
2055
+ A :MSTORE(mulFp12BN254_b21_x)
2056
+ B :MSTORE(mulFp12BN254_b21_y)
2057
+ $ => A :MLOAD(finalExpBN254_T24_22_x)
2058
+ $ => B :MLOAD(finalExpBN254_T24_22_y)
2059
+ A :MSTORE(mulFp12BN254_b22_x)
2060
+ B :MSTORE(mulFp12BN254_b22_y)
2061
+ $ => A :MLOAD(finalExpBN254_T24_23_x)
2062
+ $ => B :MLOAD(finalExpBN254_T24_23_y)
2063
+ A :MSTORE(mulFp12BN254_b23_x)
2064
+ B :MSTORE(mulFp12BN254_b23_y), CALL(mulFp12BN254)
2065
+ ; ===========================================
2066
+
2067
+ ; Assing the result.
2068
+ $ => A :MLOAD(mulFp12BN254_c11_x)
2069
+ $ => B :MLOAD(mulFp12BN254_c11_y)
2070
+ A :MSTORE(finalExpBN254_f11_x)
2071
+ B :MSTORE(finalExpBN254_f11_y)
2072
+ $ => A :MLOAD(mulFp12BN254_c12_x)
2073
+ $ => B :MLOAD(mulFp12BN254_c12_y)
2074
+ A :MSTORE(finalExpBN254_f12_x)
2075
+ B :MSTORE(finalExpBN254_f12_y)
2076
+ $ => A :MLOAD(mulFp12BN254_c13_x)
2077
+ $ => B :MLOAD(mulFp12BN254_c13_y)
2078
+ A :MSTORE(finalExpBN254_f13_x)
2079
+ B :MSTORE(finalExpBN254_f13_y)
2080
+ $ => A :MLOAD(mulFp12BN254_c21_x)
2081
+ $ => B :MLOAD(mulFp12BN254_c21_y)
2082
+ A :MSTORE(finalExpBN254_f21_x)
2083
+ B :MSTORE(finalExpBN254_f21_y)
2084
+ $ => A :MLOAD(mulFp12BN254_c22_x)
2085
+ $ => B :MLOAD(mulFp12BN254_c22_y)
2086
+ A :MSTORE(finalExpBN254_f22_x)
2087
+ B :MSTORE(finalExpBN254_f22_y)
2088
+ $ => A :MLOAD(mulFp12BN254_c23_x)
2089
+ $ => B :MLOAD(mulFp12BN254_c23_y)
2090
+ A :MSTORE(finalExpBN254_f23_x)
2091
+ B :MSTORE(finalExpBN254_f23_y)
2092
+
2093
+ finalExpBN254_end:
2094
+ $ => RR :MLOAD(finalExpBN254_RR)
2095
+ :RETURN