visaljs 0.0.1 → 0.0.3

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.
Files changed (1008) hide show
  1. package/README.md +17 -1
  2. package/cli.js +565 -75
  3. package/node/include/js_node.h +28 -5
  4. package/node/include/js_uv.h +36 -0
  5. package/node/prelude/crypto.js +7 -10
  6. package/node/prelude/dns.js +99 -0
  7. package/node/prelude/dns_promises.js +10 -0
  8. package/node/prelude/http.js +1039 -195
  9. package/node/prelude/internal/crypto/asym.js +39 -12
  10. package/node/prelude/internal/crypto/dh_groups.js +12 -0
  11. package/node/prelude/internal/crypto/diffiehellman.js +354 -0
  12. package/node/prelude/internal/crypto/hash.js +1 -1
  13. package/node/prelude/internal/crypto/key_type.js +3 -0
  14. package/node/prelude/internal/crypto/keys.js +39 -9
  15. package/node/prelude/internal/http_agent.js +249 -0
  16. package/node/prelude/internal/net.js +33 -0
  17. package/node/prelude/internal/socketaddress.js +249 -0
  18. package/node/prelude/internal/tls/common.js +306 -0
  19. package/node/prelude/internal/tls/wrap.js +1217 -0
  20. package/node/prelude/internal/tls/x509.js +394 -0
  21. package/node/prelude/net.js +1083 -50
  22. package/node/prelude/stream.js +6 -0
  23. package/node/prelude/tls.js +141 -0
  24. package/node/prelude/util.js +5 -2
  25. package/node/prelude/util_types.js +85 -0
  26. package/node/src/host_http.c +268 -270
  27. package/node/src/host_loop.c +84 -0
  28. package/node/src/host_net.c +495 -0
  29. package/node/src/host_sys.c +16 -0
  30. package/package.json +1 -1
  31. package/runtime/include/js_builtins.h +16 -0
  32. package/runtime/include/js_console.h +2 -0
  33. package/runtime/include/js_core.def +23 -0
  34. package/runtime/include/js_crypto.h +23 -0
  35. package/runtime/include/js_generator.h +2 -3
  36. package/runtime/include/js_promise.h +0 -2
  37. package/runtime/src/async_iter.c +4 -1
  38. package/runtime/src/boringssl_support.cc +34 -0
  39. package/runtime/src/builtin_table.c +8 -0
  40. package/runtime/src/components.c +10 -0
  41. package/runtime/src/console.c +6 -18
  42. package/runtime/src/core_all.c +1 -0
  43. package/runtime/src/crypto_asym.c +450 -241
  44. package/runtime/src/crypto_bn.c +91 -0
  45. package/runtime/src/crypto_cipher.c +153 -75
  46. package/runtime/src/crypto_hash.c +68 -53
  47. package/runtime/src/crypto_internal.h +55 -26
  48. package/runtime/src/crypto_pkey.c +198 -61
  49. package/runtime/src/crypto_subtle.c +42 -16
  50. package/runtime/src/crypto_tls.c +678 -0
  51. package/runtime/src/generator.c +8 -1
  52. package/runtime/src/global.c +2 -4
  53. package/runtime/src/internal.h +0 -1
  54. package/runtime/src/jobs.c +2 -1
  55. package/runtime/src/promise.c +4 -1
  56. package/runtime/src/tls_roots.gen.h +3215 -0
  57. package/runtime/src/util_types.c +52 -0
  58. package/runtime/src/weak.c +2 -1
  59. package/runtime/third_party/boringssl/LICENSE +238 -0
  60. package/runtime/third_party/boringssl/README.md +46 -0
  61. package/runtime/third_party/boringssl/VERSION +1 -0
  62. package/runtime/third_party/boringssl/crypto/aes/aes.cc +44 -0
  63. package/runtime/third_party/boringssl/crypto/armv8_feature_parsing.h +67 -0
  64. package/runtime/third_party/boringssl/crypto/asn1/a_bitstr.cc +297 -0
  65. package/runtime/third_party/boringssl/crypto/asn1/a_bool.cc +50 -0
  66. package/runtime/third_party/boringssl/crypto/asn1/a_d2i_fp.cc +47 -0
  67. package/runtime/third_party/boringssl/crypto/asn1/a_dup.cc +42 -0
  68. package/runtime/third_party/boringssl/crypto/asn1/a_gentm.cc +130 -0
  69. package/runtime/third_party/boringssl/crypto/asn1/a_i2d_fp.cc +44 -0
  70. package/runtime/third_party/boringssl/crypto/asn1/a_int.cc +467 -0
  71. package/runtime/third_party/boringssl/crypto/asn1/a_mbstr.cc +242 -0
  72. package/runtime/third_party/boringssl/crypto/asn1/a_object.cc +191 -0
  73. package/runtime/third_party/boringssl/crypto/asn1/a_octet.cc +32 -0
  74. package/runtime/third_party/boringssl/crypto/asn1/a_strex.cc +411 -0
  75. package/runtime/third_party/boringssl/crypto/asn1/a_strnid.cc +208 -0
  76. package/runtime/third_party/boringssl/crypto/asn1/a_time.cc +248 -0
  77. package/runtime/third_party/boringssl/crypto/asn1/a_type.cc +467 -0
  78. package/runtime/third_party/boringssl/crypto/asn1/a_utctm.cc +128 -0
  79. package/runtime/third_party/boringssl/crypto/asn1/asn1_lib.cc +453 -0
  80. package/runtime/third_party/boringssl/crypto/asn1/asn1_par.cc +61 -0
  81. package/runtime/third_party/boringssl/crypto/asn1/asn_pack.cc +56 -0
  82. package/runtime/third_party/boringssl/crypto/asn1/f_int.cc +63 -0
  83. package/runtime/third_party/boringssl/crypto/asn1/f_string.cc +52 -0
  84. package/runtime/third_party/boringssl/crypto/asn1/internal.h +430 -0
  85. package/runtime/third_party/boringssl/crypto/asn1/posix_time.cc +244 -0
  86. package/runtime/third_party/boringssl/crypto/asn1/tasn_dec.cc +611 -0
  87. package/runtime/third_party/boringssl/crypto/asn1/tasn_enc.cc +348 -0
  88. package/runtime/third_party/boringssl/crypto/asn1/tasn_fre.cc +163 -0
  89. package/runtime/third_party/boringssl/crypto/asn1/tasn_new.cc +274 -0
  90. package/runtime/third_party/boringssl/crypto/asn1/tasn_typ.cc +92 -0
  91. package/runtime/third_party/boringssl/crypto/asn1/tasn_utl.cc +218 -0
  92. package/runtime/third_party/boringssl/crypto/base64/base64.cc +433 -0
  93. package/runtime/third_party/boringssl/crypto/bcm_support.h +62 -0
  94. package/runtime/third_party/boringssl/crypto/bio/bio.cc +715 -0
  95. package/runtime/third_party/boringssl/crypto/bio/bio_mem.cc +260 -0
  96. package/runtime/third_party/boringssl/crypto/bio/connect.cc +463 -0
  97. package/runtime/third_party/boringssl/crypto/bio/errno.cc +52 -0
  98. package/runtime/third_party/boringssl/crypto/bio/fd.cc +193 -0
  99. package/runtime/third_party/boringssl/crypto/bio/file.cc +283 -0
  100. package/runtime/third_party/boringssl/crypto/bio/hexdump.cc +154 -0
  101. package/runtime/third_party/boringssl/crypto/bio/internal.h +128 -0
  102. package/runtime/third_party/boringssl/crypto/bio/pair.cc +426 -0
  103. package/runtime/third_party/boringssl/crypto/bio/printf.cc +59 -0
  104. package/runtime/third_party/boringssl/crypto/bio/socket.cc +210 -0
  105. package/runtime/third_party/boringssl/crypto/bio/socket_helper.cc +179 -0
  106. package/runtime/third_party/boringssl/crypto/blake2/blake2.cc +173 -0
  107. package/runtime/third_party/boringssl/crypto/bn/bn_asn1.cc +57 -0
  108. package/runtime/third_party/boringssl/crypto/bn/convert.cc +409 -0
  109. package/runtime/third_party/boringssl/crypto/bn/div.cc +102 -0
  110. package/runtime/third_party/boringssl/crypto/bn/exponentiation.cc +168 -0
  111. package/runtime/third_party/boringssl/crypto/bn/sqrt.cc +93 -0
  112. package/runtime/third_party/boringssl/crypto/buf/buf.cc +119 -0
  113. package/runtime/third_party/boringssl/crypto/bytestring/asn1_compat.cc +54 -0
  114. package/runtime/third_party/boringssl/crypto/bytestring/ber.cc +268 -0
  115. package/runtime/third_party/boringssl/crypto/bytestring/cbb.cc +787 -0
  116. package/runtime/third_party/boringssl/crypto/bytestring/cbs.cc +977 -0
  117. package/runtime/third_party/boringssl/crypto/bytestring/internal.h +134 -0
  118. package/runtime/third_party/boringssl/crypto/bytestring/unicode.cc +156 -0
  119. package/runtime/third_party/boringssl/crypto/chacha/chacha.cc +226 -0
  120. package/runtime/third_party/boringssl/crypto/chacha/internal.h +103 -0
  121. package/runtime/third_party/boringssl/crypto/cipher/derive_key.cc +106 -0
  122. package/runtime/third_party/boringssl/crypto/cipher/e_aesctrhmac.cc +294 -0
  123. package/runtime/third_party/boringssl/crypto/cipher/e_aeseax.cc +351 -0
  124. package/runtime/third_party/boringssl/crypto/cipher/e_aesgcmsiv.cc +918 -0
  125. package/runtime/third_party/boringssl/crypto/cipher/e_chacha20poly1305.cc +404 -0
  126. package/runtime/third_party/boringssl/crypto/cipher/e_des.cc +214 -0
  127. package/runtime/third_party/boringssl/crypto/cipher/e_null.cc +55 -0
  128. package/runtime/third_party/boringssl/crypto/cipher/e_rc2.cc +432 -0
  129. package/runtime/third_party/boringssl/crypto/cipher/e_rc4.cc +56 -0
  130. package/runtime/third_party/boringssl/crypto/cipher/e_tls.cc +615 -0
  131. package/runtime/third_party/boringssl/crypto/cipher/get_cipher.cc +85 -0
  132. package/runtime/third_party/boringssl/crypto/cipher/internal.h +399 -0
  133. package/runtime/third_party/boringssl/crypto/cipher/tls_cbc.cc +476 -0
  134. package/runtime/third_party/boringssl/crypto/cms/cms.cc +178 -0
  135. package/runtime/third_party/boringssl/crypto/conf/conf.cc +637 -0
  136. package/runtime/third_party/boringssl/crypto/conf/internal.h +54 -0
  137. package/runtime/third_party/boringssl/crypto/cpu_aarch64_apple.cc +76 -0
  138. package/runtime/third_party/boringssl/crypto/cpu_aarch64_fuchsia.cc +58 -0
  139. package/runtime/third_party/boringssl/crypto/cpu_aarch64_linux.cc +66 -0
  140. package/runtime/third_party/boringssl/crypto/cpu_aarch64_openbsd.cc +45 -0
  141. package/runtime/third_party/boringssl/crypto/cpu_aarch64_sysreg.cc +66 -0
  142. package/runtime/third_party/boringssl/crypto/cpu_aarch64_win.cc +52 -0
  143. package/runtime/third_party/boringssl/crypto/cpu_arm_freebsd.cc +55 -0
  144. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.cc +173 -0
  145. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.h +141 -0
  146. package/runtime/third_party/boringssl/crypto/cpu_intel.cc +287 -0
  147. package/runtime/third_party/boringssl/crypto/crypto.cc +152 -0
  148. package/runtime/third_party/boringssl/crypto/curve25519/asm/x25519-asm-arm.S +2124 -0
  149. package/runtime/third_party/boringssl/crypto/curve25519/cpace.cc +227 -0
  150. package/runtime/third_party/boringssl/crypto/curve25519/curve25519.cc +2436 -0
  151. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_64_adx.cc +18 -0
  152. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_tables.h +3264 -0
  153. package/runtime/third_party/boringssl/crypto/curve25519/internal.h +202 -0
  154. package/runtime/third_party/boringssl/crypto/curve25519/spake25519.cc +532 -0
  155. package/runtime/third_party/boringssl/crypto/des/des.cc +837 -0
  156. package/runtime/third_party/boringssl/crypto/des/internal.h +144 -0
  157. package/runtime/third_party/boringssl/crypto/dh/dh_asn1.cc +109 -0
  158. package/runtime/third_party/boringssl/crypto/dh/params.cc +411 -0
  159. package/runtime/third_party/boringssl/crypto/digest/digest_extra.cc +361 -0
  160. package/runtime/third_party/boringssl/crypto/dsa/dsa.cc +922 -0
  161. package/runtime/third_party/boringssl/crypto/dsa/dsa_asn1.cc +306 -0
  162. package/runtime/third_party/boringssl/crypto/dsa/internal.h +56 -0
  163. package/runtime/third_party/boringssl/crypto/ec/ec_asn1.cc +542 -0
  164. package/runtime/third_party/boringssl/crypto/ec/ec_derive.cc +94 -0
  165. package/runtime/third_party/boringssl/crypto/ec/hash_to_curve.cc +773 -0
  166. package/runtime/third_party/boringssl/crypto/ec/internal.h +114 -0
  167. package/runtime/third_party/boringssl/crypto/ecdh/ecdh.cc +75 -0
  168. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.cc +337 -0
  169. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  170. package/runtime/third_party/boringssl/crypto/engine/engine.cc +95 -0
  171. package/runtime/third_party/boringssl/crypto/err/err.cc +820 -0
  172. package/runtime/third_party/boringssl/crypto/err/internal.h +45 -0
  173. package/runtime/third_party/boringssl/crypto/evp/evp.cc +454 -0
  174. package/runtime/third_party/boringssl/crypto/evp/evp_asn1.cc +439 -0
  175. package/runtime/third_party/boringssl/crypto/evp/evp_ctx.cc +541 -0
  176. package/runtime/third_party/boringssl/crypto/evp/evp_kem.cc +101 -0
  177. package/runtime/third_party/boringssl/crypto/evp/internal.h +427 -0
  178. package/runtime/third_party/boringssl/crypto/evp/p_dh.cc +326 -0
  179. package/runtime/third_party/boringssl/crypto/evp/p_dsa.cc +333 -0
  180. package/runtime/third_party/boringssl/crypto/evp/p_ec.cc +736 -0
  181. package/runtime/third_party/boringssl/crypto/evp/p_ed25519.cc +359 -0
  182. package/runtime/third_party/boringssl/crypto/evp/p_hkdf.cc +204 -0
  183. package/runtime/third_party/boringssl/crypto/evp/p_mldsa.cc +549 -0
  184. package/runtime/third_party/boringssl/crypto/evp/p_mlkem.cc +510 -0
  185. package/runtime/third_party/boringssl/crypto/evp/p_rsa.cc +1185 -0
  186. package/runtime/third_party/boringssl/crypto/evp/p_x25519.cc +371 -0
  187. package/runtime/third_party/boringssl/crypto/evp/p_xwing.cc +300 -0
  188. package/runtime/third_party/boringssl/crypto/evp/pbkdf.cc +105 -0
  189. package/runtime/third_party/boringssl/crypto/evp/print.cc +287 -0
  190. package/runtime/third_party/boringssl/crypto/evp/scrypt.cc +218 -0
  191. package/runtime/third_party/boringssl/crypto/evp/sign.cc +95 -0
  192. package/runtime/third_party/boringssl/crypto/ex_data.cc +140 -0
  193. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes.cc.inc +208 -0
  194. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes_nohw.cc.inc +1279 -0
  195. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cbc.cc.inc +132 -0
  196. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cfb.cc.inc +168 -0
  197. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ctr.cc.inc +102 -0
  198. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm.cc.inc +614 -0
  199. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm_nohw.cc.inc +304 -0
  200. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/internal.h +590 -0
  201. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.cc.inc +211 -0
  202. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.cc.inc +97 -0
  203. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ofb.cc.inc +55 -0
  204. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm.cc +288 -0
  205. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm_interface.h +953 -0
  206. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/add.cc.inc +276 -0
  207. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +573 -0
  208. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bn.cc.inc +377 -0
  209. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bytes.cc.inc +230 -0
  210. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/cmp.cc.inc +161 -0
  211. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/ctx.cc.inc +127 -0
  212. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div.cc.inc +738 -0
  213. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div_extra.cc.inc +90 -0
  214. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.cc.inc +743 -0
  215. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd.cc.inc +281 -0
  216. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.cc.inc +327 -0
  217. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/generic.cc.inc +579 -0
  218. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/internal.h +810 -0
  219. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/jacobi.cc.inc +101 -0
  220. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery.cc.inc +408 -0
  221. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.cc.inc +179 -0
  222. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/mul.cc.inc +347 -0
  223. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/prime.cc.inc +931 -0
  224. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/random.cc.inc +261 -0
  225. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.cc.inc +144 -0
  226. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +109 -0
  227. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/shift.cc.inc +317 -0
  228. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/sqrt.cc.inc +370 -0
  229. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/aead.cc.inc +619 -0
  230. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/cipher.cc.inc +837 -0
  231. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.cc.inc +1240 -0
  232. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aesccm.cc.inc +440 -0
  233. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +461 -0
  234. package/runtime/third_party/boringssl/crypto/fipsmodule/cmac/cmac.cc.inc +293 -0
  235. package/runtime/third_party/boringssl/crypto/fipsmodule/delocate.h +95 -0
  236. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/check.cc.inc +198 -0
  237. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/dh.cc.inc +401 -0
  238. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/internal.h +63 -0
  239. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digest.cc.inc +221 -0
  240. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digests.cc.inc +184 -0
  241. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/internal.h +72 -0
  242. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +166 -0
  243. package/runtime/third_party/boringssl/crypto/fipsmodule/digestsign/digestsign.cc.inc +230 -0
  244. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  245. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec.cc.inc +1024 -0
  246. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_key.cc.inc +536 -0
  247. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.cc.inc +379 -0
  248. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/felem.cc.inc +250 -0
  249. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/internal.h +752 -0
  250. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/oct.cc.inc +174 -0
  251. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz-table.h +9502 -0
  252. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.cc.inc +740 -0
  253. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.h +207 -0
  254. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256.cc.inc +578 -0
  255. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256_table.h +297 -0
  256. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/scalar.cc.inc +184 -0
  257. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple.cc.inc +246 -0
  258. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.cc.inc +274 -0
  259. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/util.cc.inc +258 -0
  260. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/wnaf.cc.inc +224 -0
  261. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.cc.inc +91 -0
  262. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +288 -0
  263. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/internal.h +57 -0
  264. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/internal.h +38 -0
  265. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/jitter.cc.inc +487 -0
  266. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  267. package/runtime/third_party/boringssl/crypto/fipsmodule/fips_shared_support.cc +28 -0
  268. package/runtime/third_party/boringssl/crypto/fipsmodule/hkdf/hkdf.cc.inc +114 -0
  269. package/runtime/third_party/boringssl/crypto/fipsmodule/hmac/hmac.cc.inc +218 -0
  270. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/internal.h +165 -0
  271. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/keccak.cc.inc +647 -0
  272. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  273. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/mldsa.cc.inc +3323 -0
  274. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  275. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/mlkem.cc.inc +1856 -0
  276. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  277. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.cc.inc +401 -0
  278. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/internal.h +99 -0
  279. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/rand.cc.inc +486 -0
  280. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +167 -0
  281. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/padding.cc.inc +371 -0
  282. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa.cc.inc +996 -0
  283. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.cc.inc +1000 -0
  284. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/fips.cc.inc +129 -0
  285. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/self_check.cc.inc +1093 -0
  286. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/internal.h +112 -0
  287. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +330 -0
  288. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/internal.h +205 -0
  289. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha1.cc.inc +404 -0
  290. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha256.cc.inc +315 -0
  291. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha512.cc.inc +473 -0
  292. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/address.h +144 -0
  293. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  294. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.cc.inc +179 -0
  295. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.h +48 -0
  296. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.cc.inc +164 -0
  297. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.h +58 -0
  298. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/params.h +178 -0
  299. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +690 -0
  300. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.cc.inc +326 -0
  301. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.h +71 -0
  302. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.cc.inc +172 -0
  303. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.h +40 -0
  304. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/internal.h +33 -0
  305. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/kdf.cc.inc +180 -0
  306. package/runtime/third_party/boringssl/crypto/fuzzer_mode.cc +30 -0
  307. package/runtime/third_party/boringssl/crypto/hpke/hpke.cc +1514 -0
  308. package/runtime/third_party/boringssl/crypto/hrss/asm/poly_rq_mul.S +8489 -0
  309. package/runtime/third_party/boringssl/crypto/hrss/hrss.cc +2189 -0
  310. package/runtime/third_party/boringssl/crypto/hrss/internal.h +64 -0
  311. package/runtime/third_party/boringssl/crypto/internal.h +1767 -0
  312. package/runtime/third_party/boringssl/crypto/lhash/internal.h +222 -0
  313. package/runtime/third_party/boringssl/crypto/lhash/lhash.cc +312 -0
  314. package/runtime/third_party/boringssl/crypto/md4/md4.cc +207 -0
  315. package/runtime/third_party/boringssl/crypto/md5/internal.h +34 -0
  316. package/runtime/third_party/boringssl/crypto/md5/md5.cc +255 -0
  317. package/runtime/third_party/boringssl/crypto/mem.cc +577 -0
  318. package/runtime/third_party/boringssl/crypto/mem_internal.h +706 -0
  319. package/runtime/third_party/boringssl/crypto/mldsa/mldsa.cc +296 -0
  320. package/runtime/third_party/boringssl/crypto/mlkem/mlkem.cc +108 -0
  321. package/runtime/third_party/boringssl/crypto/obj/obj.cc +494 -0
  322. package/runtime/third_party/boringssl/crypto/obj/obj_dat.h +11722 -0
  323. package/runtime/third_party/boringssl/crypto/obj/obj_xref.cc +83 -0
  324. package/runtime/third_party/boringssl/crypto/params_internal.h +30 -0
  325. package/runtime/third_party/boringssl/crypto/pem/internal.h +135 -0
  326. package/runtime/third_party/boringssl/crypto/pem/pem_all.cc +153 -0
  327. package/runtime/third_party/boringssl/crypto/pem/pem_info.cc +250 -0
  328. package/runtime/third_party/boringssl/crypto/pem/pem_lib.cc +707 -0
  329. package/runtime/third_party/boringssl/crypto/pem/pem_oth.cc +45 -0
  330. package/runtime/third_party/boringssl/crypto/pem/pem_pk8.cc +211 -0
  331. package/runtime/third_party/boringssl/crypto/pem/pem_pkey.cc +147 -0
  332. package/runtime/third_party/boringssl/crypto/pem/pem_x509.cc +25 -0
  333. package/runtime/third_party/boringssl/crypto/pem/pem_xaux.cc +25 -0
  334. package/runtime/third_party/boringssl/crypto/pkcs7/internal.h +67 -0
  335. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7.cc +198 -0
  336. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7_x509.cc +527 -0
  337. package/runtime/third_party/boringssl/crypto/pkcs8/internal.h +98 -0
  338. package/runtime/third_party/boringssl/crypto/pkcs8/p5_pbev2.cc +286 -0
  339. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8.cc +473 -0
  340. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8_x509.cc +1328 -0
  341. package/runtime/third_party/boringssl/crypto/poly1305/internal.h +54 -0
  342. package/runtime/third_party/boringssl/crypto/poly1305/poly1305.cc +315 -0
  343. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm.cc +294 -0
  344. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm_asm.S +2017 -0
  345. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_vec.cc +853 -0
  346. package/runtime/third_party/boringssl/crypto/pool/internal.h +95 -0
  347. package/runtime/third_party/boringssl/crypto/pool/pool.cc +282 -0
  348. package/runtime/third_party/boringssl/crypto/rand/deterministic.cc +58 -0
  349. package/runtime/third_party/boringssl/crypto/rand/fork_detect.cc +222 -0
  350. package/runtime/third_party/boringssl/crypto/rand/forkunsafe.cc +44 -0
  351. package/runtime/third_party/boringssl/crypto/rand/getentropy.cc +53 -0
  352. package/runtime/third_party/boringssl/crypto/rand/internal.h +67 -0
  353. package/runtime/third_party/boringssl/crypto/rand/ios.cc +35 -0
  354. package/runtime/third_party/boringssl/crypto/rand/rand.cc +79 -0
  355. package/runtime/third_party/boringssl/crypto/rand/trusty.cc +39 -0
  356. package/runtime/third_party/boringssl/crypto/rand/urandom.cc +149 -0
  357. package/runtime/third_party/boringssl/crypto/rand/windows.cc +91 -0
  358. package/runtime/third_party/boringssl/crypto/rc4/rc4.cc +56 -0
  359. package/runtime/third_party/boringssl/crypto/refcount.cc +49 -0
  360. package/runtime/third_party/boringssl/crypto/rsa/internal.h +51 -0
  361. package/runtime/third_party/boringssl/crypto/rsa/rsa_asn1.cc +404 -0
  362. package/runtime/third_party/boringssl/crypto/rsa/rsa_crypt.cc +530 -0
  363. package/runtime/third_party/boringssl/crypto/rsa/rsa_extra.cc +30 -0
  364. package/runtime/third_party/boringssl/crypto/rsa/rsa_print.cc +25 -0
  365. package/runtime/third_party/boringssl/crypto/sha/sha1.cc +55 -0
  366. package/runtime/third_party/boringssl/crypto/sha/sha256.cc +89 -0
  367. package/runtime/third_party/boringssl/crypto/sha/sha512.cc +106 -0
  368. package/runtime/third_party/boringssl/crypto/siphash/siphash.cc +81 -0
  369. package/runtime/third_party/boringssl/crypto/slhdsa/slhdsa.cc +167 -0
  370. package/runtime/third_party/boringssl/crypto/spake2plus/internal.h +204 -0
  371. package/runtime/third_party/boringssl/crypto/spake2plus/spake2plus.cc +501 -0
  372. package/runtime/third_party/boringssl/crypto/stack/stack.cc +462 -0
  373. package/runtime/third_party/boringssl/crypto/thread.cc +68 -0
  374. package/runtime/third_party/boringssl/crypto/thread_none.cc +48 -0
  375. package/runtime/third_party/boringssl/crypto/thread_pthread.cc +138 -0
  376. package/runtime/third_party/boringssl/crypto/thread_win.cc +227 -0
  377. package/runtime/third_party/boringssl/crypto/trust_token/internal.h +405 -0
  378. package/runtime/third_party/boringssl/crypto/trust_token/pmbtoken.cc +1672 -0
  379. package/runtime/third_party/boringssl/crypto/trust_token/trust_token.cc +701 -0
  380. package/runtime/third_party/boringssl/crypto/trust_token/voprf.cc +1266 -0
  381. package/runtime/third_party/boringssl/crypto/x509/a_digest.cc +52 -0
  382. package/runtime/third_party/boringssl/crypto/x509/a_sign.cc +100 -0
  383. package/runtime/third_party/boringssl/crypto/x509/a_verify.cc +77 -0
  384. package/runtime/third_party/boringssl/crypto/x509/algorithm.cc +167 -0
  385. package/runtime/third_party/boringssl/crypto/x509/asn1_gen.cc +540 -0
  386. package/runtime/third_party/boringssl/crypto/x509/by_dir.cc +301 -0
  387. package/runtime/third_party/boringssl/crypto/x509/by_file.cc +226 -0
  388. package/runtime/third_party/boringssl/crypto/x509/i2d_pr.cc +37 -0
  389. package/runtime/third_party/boringssl/crypto/x509/internal.h +697 -0
  390. package/runtime/third_party/boringssl/crypto/x509/name_print.cc +187 -0
  391. package/runtime/third_party/boringssl/crypto/x509/policy.cc +686 -0
  392. package/runtime/third_party/boringssl/crypto/x509/rsa_pss.cc +187 -0
  393. package/runtime/third_party/boringssl/crypto/x509/t_crl.cc +106 -0
  394. package/runtime/third_party/boringssl/crypto/x509/t_req.cc +206 -0
  395. package/runtime/third_party/boringssl/crypto/x509/t_x509.cc +292 -0
  396. package/runtime/third_party/boringssl/crypto/x509/t_x509a.cc +81 -0
  397. package/runtime/third_party/boringssl/crypto/x509/v3_akey.cc +174 -0
  398. package/runtime/third_party/boringssl/crypto/x509/v3_akeya.cc +31 -0
  399. package/runtime/third_party/boringssl/crypto/x509/v3_alt.cc +636 -0
  400. package/runtime/third_party/boringssl/crypto/x509/v3_bcons.cc +96 -0
  401. package/runtime/third_party/boringssl/crypto/x509/v3_bitst.cc +100 -0
  402. package/runtime/third_party/boringssl/crypto/x509/v3_conf.cc +369 -0
  403. package/runtime/third_party/boringssl/crypto/x509/v3_cpols.cc +417 -0
  404. package/runtime/third_party/boringssl/crypto/x509/v3_crld.cc +471 -0
  405. package/runtime/third_party/boringssl/crypto/x509/v3_enum.cc +74 -0
  406. package/runtime/third_party/boringssl/crypto/x509/v3_extku.cc +97 -0
  407. package/runtime/third_party/boringssl/crypto/x509/v3_genn.cc +238 -0
  408. package/runtime/third_party/boringssl/crypto/x509/v3_ia5.cc +83 -0
  409. package/runtime/third_party/boringssl/crypto/x509/v3_info.cc +162 -0
  410. package/runtime/third_party/boringssl/crypto/x509/v3_int.cc +83 -0
  411. package/runtime/third_party/boringssl/crypto/x509/v3_lib.cc +349 -0
  412. package/runtime/third_party/boringssl/crypto/x509/v3_ncons.cc +798 -0
  413. package/runtime/third_party/boringssl/crypto/x509/v3_ocsp.cc +92 -0
  414. package/runtime/third_party/boringssl/crypto/x509/v3_pcons.cc +102 -0
  415. package/runtime/third_party/boringssl/crypto/x509/v3_pmaps.cc +110 -0
  416. package/runtime/third_party/boringssl/crypto/x509/v3_prn.cc +183 -0
  417. package/runtime/third_party/boringssl/crypto/x509/v3_purp.cc +580 -0
  418. package/runtime/third_party/boringssl/crypto/x509/v3_skey.cc +128 -0
  419. package/runtime/third_party/boringssl/crypto/x509/v3_utl.cc +1311 -0
  420. package/runtime/third_party/boringssl/crypto/x509/x509.cc +47 -0
  421. package/runtime/third_party/boringssl/crypto/x509/x509_att.cc +188 -0
  422. package/runtime/third_party/boringssl/crypto/x509/x509_cmp.cc +243 -0
  423. package/runtime/third_party/boringssl/crypto/x509/x509_d2.cc +66 -0
  424. package/runtime/third_party/boringssl/crypto/x509/x509_def.cc +42 -0
  425. package/runtime/third_party/boringssl/crypto/x509/x509_ext.cc +161 -0
  426. package/runtime/third_party/boringssl/crypto/x509/x509_lu.cc +570 -0
  427. package/runtime/third_party/boringssl/crypto/x509/x509_mtc.cc +598 -0
  428. package/runtime/third_party/boringssl/crypto/x509/x509_obj.cc +169 -0
  429. package/runtime/third_party/boringssl/crypto/x509/x509_req.cc +248 -0
  430. package/runtime/third_party/boringssl/crypto/x509/x509_set.cc +166 -0
  431. package/runtime/third_party/boringssl/crypto/x509/x509_trs.cc +123 -0
  432. package/runtime/third_party/boringssl/crypto/x509/x509_txt.cc +147 -0
  433. package/runtime/third_party/boringssl/crypto/x509/x509_v3.cc +249 -0
  434. package/runtime/third_party/boringssl/crypto/x509/x509_vfy.cc +1531 -0
  435. package/runtime/third_party/boringssl/crypto/x509/x509_vpm.cc +449 -0
  436. package/runtime/third_party/boringssl/crypto/x509/x509cset.cc +222 -0
  437. package/runtime/third_party/boringssl/crypto/x509/x509name.cc +377 -0
  438. package/runtime/third_party/boringssl/crypto/x509/x509rset.cc +55 -0
  439. package/runtime/third_party/boringssl/crypto/x509/x509spki.cc +91 -0
  440. package/runtime/third_party/boringssl/crypto/x509/x_algor.cc +223 -0
  441. package/runtime/third_party/boringssl/crypto/x509/x_all.cc +352 -0
  442. package/runtime/third_party/boringssl/crypto/x509/x_attrib.cc +61 -0
  443. package/runtime/third_party/boringssl/crypto/x509/x_crl.cc +325 -0
  444. package/runtime/third_party/boringssl/crypto/x509/x_exten.cc +42 -0
  445. package/runtime/third_party/boringssl/crypto/x509/x_name.cc +407 -0
  446. package/runtime/third_party/boringssl/crypto/x509/x_pubkey.cc +199 -0
  447. package/runtime/third_party/boringssl/crypto/x509/x_req.cc +80 -0
  448. package/runtime/third_party/boringssl/crypto/x509/x_sig.cc +51 -0
  449. package/runtime/third_party/boringssl/crypto/x509/x_spki.cc +44 -0
  450. package/runtime/third_party/boringssl/crypto/x509/x_x509.cc +495 -0
  451. package/runtime/third_party/boringssl/crypto/x509/x_x509a.cc +169 -0
  452. package/runtime/third_party/boringssl/crypto/xwing/xwing.cc +257 -0
  453. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-apple.S +1326 -0
  454. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-linux.S +1327 -0
  455. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-apple.S +1252 -0
  456. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-linux.S +1253 -0
  457. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-apple.S +873 -0
  458. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-linux.S +885 -0
  459. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-apple.S +2490 -0
  460. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-linux.S +2530 -0
  461. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-apple.S +2413 -0
  462. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-linux.S +2397 -0
  463. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv7-linux.S +784 -0
  464. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-apple.S +792 -0
  465. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-linux.S +786 -0
  466. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-win.S +798 -0
  467. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-apple.S +2912 -0
  468. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-linux.S +2907 -0
  469. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-win.S +2915 -0
  470. package/runtime/third_party/boringssl/gen/bcm/armv4-mont-linux.S +932 -0
  471. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-apple.S +1440 -0
  472. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-linux.S +1440 -0
  473. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-win.S +1446 -0
  474. package/runtime/third_party/boringssl/gen/bcm/bn-586-apple.S +530 -0
  475. package/runtime/third_party/boringssl/gen/bcm/bn-586-linux.S +540 -0
  476. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-apple.S +88 -0
  477. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-linux.S +87 -0
  478. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-win.S +87 -0
  479. package/runtime/third_party/boringssl/gen/bcm/bsaes-armv7-linux.S +1520 -0
  480. package/runtime/third_party/boringssl/gen/bcm/co-586-apple.S +1256 -0
  481. package/runtime/third_party/boringssl/gen/bcm/co-586-linux.S +1264 -0
  482. package/runtime/third_party/boringssl/gen/bcm/ghash-armv4-linux.S +242 -0
  483. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-apple.S +337 -0
  484. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-linux.S +335 -0
  485. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-win.S +341 -0
  486. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-apple.S +288 -0
  487. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-linux.S +292 -0
  488. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-apple.S +426 -0
  489. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-linux.S +425 -0
  490. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-apple.S +322 -0
  491. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-linux.S +328 -0
  492. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-apple.S +1134 -0
  493. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-linux.S +1129 -0
  494. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv7-linux.S +244 -0
  495. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-apple.S +567 -0
  496. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-linux.S +563 -0
  497. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-win.S +571 -0
  498. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-apple.S +1744 -0
  499. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-linux.S +1725 -0
  500. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-win.S +1765 -0
  501. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-apple.S +4544 -0
  502. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-linux.S +4600 -0
  503. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-apple.S +310 -0
  504. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-linux.S +310 -0
  505. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-win.S +310 -0
  506. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-apple.S +321 -0
  507. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-linux.S +335 -0
  508. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-apple.S +58 -0
  509. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-linux.S +57 -0
  510. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-apple.S +1756 -0
  511. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-linux.S +1751 -0
  512. package/runtime/third_party/boringssl/gen/bcm/sha1-586-apple.S +3782 -0
  513. package/runtime/third_party/boringssl/gen/bcm/sha1-586-linux.S +3788 -0
  514. package/runtime/third_party/boringssl/gen/bcm/sha1-armv4-large-linux.S +1479 -0
  515. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-apple.S +1219 -0
  516. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-linux.S +1218 -0
  517. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-win.S +1222 -0
  518. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-apple.S +5454 -0
  519. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-linux.S +5450 -0
  520. package/runtime/third_party/boringssl/gen/bcm/sha256-586-apple.S +5593 -0
  521. package/runtime/third_party/boringssl/gen/bcm/sha256-586-linux.S +5599 -0
  522. package/runtime/third_party/boringssl/gen/bcm/sha256-armv4-linux.S +2840 -0
  523. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-apple.S +1195 -0
  524. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-linux.S +1194 -0
  525. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-win.S +1198 -0
  526. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-apple.S +4173 -0
  527. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-linux.S +4170 -0
  528. package/runtime/third_party/boringssl/gen/bcm/sha512-586-apple.S +2406 -0
  529. package/runtime/third_party/boringssl/gen/bcm/sha512-586-linux.S +2410 -0
  530. package/runtime/third_party/boringssl/gen/bcm/sha512-armv4-linux.S +1857 -0
  531. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-apple.S +1598 -0
  532. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-linux.S +1597 -0
  533. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-win.S +1601 -0
  534. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-apple.S +2979 -0
  535. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-linux.S +2978 -0
  536. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv7-linux.S +1225 -0
  537. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-apple.S +1238 -0
  538. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-linux.S +1220 -0
  539. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-win.S +1256 -0
  540. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-apple.S +680 -0
  541. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-linux.S +706 -0
  542. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-apple.S +1146 -0
  543. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-linux.S +1133 -0
  544. package/runtime/third_party/boringssl/gen/bcm/x86-mont-apple.S +216 -0
  545. package/runtime/third_party/boringssl/gen/bcm/x86-mont-linux.S +218 -0
  546. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-apple.S +1238 -0
  547. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-linux.S +1237 -0
  548. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-apple.S +3644 -0
  549. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-linux.S +3628 -0
  550. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +325 -0
  551. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +325 -0
  552. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-apple.S +3113 -0
  553. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-linux.S +3091 -0
  554. package/runtime/third_party/boringssl/gen/crypto/chacha-armv4-linux.S +1450 -0
  555. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-apple.S +1969 -0
  556. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-linux.S +1967 -0
  557. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-win.S +1973 -0
  558. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-apple.S +957 -0
  559. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-linux.S +961 -0
  560. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-apple.S +1608 -0
  561. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-linux.S +1611 -0
  562. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-apple.S +3010 -0
  563. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-linux.S +3008 -0
  564. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-win.S +3014 -0
  565. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-apple.S +8903 -0
  566. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-linux.S +8940 -0
  567. package/runtime/third_party/boringssl/gen/crypto/err_data.cc +1578 -0
  568. package/runtime/third_party/boringssl/gen/crypto/md5-586-apple.S +684 -0
  569. package/runtime/third_party/boringssl/gen/crypto/md5-586-linux.S +686 -0
  570. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-apple.S +690 -0
  571. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-linux.S +695 -0
  572. package/runtime/third_party/boringssl/include/openssl/aead.h +650 -0
  573. package/runtime/third_party/boringssl/include/openssl/aes.h +173 -0
  574. package/runtime/third_party/boringssl/include/openssl/arm_arch.h +24 -0
  575. package/runtime/third_party/boringssl/include/openssl/asm_base.h +219 -0
  576. package/runtime/third_party/boringssl/include/openssl/asn1.h +2002 -0
  577. package/runtime/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  578. package/runtime/third_party/boringssl/include/openssl/asn1t.h +584 -0
  579. package/runtime/third_party/boringssl/include/openssl/base.h +548 -0
  580. package/runtime/third_party/boringssl/include/openssl/base64.h +156 -0
  581. package/runtime/third_party/boringssl/include/openssl/bio.h +1061 -0
  582. package/runtime/third_party/boringssl/include/openssl/blake2.h +63 -0
  583. package/runtime/third_party/boringssl/include/openssl/blowfish.h +58 -0
  584. package/runtime/third_party/boringssl/include/openssl/bn.h +986 -0
  585. package/runtime/third_party/boringssl/include/openssl/buf.h +95 -0
  586. package/runtime/third_party/boringssl/include/openssl/buffer.h +18 -0
  587. package/runtime/third_party/boringssl/include/openssl/bytestring.h +798 -0
  588. package/runtime/third_party/boringssl/include/openssl/cast.h +91 -0
  589. package/runtime/third_party/boringssl/include/openssl/chacha.h +47 -0
  590. package/runtime/third_party/boringssl/include/openssl/cipher.h +819 -0
  591. package/runtime/third_party/boringssl/include/openssl/cmac.h +91 -0
  592. package/runtime/third_party/boringssl/include/openssl/cms.h +147 -0
  593. package/runtime/third_party/boringssl/include/openssl/conf.h +136 -0
  594. package/runtime/third_party/boringssl/include/openssl/configuration.h +18 -0
  595. package/runtime/third_party/boringssl/include/openssl/cpu.h +18 -0
  596. package/runtime/third_party/boringssl/include/openssl/crypto.h +235 -0
  597. package/runtime/third_party/boringssl/include/openssl/ctrdrbg.h +116 -0
  598. package/runtime/third_party/boringssl/include/openssl/curve25519.h +309 -0
  599. package/runtime/third_party/boringssl/include/openssl/des.h +134 -0
  600. package/runtime/third_party/boringssl/include/openssl/dh.h +336 -0
  601. package/runtime/third_party/boringssl/include/openssl/digest.h +399 -0
  602. package/runtime/third_party/boringssl/include/openssl/dsa.h +392 -0
  603. package/runtime/third_party/boringssl/include/openssl/dtls1.h +16 -0
  604. package/runtime/third_party/boringssl/include/openssl/e_os2.h +18 -0
  605. package/runtime/third_party/boringssl/include/openssl/ec.h +530 -0
  606. package/runtime/third_party/boringssl/include/openssl/ec_key.h +358 -0
  607. package/runtime/third_party/boringssl/include/openssl/ecdh.h +67 -0
  608. package/runtime/third_party/boringssl/include/openssl/ecdsa.h +242 -0
  609. package/runtime/third_party/boringssl/include/openssl/engine.h +109 -0
  610. package/runtime/third_party/boringssl/include/openssl/err.h +416 -0
  611. package/runtime/third_party/boringssl/include/openssl/evp.h +1645 -0
  612. package/runtime/third_party/boringssl/include/openssl/evp_errors.h +66 -0
  613. package/runtime/third_party/boringssl/include/openssl/ex_data.h +117 -0
  614. package/runtime/third_party/boringssl/include/openssl/hkdf.h +68 -0
  615. package/runtime/third_party/boringssl/include/openssl/hmac.h +151 -0
  616. package/runtime/third_party/boringssl/include/openssl/hpke.h +456 -0
  617. package/runtime/third_party/boringssl/include/openssl/hrss.h +108 -0
  618. package/runtime/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  619. package/runtime/third_party/boringssl/include/openssl/kdf.h +92 -0
  620. package/runtime/third_party/boringssl/include/openssl/lhash.h +18 -0
  621. package/runtime/third_party/boringssl/include/openssl/md4.h +73 -0
  622. package/runtime/third_party/boringssl/include/openssl/md5.h +67 -0
  623. package/runtime/third_party/boringssl/include/openssl/mem.h +215 -0
  624. package/runtime/third_party/boringssl/include/openssl/mldsa.h +486 -0
  625. package/runtime/third_party/boringssl/include/openssl/mlkem.h +222 -0
  626. package/runtime/third_party/boringssl/include/openssl/nid.h +5561 -0
  627. package/runtime/third_party/boringssl/include/openssl/obj.h +225 -0
  628. package/runtime/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  629. package/runtime/third_party/boringssl/include/openssl/objects.h +18 -0
  630. package/runtime/third_party/boringssl/include/openssl/opensslconf.h +108 -0
  631. package/runtime/third_party/boringssl/include/openssl/opensslv.h +18 -0
  632. package/runtime/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  633. package/runtime/third_party/boringssl/include/openssl/params.h +42 -0
  634. package/runtime/third_party/boringssl/include/openssl/pem.h +769 -0
  635. package/runtime/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  636. package/runtime/third_party/boringssl/include/openssl/pkcs7.h +239 -0
  637. package/runtime/third_party/boringssl/include/openssl/pkcs8.h +267 -0
  638. package/runtime/third_party/boringssl/include/openssl/poly1305.h +52 -0
  639. package/runtime/third_party/boringssl/include/openssl/pool.h +137 -0
  640. package/runtime/third_party/boringssl/include/openssl/posix_time.h +51 -0
  641. package/runtime/third_party/boringssl/include/openssl/prefix_symbols.h +8000 -0
  642. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_S.h +633 -0
  643. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_c.h +329 -0
  644. package/runtime/third_party/boringssl/include/openssl/rand.h +138 -0
  645. package/runtime/third_party/boringssl/include/openssl/rc4.h +54 -0
  646. package/runtime/third_party/boringssl/include/openssl/ripemd.h +71 -0
  647. package/runtime/third_party/boringssl/include/openssl/rsa.h +893 -0
  648. package/runtime/third_party/boringssl/include/openssl/safestack.h +16 -0
  649. package/runtime/third_party/boringssl/include/openssl/service_indicator.h +19 -0
  650. package/runtime/third_party/boringssl/include/openssl/sha.h +108 -0
  651. package/runtime/third_party/boringssl/include/openssl/sha2.h +201 -0
  652. package/runtime/third_party/boringssl/include/openssl/siphash.h +37 -0
  653. package/runtime/third_party/boringssl/include/openssl/slhdsa.h +250 -0
  654. package/runtime/third_party/boringssl/include/openssl/span.h +376 -0
  655. package/runtime/third_party/boringssl/include/openssl/srtp.h +18 -0
  656. package/runtime/third_party/boringssl/include/openssl/ssl.h +7211 -0
  657. package/runtime/third_party/boringssl/include/openssl/ssl3.h +171 -0
  658. package/runtime/third_party/boringssl/include/openssl/stack.h +688 -0
  659. package/runtime/third_party/boringssl/include/openssl/target.h +246 -0
  660. package/runtime/third_party/boringssl/include/openssl/thread.h +114 -0
  661. package/runtime/third_party/boringssl/include/openssl/time.h +22 -0
  662. package/runtime/third_party/boringssl/include/openssl/tls1.h +263 -0
  663. package/runtime/third_party/boringssl/include/openssl/tls_prf.h +47 -0
  664. package/runtime/third_party/boringssl/include/openssl/trust_token.h +349 -0
  665. package/runtime/third_party/boringssl/include/openssl/type_check.h +37 -0
  666. package/runtime/third_party/boringssl/include/openssl/types.h +18 -0
  667. package/runtime/third_party/boringssl/include/openssl/x509.h +5404 -0
  668. package/runtime/third_party/boringssl/include/openssl/x509_vfy.h +18 -0
  669. package/runtime/third_party/boringssl/include/openssl/x509v3.h +63 -0
  670. package/runtime/third_party/boringssl/include/openssl/x509v3_errors.h +84 -0
  671. package/runtime/third_party/boringssl/include/openssl/xwing.h +115 -0
  672. package/runtime/third_party/boringssl/sources.json +696 -0
  673. package/runtime/third_party/boringssl/ssl/bio_ssl.cc +196 -0
  674. package/runtime/third_party/boringssl/ssl/d1_both.cc +1137 -0
  675. package/runtime/third_party/boringssl/ssl/d1_lib.cc +245 -0
  676. package/runtime/third_party/boringssl/ssl/d1_pkt.cc +322 -0
  677. package/runtime/third_party/boringssl/ssl/d1_srtp.cc +128 -0
  678. package/runtime/third_party/boringssl/ssl/dtls_method.cc +216 -0
  679. package/runtime/third_party/boringssl/ssl/dtls_record.cc +586 -0
  680. package/runtime/third_party/boringssl/ssl/encrypted_client_hello.cc +1110 -0
  681. package/runtime/third_party/boringssl/ssl/extensions.cc +5368 -0
  682. package/runtime/third_party/boringssl/ssl/handoff.cc +625 -0
  683. package/runtime/third_party/boringssl/ssl/handshake.cc +694 -0
  684. package/runtime/third_party/boringssl/ssl/handshake_client.cc +1958 -0
  685. package/runtime/third_party/boringssl/ssl/handshake_server.cc +1875 -0
  686. package/runtime/third_party/boringssl/ssl/internal.h +4506 -0
  687. package/runtime/third_party/boringssl/ssl/s3_both.cc +555 -0
  688. package/runtime/third_party/boringssl/ssl/s3_lib.cc +88 -0
  689. package/runtime/third_party/boringssl/ssl/s3_pkt.cc +396 -0
  690. package/runtime/third_party/boringssl/ssl/ssl_aead_ctx.cc +416 -0
  691. package/runtime/third_party/boringssl/ssl/ssl_asn1.cc +851 -0
  692. package/runtime/third_party/boringssl/ssl/ssl_buffer.cc +304 -0
  693. package/runtime/third_party/boringssl/ssl/ssl_cert.cc +723 -0
  694. package/runtime/third_party/boringssl/ssl/ssl_cipher.cc +1762 -0
  695. package/runtime/third_party/boringssl/ssl/ssl_credential.cc +913 -0
  696. package/runtime/third_party/boringssl/ssl/ssl_file.cc +375 -0
  697. package/runtime/third_party/boringssl/ssl/ssl_key_share.cc +445 -0
  698. package/runtime/third_party/boringssl/ssl/ssl_lib.cc +4132 -0
  699. package/runtime/third_party/boringssl/ssl/ssl_privkey.cc +973 -0
  700. package/runtime/third_party/boringssl/ssl/ssl_session.cc +1273 -0
  701. package/runtime/third_party/boringssl/ssl/ssl_stat.cc +162 -0
  702. package/runtime/third_party/boringssl/ssl/ssl_transcript.cc +224 -0
  703. package/runtime/third_party/boringssl/ssl/ssl_versions.cc +436 -0
  704. package/runtime/third_party/boringssl/ssl/ssl_x509.cc +1229 -0
  705. package/runtime/third_party/boringssl/ssl/t1_enc.cc +266 -0
  706. package/runtime/third_party/boringssl/ssl/tls13_both.cc +764 -0
  707. package/runtime/third_party/boringssl/ssl/tls13_client.cc +1325 -0
  708. package/runtime/third_party/boringssl/ssl/tls13_enc.cc +746 -0
  709. package/runtime/third_party/boringssl/ssl/tls13_server.cc +1623 -0
  710. package/runtime/third_party/boringssl/ssl/tls_method.cc +266 -0
  711. package/runtime/third_party/boringssl/ssl/tls_record.cc +524 -0
  712. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_mul.S +178 -0
  713. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_square.S +146 -0
  714. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_mul.S +177 -0
  715. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_sqr.S +166 -0
  716. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  717. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  718. package/runtime/third_party/boringssl/third_party/fiat/curve25519_32.h +1571 -0
  719. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64.h +978 -0
  720. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_adx.h +700 -0
  721. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_msvc.h +1281 -0
  722. package/runtime/third_party/boringssl/third_party/fiat/p256_32.h +4760 -0
  723. package/runtime/third_party/boringssl/third_party/fiat/p256_64.h +1984 -0
  724. package/runtime/third_party/boringssl/third_party/fiat/p256_64_msvc.h +1939 -0
  725. package/runtime/third_party/boringssl/third_party/fiat/p256_field.c.inc +26 -0
  726. package/runtime/third_party/boringssl/third_party/fiat/p256_field_32.br.c.inc +71 -0
  727. package/runtime/third_party/boringssl/third_party/fiat/p256_field_64.br.c.inc +84 -0
  728. package/runtime/third_party/boringssl/third_party/fiat/p256_point.br.c.inc +112 -0
  729. package/runtime/third_party/v8-ieee754/README.md +2 -1
  730. package/runtime/third_party/v8-ieee754/convert.py +4 -0
  731. package/runtime/third_party/v8-ieee754/ieee754.c +1 -1
  732. package/runtime/third_party/bearssl/LICENSE.txt +0 -21
  733. package/runtime/third_party/bearssl/README.txt +0 -136
  734. package/runtime/third_party/bearssl/VERSION +0 -1
  735. package/runtime/third_party/bearssl/inc/bearssl.h +0 -183
  736. package/runtime/third_party/bearssl/inc/bearssl_aead.h +0 -1059
  737. package/runtime/third_party/bearssl/inc/bearssl_block.h +0 -2618
  738. package/runtime/third_party/bearssl/inc/bearssl_ec.h +0 -967
  739. package/runtime/third_party/bearssl/inc/bearssl_hash.h +0 -1346
  740. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +0 -241
  741. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +0 -284
  742. package/runtime/third_party/bearssl/inc/bearssl_pem.h +0 -294
  743. package/runtime/third_party/bearssl/inc/bearssl_prf.h +0 -150
  744. package/runtime/third_party/bearssl/inc/bearssl_rand.h +0 -397
  745. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +0 -1655
  746. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +0 -4296
  747. package/runtime/third_party/bearssl/inc/bearssl_x509.h +0 -1474
  748. package/runtime/third_party/bearssl/src/aead/ccm.c +0 -346
  749. package/runtime/third_party/bearssl/src/aead/eax.c +0 -525
  750. package/runtime/third_party/bearssl/src/aead/gcm.c +0 -318
  751. package/runtime/third_party/bearssl/src/codec/ccopy.c +0 -44
  752. package/runtime/third_party/bearssl/src/codec/dec16be.c +0 -38
  753. package/runtime/third_party/bearssl/src/codec/dec16le.c +0 -38
  754. package/runtime/third_party/bearssl/src/codec/dec32be.c +0 -38
  755. package/runtime/third_party/bearssl/src/codec/dec32le.c +0 -38
  756. package/runtime/third_party/bearssl/src/codec/dec64be.c +0 -38
  757. package/runtime/third_party/bearssl/src/codec/dec64le.c +0 -38
  758. package/runtime/third_party/bearssl/src/codec/enc16be.c +0 -38
  759. package/runtime/third_party/bearssl/src/codec/enc16le.c +0 -38
  760. package/runtime/third_party/bearssl/src/codec/enc32be.c +0 -38
  761. package/runtime/third_party/bearssl/src/codec/enc32le.c +0 -38
  762. package/runtime/third_party/bearssl/src/codec/enc64be.c +0 -38
  763. package/runtime/third_party/bearssl/src/codec/enc64le.c +0 -38
  764. package/runtime/third_party/bearssl/src/codec/pemdec.c +0 -526
  765. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +0 -314
  766. package/runtime/third_party/bearssl/src/codec/pemenc.c +0 -173
  767. package/runtime/third_party/bearssl/src/config.h +0 -247
  768. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +0 -121
  769. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +0 -171
  770. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +0 -398
  771. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +0 -390
  772. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +0 -1478
  773. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +0 -800
  774. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +0 -605
  775. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +0 -831
  776. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +0 -46
  777. package/runtime/third_party/bearssl/src/ec/ec_default.c +0 -36
  778. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +0 -86
  779. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +0 -2124
  780. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +0 -1469
  781. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +0 -1765
  782. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +0 -1781
  783. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +0 -824
  784. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +0 -826
  785. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +0 -85
  786. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +0 -51
  787. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +0 -57
  788. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +0 -64
  789. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +0 -134
  790. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +0 -36
  791. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +0 -36
  792. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +0 -36
  793. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +0 -36
  794. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +0 -47
  795. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +0 -45
  796. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +0 -174
  797. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +0 -48
  798. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +0 -166
  799. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +0 -47
  800. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +0 -45
  801. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +0 -173
  802. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +0 -48
  803. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +0 -165
  804. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +0 -121
  805. package/runtime/third_party/bearssl/src/hash/dig_oid.c +0 -84
  806. package/runtime/third_party/bearssl/src/hash/dig_size.c +0 -50
  807. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +0 -345
  808. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +0 -251
  809. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +0 -154
  810. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +0 -389
  811. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +0 -411
  812. package/runtime/third_party/bearssl/src/hash/md5.c +0 -208
  813. package/runtime/third_party/bearssl/src/hash/md5sha1.c +0 -141
  814. package/runtime/third_party/bearssl/src/hash/mgf1.c +0 -56
  815. package/runtime/third_party/bearssl/src/hash/multihash.c +0 -166
  816. package/runtime/third_party/bearssl/src/hash/sha1.c +0 -191
  817. package/runtime/third_party/bearssl/src/hash/sha2big.c +0 -285
  818. package/runtime/third_party/bearssl/src/hash/sha2small.c +0 -341
  819. package/runtime/third_party/bearssl/src/inner.h +0 -2577
  820. package/runtime/third_party/bearssl/src/int/i15_add.c +0 -46
  821. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +0 -44
  822. package/runtime/third_party/bearssl/src/int/i15_decmod.c +0 -124
  823. package/runtime/third_party/bearssl/src/int/i15_decode.c +0 -56
  824. package/runtime/third_party/bearssl/src/int/i15_decred.c +0 -100
  825. package/runtime/third_party/bearssl/src/int/i15_encode.c +0 -56
  826. package/runtime/third_party/bearssl/src/int/i15_fmont.c +0 -59
  827. package/runtime/third_party/bearssl/src/int/i15_iszero.c +0 -39
  828. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +0 -465
  829. package/runtime/third_party/bearssl/src/int/i15_modpow.c +0 -50
  830. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +0 -160
  831. package/runtime/third_party/bearssl/src/int/i15_montmul.c +0 -184
  832. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +0 -61
  833. package/runtime/third_party/bearssl/src/int/i15_muladd.c +0 -173
  834. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +0 -38
  835. package/runtime/third_party/bearssl/src/int/i15_reduce.c +0 -66
  836. package/runtime/third_party/bearssl/src/int/i15_rshift.c +0 -47
  837. package/runtime/third_party/bearssl/src/int/i15_sub.c +0 -46
  838. package/runtime/third_party/bearssl/src/int/i15_tmont.c +0 -36
  839. package/runtime/third_party/bearssl/src/int/i31_add.c +0 -46
  840. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +0 -44
  841. package/runtime/third_party/bearssl/src/int/i31_decmod.c +0 -124
  842. package/runtime/third_party/bearssl/src/int/i31_decode.c +0 -57
  843. package/runtime/third_party/bearssl/src/int/i31_decred.c +0 -103
  844. package/runtime/third_party/bearssl/src/int/i31_encode.c +0 -79
  845. package/runtime/third_party/bearssl/src/int/i31_fmont.c +0 -60
  846. package/runtime/third_party/bearssl/src/int/i31_iszero.c +0 -39
  847. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +0 -488
  848. package/runtime/third_party/bearssl/src/int/i31_modpow.c +0 -65
  849. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +0 -160
  850. package/runtime/third_party/bearssl/src/int/i31_montmul.c +0 -127
  851. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +0 -74
  852. package/runtime/third_party/bearssl/src/int/i31_muladd.c +0 -157
  853. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +0 -39
  854. package/runtime/third_party/bearssl/src/int/i31_reduce.c +0 -66
  855. package/runtime/third_party/bearssl/src/int/i31_rshift.c +0 -47
  856. package/runtime/third_party/bearssl/src/int/i31_sub.c +0 -46
  857. package/runtime/third_party/bearssl/src/int/i31_tmont.c +0 -36
  858. package/runtime/third_party/bearssl/src/int/i32_add.c +0 -51
  859. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +0 -44
  860. package/runtime/third_party/bearssl/src/int/i32_decmod.c +0 -77
  861. package/runtime/third_party/bearssl/src/int/i32_decode.c +0 -63
  862. package/runtime/third_party/bearssl/src/int/i32_decred.c +0 -107
  863. package/runtime/third_party/bearssl/src/int/i32_div32.c +0 -56
  864. package/runtime/third_party/bearssl/src/int/i32_encode.c +0 -72
  865. package/runtime/third_party/bearssl/src/int/i32_fmont.c +0 -60
  866. package/runtime/third_party/bearssl/src/int/i32_iszero.c +0 -39
  867. package/runtime/third_party/bearssl/src/int/i32_modpow.c +0 -65
  868. package/runtime/third_party/bearssl/src/int/i32_montmul.c +0 -69
  869. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +0 -56
  870. package/runtime/third_party/bearssl/src/int/i32_muladd.c +0 -138
  871. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +0 -39
  872. package/runtime/third_party/bearssl/src/int/i32_reduce.c +0 -66
  873. package/runtime/third_party/bearssl/src/int/i32_sub.c +0 -51
  874. package/runtime/third_party/bearssl/src/int/i32_tmont.c +0 -36
  875. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +0 -493
  876. package/runtime/third_party/bearssl/src/kdf/hkdf.c +0 -107
  877. package/runtime/third_party/bearssl/src/kdf/shake.c +0 -590
  878. package/runtime/third_party/bearssl/src/mac/hmac.c +0 -122
  879. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +0 -193
  880. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +0 -206
  881. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +0 -157
  882. package/runtime/third_party/bearssl/src/rand/sysrng.c +0 -252
  883. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +0 -38
  884. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +0 -36
  885. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +0 -38
  886. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +0 -38
  887. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +0 -38
  888. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +0 -38
  889. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +0 -38
  890. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +0 -36
  891. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +0 -38
  892. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +0 -38
  893. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +0 -38
  894. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +0 -36
  895. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +0 -583
  896. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +0 -99
  897. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +0 -41
  898. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +0 -44
  899. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +0 -37
  900. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +0 -43
  901. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +0 -209
  902. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +0 -320
  903. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +0 -40
  904. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +0 -44
  905. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +0 -113
  906. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +0 -152
  907. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +0 -37
  908. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +0 -608
  909. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +0 -99
  910. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +0 -41
  911. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +0 -44
  912. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +0 -37
  913. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +0 -43
  914. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +0 -203
  915. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +0 -318
  916. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +0 -40
  917. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +0 -44
  918. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +0 -106
  919. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +0 -152
  920. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +0 -41
  921. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +0 -44
  922. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +0 -37
  923. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +0 -43
  924. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +0 -160
  925. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +0 -40
  926. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +0 -44
  927. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +0 -77
  928. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +0 -57
  929. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +0 -61
  930. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +0 -64
  931. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +0 -57
  932. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +0 -63
  933. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +0 -223
  934. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +0 -60
  935. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +0 -64
  936. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +0 -125
  937. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +0 -112
  938. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +0 -145
  939. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +0 -100
  940. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +0 -121
  941. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +0 -106
  942. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +0 -121
  943. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +0 -52
  944. package/runtime/third_party/bearssl/src/settings.c +0 -306
  945. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +0 -69
  946. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +0 -67
  947. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +0 -84
  948. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +0 -142
  949. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +0 -254
  950. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +0 -157
  951. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +0 -112
  952. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +0 -328
  953. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +0 -398
  954. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +0 -104
  955. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +0 -81
  956. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +0 -114
  957. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +0 -433
  958. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +0 -159
  959. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +0 -115
  960. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +0 -111
  961. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +0 -91
  962. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +0 -116
  963. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +0 -422
  964. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +0 -170
  965. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +0 -112
  966. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +0 -445
  967. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +0 -670
  968. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +0 -417
  969. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +0 -717
  970. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +0 -946
  971. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +0 -69
  972. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +0 -67
  973. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +0 -84
  974. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +0 -142
  975. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +0 -176
  976. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +0 -129
  977. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +0 -240
  978. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +0 -223
  979. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +0 -122
  980. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +0 -211
  981. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +0 -596
  982. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +0 -106
  983. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +0 -237
  984. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +0 -411
  985. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +0 -87
  986. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +0 -69
  987. package/runtime/third_party/bearssl/src/symcipher/des_support.c +0 -166
  988. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +0 -310
  989. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +0 -85
  990. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +0 -67
  991. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +0 -260
  992. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +0 -297
  993. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +0 -475
  994. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +0 -221
  995. package/runtime/third_party/bearssl/src/x509/asn1.t0 +0 -757
  996. package/runtime/third_party/bearssl/src/x509/asn1enc.c +0 -93
  997. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +0 -110
  998. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +0 -161
  999. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +0 -97
  1000. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +0 -96
  1001. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +0 -653
  1002. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +0 -376
  1003. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +0 -776
  1004. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +0 -324
  1005. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +0 -105
  1006. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +0 -1722
  1007. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +0 -1526
  1008. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +0 -59
@@ -0,0 +1,4600 @@
1
+ // This file is generated from a similarly-named Perl script in the BoringSSL
2
+ // source tree. Do not edit by hand.
3
+
4
+ #include <openssl/asm_base.h>
5
+
6
+ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && defined(__ELF__)
7
+ .text
8
+
9
+ // The polynomial
10
+ .section .rodata
11
+ .align 64
12
+ p256_constants:
13
+ .Lpoly:
14
+ .quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001
15
+
16
+ .LOne:
17
+ .long 1,1,1,1,1,1,1,1
18
+ .LTwo:
19
+ .long 2,2,2,2,2,2,2,2
20
+ .LThree:
21
+ .long 3,3,3,3,3,3,3,3
22
+ .LONE_mont:
23
+ .quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe
24
+
25
+ // Constants for computations modulo ord(p256)
26
+ .Lord:
27
+ .quad 0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000
28
+ .LordK:
29
+ .quad 0xccd1c8aaee00bc4f
30
+ .text
31
+
32
+ // ##############################################################################
33
+ // void ecp_nistz256_neg(uint64_t res[4], uint64_t a[4]);
34
+ .globl ecp_nistz256_neg
35
+ .hidden ecp_nistz256_neg
36
+ .type ecp_nistz256_neg,@function
37
+ .align 32
38
+ ecp_nistz256_neg:
39
+ .cfi_startproc
40
+ _CET_ENDBR
41
+ pushq %r12
42
+ .cfi_adjust_cfa_offset 8
43
+ .cfi_offset %r12,-16
44
+ pushq %r13
45
+ .cfi_adjust_cfa_offset 8
46
+ .cfi_offset %r13,-24
47
+ .Lneg_body:
48
+
49
+ xorq %r8,%r8
50
+ xorq %r9,%r9
51
+ xorq %r10,%r10
52
+ xorq %r11,%r11
53
+ xorq %r13,%r13
54
+
55
+ subq 0(%rsi),%r8
56
+ sbbq 8(%rsi),%r9
57
+ sbbq 16(%rsi),%r10
58
+ movq %r8,%rax
59
+ sbbq 24(%rsi),%r11
60
+ leaq .Lpoly(%rip),%rsi
61
+ movq %r9,%rdx
62
+ sbbq $0,%r13
63
+
64
+ addq 0(%rsi),%r8
65
+ movq %r10,%rcx
66
+ adcq 8(%rsi),%r9
67
+ adcq 16(%rsi),%r10
68
+ movq %r11,%r12
69
+ adcq 24(%rsi),%r11
70
+ testq %r13,%r13
71
+
72
+ cmovzq %rax,%r8
73
+ cmovzq %rdx,%r9
74
+ movq %r8,0(%rdi)
75
+ cmovzq %rcx,%r10
76
+ movq %r9,8(%rdi)
77
+ cmovzq %r12,%r11
78
+ movq %r10,16(%rdi)
79
+ movq %r11,24(%rdi)
80
+
81
+ movq 0(%rsp),%r13
82
+ .cfi_restore %r13
83
+ movq 8(%rsp),%r12
84
+ .cfi_restore %r12
85
+ leaq 16(%rsp),%rsp
86
+ .cfi_adjust_cfa_offset -16
87
+ .Lneg_epilogue:
88
+ ret
89
+ .cfi_endproc
90
+ .size ecp_nistz256_neg,.-ecp_nistz256_neg
91
+ // ##############################################################################
92
+ // void ecp_nistz256_ord_mul_mont(
93
+ // uint64_t res[4],
94
+ // uint64_t a[4],
95
+ // uint64_t b[4]);
96
+
97
+ .globl ecp_nistz256_ord_mul_mont_nohw
98
+ .hidden ecp_nistz256_ord_mul_mont_nohw
99
+ .type ecp_nistz256_ord_mul_mont_nohw,@function
100
+ .align 32
101
+ ecp_nistz256_ord_mul_mont_nohw:
102
+ .cfi_startproc
103
+ _CET_ENDBR
104
+ pushq %rbp
105
+ .cfi_adjust_cfa_offset 8
106
+ .cfi_offset %rbp,-16
107
+ pushq %rbx
108
+ .cfi_adjust_cfa_offset 8
109
+ .cfi_offset %rbx,-24
110
+ pushq %r12
111
+ .cfi_adjust_cfa_offset 8
112
+ .cfi_offset %r12,-32
113
+ pushq %r13
114
+ .cfi_adjust_cfa_offset 8
115
+ .cfi_offset %r13,-40
116
+ pushq %r14
117
+ .cfi_adjust_cfa_offset 8
118
+ .cfi_offset %r14,-48
119
+ pushq %r15
120
+ .cfi_adjust_cfa_offset 8
121
+ .cfi_offset %r15,-56
122
+ .Lord_mul_body:
123
+
124
+ movq 0(%rdx),%rax
125
+ movq %rdx,%rbx
126
+ leaq .Lord(%rip),%r14
127
+ movq .LordK(%rip),%r15
128
+
129
+ // ################################ * b[0]
130
+ movq %rax,%rcx
131
+ mulq 0(%rsi)
132
+ movq %rax,%r8
133
+ movq %rcx,%rax
134
+ movq %rdx,%r9
135
+
136
+ mulq 8(%rsi)
137
+ addq %rax,%r9
138
+ movq %rcx,%rax
139
+ adcq $0,%rdx
140
+ movq %rdx,%r10
141
+
142
+ mulq 16(%rsi)
143
+ addq %rax,%r10
144
+ movq %rcx,%rax
145
+ adcq $0,%rdx
146
+
147
+ movq %r8,%r13
148
+ imulq %r15,%r8
149
+
150
+ movq %rdx,%r11
151
+ mulq 24(%rsi)
152
+ addq %rax,%r11
153
+ movq %r8,%rax
154
+ adcq $0,%rdx
155
+ movq %rdx,%r12
156
+
157
+ // ################################ First reduction step
158
+ mulq 0(%r14)
159
+ movq %r8,%rbp
160
+ addq %rax,%r13 // guaranteed to be zero
161
+ movq %r8,%rax
162
+ adcq $0,%rdx
163
+ movq %rdx,%rcx
164
+
165
+ subq %r8,%r10
166
+ sbbq $0,%r8 // can't borrow
167
+
168
+ mulq 8(%r14)
169
+ addq %rcx,%r9
170
+ adcq $0,%rdx
171
+ addq %rax,%r9
172
+ movq %rbp,%rax
173
+ adcq %rdx,%r10
174
+ movq %rbp,%rdx
175
+ adcq $0,%r8 // can't overflow
176
+
177
+ shlq $32,%rax
178
+ shrq $32,%rdx
179
+ subq %rax,%r11
180
+ movq 8(%rbx),%rax
181
+ sbbq %rdx,%rbp // can't borrow
182
+
183
+ addq %r8,%r11
184
+ adcq %rbp,%r12
185
+ adcq $0,%r13
186
+
187
+ // ################################ * b[1]
188
+ movq %rax,%rcx
189
+ mulq 0(%rsi)
190
+ addq %rax,%r9
191
+ movq %rcx,%rax
192
+ adcq $0,%rdx
193
+ movq %rdx,%rbp
194
+
195
+ mulq 8(%rsi)
196
+ addq %rbp,%r10
197
+ adcq $0,%rdx
198
+ addq %rax,%r10
199
+ movq %rcx,%rax
200
+ adcq $0,%rdx
201
+ movq %rdx,%rbp
202
+
203
+ mulq 16(%rsi)
204
+ addq %rbp,%r11
205
+ adcq $0,%rdx
206
+ addq %rax,%r11
207
+ movq %rcx,%rax
208
+ adcq $0,%rdx
209
+
210
+ movq %r9,%rcx
211
+ imulq %r15,%r9
212
+
213
+ movq %rdx,%rbp
214
+ mulq 24(%rsi)
215
+ addq %rbp,%r12
216
+ adcq $0,%rdx
217
+ xorq %r8,%r8
218
+ addq %rax,%r12
219
+ movq %r9,%rax
220
+ adcq %rdx,%r13
221
+ adcq $0,%r8
222
+
223
+ // ################################ Second reduction step
224
+ mulq 0(%r14)
225
+ movq %r9,%rbp
226
+ addq %rax,%rcx // guaranteed to be zero
227
+ movq %r9,%rax
228
+ adcq %rdx,%rcx
229
+
230
+ subq %r9,%r11
231
+ sbbq $0,%r9 // can't borrow
232
+
233
+ mulq 8(%r14)
234
+ addq %rcx,%r10
235
+ adcq $0,%rdx
236
+ addq %rax,%r10
237
+ movq %rbp,%rax
238
+ adcq %rdx,%r11
239
+ movq %rbp,%rdx
240
+ adcq $0,%r9 // can't overflow
241
+
242
+ shlq $32,%rax
243
+ shrq $32,%rdx
244
+ subq %rax,%r12
245
+ movq 16(%rbx),%rax
246
+ sbbq %rdx,%rbp // can't borrow
247
+
248
+ addq %r9,%r12
249
+ adcq %rbp,%r13
250
+ adcq $0,%r8
251
+
252
+ // ################################# * b[2]
253
+ movq %rax,%rcx
254
+ mulq 0(%rsi)
255
+ addq %rax,%r10
256
+ movq %rcx,%rax
257
+ adcq $0,%rdx
258
+ movq %rdx,%rbp
259
+
260
+ mulq 8(%rsi)
261
+ addq %rbp,%r11
262
+ adcq $0,%rdx
263
+ addq %rax,%r11
264
+ movq %rcx,%rax
265
+ adcq $0,%rdx
266
+ movq %rdx,%rbp
267
+
268
+ mulq 16(%rsi)
269
+ addq %rbp,%r12
270
+ adcq $0,%rdx
271
+ addq %rax,%r12
272
+ movq %rcx,%rax
273
+ adcq $0,%rdx
274
+
275
+ movq %r10,%rcx
276
+ imulq %r15,%r10
277
+
278
+ movq %rdx,%rbp
279
+ mulq 24(%rsi)
280
+ addq %rbp,%r13
281
+ adcq $0,%rdx
282
+ xorq %r9,%r9
283
+ addq %rax,%r13
284
+ movq %r10,%rax
285
+ adcq %rdx,%r8
286
+ adcq $0,%r9
287
+
288
+ // ################################ Third reduction step
289
+ mulq 0(%r14)
290
+ movq %r10,%rbp
291
+ addq %rax,%rcx // guaranteed to be zero
292
+ movq %r10,%rax
293
+ adcq %rdx,%rcx
294
+
295
+ subq %r10,%r12
296
+ sbbq $0,%r10 // can't borrow
297
+
298
+ mulq 8(%r14)
299
+ addq %rcx,%r11
300
+ adcq $0,%rdx
301
+ addq %rax,%r11
302
+ movq %rbp,%rax
303
+ adcq %rdx,%r12
304
+ movq %rbp,%rdx
305
+ adcq $0,%r10 // can't overflow
306
+
307
+ shlq $32,%rax
308
+ shrq $32,%rdx
309
+ subq %rax,%r13
310
+ movq 24(%rbx),%rax
311
+ sbbq %rdx,%rbp // can't borrow
312
+
313
+ addq %r10,%r13
314
+ adcq %rbp,%r8
315
+ adcq $0,%r9
316
+
317
+ // ################################ * b[3]
318
+ movq %rax,%rcx
319
+ mulq 0(%rsi)
320
+ addq %rax,%r11
321
+ movq %rcx,%rax
322
+ adcq $0,%rdx
323
+ movq %rdx,%rbp
324
+
325
+ mulq 8(%rsi)
326
+ addq %rbp,%r12
327
+ adcq $0,%rdx
328
+ addq %rax,%r12
329
+ movq %rcx,%rax
330
+ adcq $0,%rdx
331
+ movq %rdx,%rbp
332
+
333
+ mulq 16(%rsi)
334
+ addq %rbp,%r13
335
+ adcq $0,%rdx
336
+ addq %rax,%r13
337
+ movq %rcx,%rax
338
+ adcq $0,%rdx
339
+
340
+ movq %r11,%rcx
341
+ imulq %r15,%r11
342
+
343
+ movq %rdx,%rbp
344
+ mulq 24(%rsi)
345
+ addq %rbp,%r8
346
+ adcq $0,%rdx
347
+ xorq %r10,%r10
348
+ addq %rax,%r8
349
+ movq %r11,%rax
350
+ adcq %rdx,%r9
351
+ adcq $0,%r10
352
+
353
+ // ################################ Last reduction step
354
+ mulq 0(%r14)
355
+ movq %r11,%rbp
356
+ addq %rax,%rcx // guaranteed to be zero
357
+ movq %r11,%rax
358
+ adcq %rdx,%rcx
359
+
360
+ subq %r11,%r13
361
+ sbbq $0,%r11 // can't borrow
362
+
363
+ mulq 8(%r14)
364
+ addq %rcx,%r12
365
+ adcq $0,%rdx
366
+ addq %rax,%r12
367
+ movq %rbp,%rax
368
+ adcq %rdx,%r13
369
+ movq %rbp,%rdx
370
+ adcq $0,%r11 // can't overflow
371
+
372
+ shlq $32,%rax
373
+ shrq $32,%rdx
374
+ subq %rax,%r8
375
+ sbbq %rdx,%rbp // can't borrow
376
+
377
+ addq %r11,%r8
378
+ adcq %rbp,%r9
379
+ adcq $0,%r10
380
+
381
+ // ################################ Subtract ord
382
+ movq %r12,%rsi
383
+ subq 0(%r14),%r12
384
+ movq %r13,%r11
385
+ sbbq 8(%r14),%r13
386
+ movq %r8,%rcx
387
+ sbbq 16(%r14),%r8
388
+ movq %r9,%rbp
389
+ sbbq 24(%r14),%r9
390
+ sbbq $0,%r10
391
+
392
+ cmovcq %rsi,%r12
393
+ cmovcq %r11,%r13
394
+ cmovcq %rcx,%r8
395
+ cmovcq %rbp,%r9
396
+
397
+ movq %r12,0(%rdi)
398
+ movq %r13,8(%rdi)
399
+ movq %r8,16(%rdi)
400
+ movq %r9,24(%rdi)
401
+
402
+ movq 0(%rsp),%r15
403
+ .cfi_restore %r15
404
+ movq 8(%rsp),%r14
405
+ .cfi_restore %r14
406
+ movq 16(%rsp),%r13
407
+ .cfi_restore %r13
408
+ movq 24(%rsp),%r12
409
+ .cfi_restore %r12
410
+ movq 32(%rsp),%rbx
411
+ .cfi_restore %rbx
412
+ movq 40(%rsp),%rbp
413
+ .cfi_restore %rbp
414
+ leaq 48(%rsp),%rsp
415
+ .cfi_adjust_cfa_offset -48
416
+ .Lord_mul_epilogue:
417
+ ret
418
+ .cfi_endproc
419
+ .size ecp_nistz256_ord_mul_mont_nohw,.-ecp_nistz256_ord_mul_mont_nohw
420
+
421
+ // ##############################################################################
422
+ // void ecp_nistz256_ord_sqr_mont(
423
+ // uint64_t res[4],
424
+ // uint64_t a[4],
425
+ // uint64_t rep);
426
+
427
+ .globl ecp_nistz256_ord_sqr_mont_nohw
428
+ .hidden ecp_nistz256_ord_sqr_mont_nohw
429
+ .type ecp_nistz256_ord_sqr_mont_nohw,@function
430
+ .align 32
431
+ ecp_nistz256_ord_sqr_mont_nohw:
432
+ .cfi_startproc
433
+ _CET_ENDBR
434
+ pushq %rbp
435
+ .cfi_adjust_cfa_offset 8
436
+ .cfi_offset %rbp,-16
437
+ pushq %rbx
438
+ .cfi_adjust_cfa_offset 8
439
+ .cfi_offset %rbx,-24
440
+ pushq %r12
441
+ .cfi_adjust_cfa_offset 8
442
+ .cfi_offset %r12,-32
443
+ pushq %r13
444
+ .cfi_adjust_cfa_offset 8
445
+ .cfi_offset %r13,-40
446
+ pushq %r14
447
+ .cfi_adjust_cfa_offset 8
448
+ .cfi_offset %r14,-48
449
+ pushq %r15
450
+ .cfi_adjust_cfa_offset 8
451
+ .cfi_offset %r15,-56
452
+ .Lord_sqr_body:
453
+
454
+ movq 0(%rsi),%r8
455
+ movq 8(%rsi),%rax
456
+ movq 16(%rsi),%r14
457
+ movq 24(%rsi),%r15
458
+ leaq .Lord(%rip),%rsi // pointer to modulus
459
+ movq %rdx,%rbx
460
+ jmp .Loop_ord_sqr
461
+
462
+ .align 32
463
+ .Loop_ord_sqr:
464
+ // ################################ a[1:] * a[0]
465
+ movq %rax,%rbp // put aside a[1]
466
+ mulq %r8 // a[1] * a[0]
467
+ movq %rax,%r9
468
+ movq %rbp,%xmm1 // offload a[1]
469
+ movq %r14,%rax
470
+ movq %rdx,%r10
471
+
472
+ mulq %r8 // a[2] * a[0]
473
+ addq %rax,%r10
474
+ movq %r15,%rax
475
+ movq %r14,%xmm2 // offload a[2]
476
+ adcq $0,%rdx
477
+ movq %rdx,%r11
478
+
479
+ mulq %r8 // a[3] * a[0]
480
+ addq %rax,%r11
481
+ movq %r15,%rax
482
+ movq %r15,%xmm3 // offload a[3]
483
+ adcq $0,%rdx
484
+ movq %rdx,%r12
485
+
486
+ // ################################ a[3] * a[2]
487
+ mulq %r14 // a[3] * a[2]
488
+ movq %rax,%r13
489
+ movq %r14,%rax
490
+ movq %rdx,%r14
491
+
492
+ // ################################ a[2:] * a[1]
493
+ mulq %rbp // a[2] * a[1]
494
+ addq %rax,%r11
495
+ movq %r15,%rax
496
+ adcq $0,%rdx
497
+ movq %rdx,%r15
498
+
499
+ mulq %rbp // a[3] * a[1]
500
+ addq %rax,%r12
501
+ adcq $0,%rdx
502
+
503
+ addq %r15,%r12
504
+ adcq %rdx,%r13
505
+ adcq $0,%r14 // can't overflow
506
+
507
+ // ################################ *2
508
+ xorq %r15,%r15
509
+ movq %r8,%rax
510
+ addq %r9,%r9
511
+ adcq %r10,%r10
512
+ adcq %r11,%r11
513
+ adcq %r12,%r12
514
+ adcq %r13,%r13
515
+ adcq %r14,%r14
516
+ adcq $0,%r15
517
+
518
+ // ################################ Missing products
519
+ mulq %rax // a[0] * a[0]
520
+ movq %rax,%r8
521
+ movq %xmm1,%rax
522
+ movq %rdx,%rbp
523
+
524
+ mulq %rax // a[1] * a[1]
525
+ addq %rbp,%r9
526
+ adcq %rax,%r10
527
+ movq %xmm2,%rax
528
+ adcq $0,%rdx
529
+ movq %rdx,%rbp
530
+
531
+ mulq %rax // a[2] * a[2]
532
+ addq %rbp,%r11
533
+ adcq %rax,%r12
534
+ movq %xmm3,%rax
535
+ adcq $0,%rdx
536
+ movq %rdx,%rbp
537
+
538
+ movq %r8,%rcx
539
+ imulq 32(%rsi),%r8 // *= .LordK
540
+
541
+ mulq %rax // a[3] * a[3]
542
+ addq %rbp,%r13
543
+ adcq %rax,%r14
544
+ movq 0(%rsi),%rax // modulus[0]
545
+ adcq %rdx,%r15 // can't overflow
546
+
547
+ // ################################ First reduction step
548
+ mulq %r8
549
+ movq %r8,%rbp
550
+ addq %rax,%rcx // guaranteed to be zero
551
+ movq 8(%rsi),%rax // modulus[1]
552
+ adcq %rdx,%rcx
553
+
554
+ subq %r8,%r10
555
+ sbbq $0,%rbp // can't borrow
556
+
557
+ mulq %r8
558
+ addq %rcx,%r9
559
+ adcq $0,%rdx
560
+ addq %rax,%r9
561
+ movq %r8,%rax
562
+ adcq %rdx,%r10
563
+ movq %r8,%rdx
564
+ adcq $0,%rbp // can't overflow
565
+
566
+ movq %r9,%rcx
567
+ imulq 32(%rsi),%r9 // *= .LordK
568
+
569
+ shlq $32,%rax
570
+ shrq $32,%rdx
571
+ subq %rax,%r11
572
+ movq 0(%rsi),%rax
573
+ sbbq %rdx,%r8 // can't borrow
574
+
575
+ addq %rbp,%r11
576
+ adcq $0,%r8 // can't overflow
577
+
578
+ // ################################ Second reduction step
579
+ mulq %r9
580
+ movq %r9,%rbp
581
+ addq %rax,%rcx // guaranteed to be zero
582
+ movq 8(%rsi),%rax
583
+ adcq %rdx,%rcx
584
+
585
+ subq %r9,%r11
586
+ sbbq $0,%rbp // can't borrow
587
+
588
+ mulq %r9
589
+ addq %rcx,%r10
590
+ adcq $0,%rdx
591
+ addq %rax,%r10
592
+ movq %r9,%rax
593
+ adcq %rdx,%r11
594
+ movq %r9,%rdx
595
+ adcq $0,%rbp // can't overflow
596
+
597
+ movq %r10,%rcx
598
+ imulq 32(%rsi),%r10 // *= .LordK
599
+
600
+ shlq $32,%rax
601
+ shrq $32,%rdx
602
+ subq %rax,%r8
603
+ movq 0(%rsi),%rax
604
+ sbbq %rdx,%r9 // can't borrow
605
+
606
+ addq %rbp,%r8
607
+ adcq $0,%r9 // can't overflow
608
+
609
+ // ################################ Third reduction step
610
+ mulq %r10
611
+ movq %r10,%rbp
612
+ addq %rax,%rcx // guaranteed to be zero
613
+ movq 8(%rsi),%rax
614
+ adcq %rdx,%rcx
615
+
616
+ subq %r10,%r8
617
+ sbbq $0,%rbp // can't borrow
618
+
619
+ mulq %r10
620
+ addq %rcx,%r11
621
+ adcq $0,%rdx
622
+ addq %rax,%r11
623
+ movq %r10,%rax
624
+ adcq %rdx,%r8
625
+ movq %r10,%rdx
626
+ adcq $0,%rbp // can't overflow
627
+
628
+ movq %r11,%rcx
629
+ imulq 32(%rsi),%r11 // *= .LordK
630
+
631
+ shlq $32,%rax
632
+ shrq $32,%rdx
633
+ subq %rax,%r9
634
+ movq 0(%rsi),%rax
635
+ sbbq %rdx,%r10 // can't borrow
636
+
637
+ addq %rbp,%r9
638
+ adcq $0,%r10 // can't overflow
639
+
640
+ // ################################ Last reduction step
641
+ mulq %r11
642
+ movq %r11,%rbp
643
+ addq %rax,%rcx // guaranteed to be zero
644
+ movq 8(%rsi),%rax
645
+ adcq %rdx,%rcx
646
+
647
+ subq %r11,%r9
648
+ sbbq $0,%rbp // can't borrow
649
+
650
+ mulq %r11
651
+ addq %rcx,%r8
652
+ adcq $0,%rdx
653
+ addq %rax,%r8
654
+ movq %r11,%rax
655
+ adcq %rdx,%r9
656
+ movq %r11,%rdx
657
+ adcq $0,%rbp // can't overflow
658
+
659
+ shlq $32,%rax
660
+ shrq $32,%rdx
661
+ subq %rax,%r10
662
+ sbbq %rdx,%r11 // can't borrow
663
+
664
+ addq %rbp,%r10
665
+ adcq $0,%r11 // can't overflow
666
+
667
+ // ################################ Add bits [511:256] of the sqr result
668
+ xorq %rdx,%rdx
669
+ addq %r12,%r8
670
+ adcq %r13,%r9
671
+ movq %r8,%r12
672
+ adcq %r14,%r10
673
+ adcq %r15,%r11
674
+ movq %r9,%rax
675
+ adcq $0,%rdx
676
+
677
+ // ################################ Compare to modulus
678
+ subq 0(%rsi),%r8
679
+ movq %r10,%r14
680
+ sbbq 8(%rsi),%r9
681
+ sbbq 16(%rsi),%r10
682
+ movq %r11,%r15
683
+ sbbq 24(%rsi),%r11
684
+ sbbq $0,%rdx
685
+
686
+ cmovcq %r12,%r8
687
+ cmovncq %r9,%rax
688
+ cmovncq %r10,%r14
689
+ cmovncq %r11,%r15
690
+
691
+ decq %rbx
692
+ jnz .Loop_ord_sqr
693
+
694
+ movq %r8,0(%rdi)
695
+ movq %rax,8(%rdi)
696
+ pxor %xmm1,%xmm1
697
+ movq %r14,16(%rdi)
698
+ pxor %xmm2,%xmm2
699
+ movq %r15,24(%rdi)
700
+ pxor %xmm3,%xmm3
701
+
702
+ movq 0(%rsp),%r15
703
+ .cfi_restore %r15
704
+ movq 8(%rsp),%r14
705
+ .cfi_restore %r14
706
+ movq 16(%rsp),%r13
707
+ .cfi_restore %r13
708
+ movq 24(%rsp),%r12
709
+ .cfi_restore %r12
710
+ movq 32(%rsp),%rbx
711
+ .cfi_restore %rbx
712
+ movq 40(%rsp),%rbp
713
+ .cfi_restore %rbp
714
+ leaq 48(%rsp),%rsp
715
+ .cfi_adjust_cfa_offset -48
716
+ .Lord_sqr_epilogue:
717
+ ret
718
+ .cfi_endproc
719
+ .size ecp_nistz256_ord_sqr_mont_nohw,.-ecp_nistz256_ord_sqr_mont_nohw
720
+ // ##############################################################################
721
+ .globl ecp_nistz256_ord_mul_mont_adx
722
+ .hidden ecp_nistz256_ord_mul_mont_adx
723
+ .type ecp_nistz256_ord_mul_mont_adx,@function
724
+ .align 32
725
+ ecp_nistz256_ord_mul_mont_adx:
726
+ .cfi_startproc
727
+ .Lecp_nistz256_ord_mul_mont_adx:
728
+ _CET_ENDBR
729
+ pushq %rbp
730
+ .cfi_adjust_cfa_offset 8
731
+ .cfi_offset %rbp,-16
732
+ pushq %rbx
733
+ .cfi_adjust_cfa_offset 8
734
+ .cfi_offset %rbx,-24
735
+ pushq %r12
736
+ .cfi_adjust_cfa_offset 8
737
+ .cfi_offset %r12,-32
738
+ pushq %r13
739
+ .cfi_adjust_cfa_offset 8
740
+ .cfi_offset %r13,-40
741
+ pushq %r14
742
+ .cfi_adjust_cfa_offset 8
743
+ .cfi_offset %r14,-48
744
+ pushq %r15
745
+ .cfi_adjust_cfa_offset 8
746
+ .cfi_offset %r15,-56
747
+ .Lord_mulx_body:
748
+
749
+ movq %rdx,%rbx
750
+ movq 0(%rdx),%rdx
751
+ movq 0(%rsi),%r9
752
+ movq 8(%rsi),%r10
753
+ movq 16(%rsi),%r11
754
+ movq 24(%rsi),%r12
755
+ leaq -128(%rsi),%rsi // control u-op density
756
+ leaq .Lord-128(%rip),%r14
757
+ movq .LordK(%rip),%r15
758
+
759
+ // ################################ Multiply by b[0]
760
+ mulxq %r9,%r8,%r9
761
+ mulxq %r10,%rcx,%r10
762
+ mulxq %r11,%rbp,%r11
763
+ addq %rcx,%r9
764
+ mulxq %r12,%rcx,%r12
765
+ movq %r8,%rdx
766
+ mulxq %r15,%rdx,%rax
767
+ adcq %rbp,%r10
768
+ adcq %rcx,%r11
769
+ adcq $0,%r12
770
+
771
+ // ################################ reduction
772
+ xorq %r13,%r13 // %r13=0, cf=0, of=0
773
+ mulxq 0+128(%r14),%rcx,%rbp
774
+ adcxq %rcx,%r8 // guaranteed to be zero
775
+ adoxq %rbp,%r9
776
+
777
+ mulxq 8+128(%r14),%rcx,%rbp
778
+ adcxq %rcx,%r9
779
+ adoxq %rbp,%r10
780
+
781
+ mulxq 16+128(%r14),%rcx,%rbp
782
+ adcxq %rcx,%r10
783
+ adoxq %rbp,%r11
784
+
785
+ mulxq 24+128(%r14),%rcx,%rbp
786
+ movq 8(%rbx),%rdx
787
+ adcxq %rcx,%r11
788
+ adoxq %rbp,%r12
789
+ adcxq %r8,%r12
790
+ adoxq %r8,%r13
791
+ adcq $0,%r13 // cf=0, of=0
792
+
793
+ // ################################ Multiply by b[1]
794
+ mulxq 0+128(%rsi),%rcx,%rbp
795
+ adcxq %rcx,%r9
796
+ adoxq %rbp,%r10
797
+
798
+ mulxq 8+128(%rsi),%rcx,%rbp
799
+ adcxq %rcx,%r10
800
+ adoxq %rbp,%r11
801
+
802
+ mulxq 16+128(%rsi),%rcx,%rbp
803
+ adcxq %rcx,%r11
804
+ adoxq %rbp,%r12
805
+
806
+ mulxq 24+128(%rsi),%rcx,%rbp
807
+ movq %r9,%rdx
808
+ mulxq %r15,%rdx,%rax
809
+ adcxq %rcx,%r12
810
+ adoxq %rbp,%r13
811
+
812
+ adcxq %r8,%r13
813
+ adoxq %r8,%r8
814
+ adcq $0,%r8 // cf=0, of=0
815
+
816
+ // ################################ reduction
817
+ mulxq 0+128(%r14),%rcx,%rbp
818
+ adcxq %rcx,%r9 // guaranteed to be zero
819
+ adoxq %rbp,%r10
820
+
821
+ mulxq 8+128(%r14),%rcx,%rbp
822
+ adcxq %rcx,%r10
823
+ adoxq %rbp,%r11
824
+
825
+ mulxq 16+128(%r14),%rcx,%rbp
826
+ adcxq %rcx,%r11
827
+ adoxq %rbp,%r12
828
+
829
+ mulxq 24+128(%r14),%rcx,%rbp
830
+ movq 16(%rbx),%rdx
831
+ adcxq %rcx,%r12
832
+ adoxq %rbp,%r13
833
+ adcxq %r9,%r13
834
+ adoxq %r9,%r8
835
+ adcq $0,%r8 // cf=0, of=0
836
+
837
+ // ################################ Multiply by b[2]
838
+ mulxq 0+128(%rsi),%rcx,%rbp
839
+ adcxq %rcx,%r10
840
+ adoxq %rbp,%r11
841
+
842
+ mulxq 8+128(%rsi),%rcx,%rbp
843
+ adcxq %rcx,%r11
844
+ adoxq %rbp,%r12
845
+
846
+ mulxq 16+128(%rsi),%rcx,%rbp
847
+ adcxq %rcx,%r12
848
+ adoxq %rbp,%r13
849
+
850
+ mulxq 24+128(%rsi),%rcx,%rbp
851
+ movq %r10,%rdx
852
+ mulxq %r15,%rdx,%rax
853
+ adcxq %rcx,%r13
854
+ adoxq %rbp,%r8
855
+
856
+ adcxq %r9,%r8
857
+ adoxq %r9,%r9
858
+ adcq $0,%r9 // cf=0, of=0
859
+
860
+ // ################################ reduction
861
+ mulxq 0+128(%r14),%rcx,%rbp
862
+ adcxq %rcx,%r10 // guaranteed to be zero
863
+ adoxq %rbp,%r11
864
+
865
+ mulxq 8+128(%r14),%rcx,%rbp
866
+ adcxq %rcx,%r11
867
+ adoxq %rbp,%r12
868
+
869
+ mulxq 16+128(%r14),%rcx,%rbp
870
+ adcxq %rcx,%r12
871
+ adoxq %rbp,%r13
872
+
873
+ mulxq 24+128(%r14),%rcx,%rbp
874
+ movq 24(%rbx),%rdx
875
+ adcxq %rcx,%r13
876
+ adoxq %rbp,%r8
877
+ adcxq %r10,%r8
878
+ adoxq %r10,%r9
879
+ adcq $0,%r9 // cf=0, of=0
880
+
881
+ // ################################ Multiply by b[3]
882
+ mulxq 0+128(%rsi),%rcx,%rbp
883
+ adcxq %rcx,%r11
884
+ adoxq %rbp,%r12
885
+
886
+ mulxq 8+128(%rsi),%rcx,%rbp
887
+ adcxq %rcx,%r12
888
+ adoxq %rbp,%r13
889
+
890
+ mulxq 16+128(%rsi),%rcx,%rbp
891
+ adcxq %rcx,%r13
892
+ adoxq %rbp,%r8
893
+
894
+ mulxq 24+128(%rsi),%rcx,%rbp
895
+ movq %r11,%rdx
896
+ mulxq %r15,%rdx,%rax
897
+ adcxq %rcx,%r8
898
+ adoxq %rbp,%r9
899
+
900
+ adcxq %r10,%r9
901
+ adoxq %r10,%r10
902
+ adcq $0,%r10 // cf=0, of=0
903
+
904
+ // ################################ reduction
905
+ mulxq 0+128(%r14),%rcx,%rbp
906
+ adcxq %rcx,%r11 // guaranteed to be zero
907
+ adoxq %rbp,%r12
908
+
909
+ mulxq 8+128(%r14),%rcx,%rbp
910
+ adcxq %rcx,%r12
911
+ adoxq %rbp,%r13
912
+
913
+ mulxq 16+128(%r14),%rcx,%rbp
914
+ adcxq %rcx,%r13
915
+ adoxq %rbp,%r8
916
+
917
+ mulxq 24+128(%r14),%rcx,%rbp
918
+ leaq 128(%r14),%r14
919
+ movq %r12,%rbx
920
+ adcxq %rcx,%r8
921
+ adoxq %rbp,%r9
922
+ movq %r13,%rdx
923
+ adcxq %r11,%r9
924
+ adoxq %r11,%r10
925
+ adcq $0,%r10
926
+
927
+ // ################################
928
+ // Branch-less conditional subtraction of P
929
+ movq %r8,%rcx
930
+ subq 0(%r14),%r12
931
+ sbbq 8(%r14),%r13
932
+ sbbq 16(%r14),%r8
933
+ movq %r9,%rbp
934
+ sbbq 24(%r14),%r9
935
+ sbbq $0,%r10
936
+
937
+ cmovcq %rbx,%r12
938
+ cmovcq %rdx,%r13
939
+ cmovcq %rcx,%r8
940
+ cmovcq %rbp,%r9
941
+
942
+ movq %r12,0(%rdi)
943
+ movq %r13,8(%rdi)
944
+ movq %r8,16(%rdi)
945
+ movq %r9,24(%rdi)
946
+
947
+ movq 0(%rsp),%r15
948
+ .cfi_restore %r15
949
+ movq 8(%rsp),%r14
950
+ .cfi_restore %r14
951
+ movq 16(%rsp),%r13
952
+ .cfi_restore %r13
953
+ movq 24(%rsp),%r12
954
+ .cfi_restore %r12
955
+ movq 32(%rsp),%rbx
956
+ .cfi_restore %rbx
957
+ movq 40(%rsp),%rbp
958
+ .cfi_restore %rbp
959
+ leaq 48(%rsp),%rsp
960
+ .cfi_adjust_cfa_offset -48
961
+ .Lord_mulx_epilogue:
962
+ ret
963
+ .cfi_endproc
964
+ .size ecp_nistz256_ord_mul_mont_adx,.-ecp_nistz256_ord_mul_mont_adx
965
+
966
+ .globl ecp_nistz256_ord_sqr_mont_adx
967
+ .hidden ecp_nistz256_ord_sqr_mont_adx
968
+ .type ecp_nistz256_ord_sqr_mont_adx,@function
969
+ .align 32
970
+ ecp_nistz256_ord_sqr_mont_adx:
971
+ .cfi_startproc
972
+ _CET_ENDBR
973
+ .Lecp_nistz256_ord_sqr_mont_adx:
974
+ pushq %rbp
975
+ .cfi_adjust_cfa_offset 8
976
+ .cfi_offset %rbp,-16
977
+ pushq %rbx
978
+ .cfi_adjust_cfa_offset 8
979
+ .cfi_offset %rbx,-24
980
+ pushq %r12
981
+ .cfi_adjust_cfa_offset 8
982
+ .cfi_offset %r12,-32
983
+ pushq %r13
984
+ .cfi_adjust_cfa_offset 8
985
+ .cfi_offset %r13,-40
986
+ pushq %r14
987
+ .cfi_adjust_cfa_offset 8
988
+ .cfi_offset %r14,-48
989
+ pushq %r15
990
+ .cfi_adjust_cfa_offset 8
991
+ .cfi_offset %r15,-56
992
+ .Lord_sqrx_body:
993
+
994
+ movq %rdx,%rbx
995
+ movq 0(%rsi),%rdx
996
+ movq 8(%rsi),%r14
997
+ movq 16(%rsi),%r15
998
+ movq 24(%rsi),%r8
999
+ leaq .Lord(%rip),%rsi
1000
+ jmp .Loop_ord_sqrx
1001
+
1002
+ .align 32
1003
+ .Loop_ord_sqrx:
1004
+ mulxq %r14,%r9,%r10 // a[0]*a[1]
1005
+ mulxq %r15,%rcx,%r11 // a[0]*a[2]
1006
+ movq %rdx,%rax // offload a[0]
1007
+ movq %r14,%xmm1 // offload a[1]
1008
+ mulxq %r8,%rbp,%r12 // a[0]*a[3]
1009
+ movq %r14,%rdx
1010
+ addq %rcx,%r10
1011
+ movq %r15,%xmm2 // offload a[2]
1012
+ adcq %rbp,%r11
1013
+ adcq $0,%r12
1014
+ xorq %r13,%r13 // %r13=0,cf=0,of=0
1015
+ // ################################
1016
+ mulxq %r15,%rcx,%rbp // a[1]*a[2]
1017
+ adcxq %rcx,%r11
1018
+ adoxq %rbp,%r12
1019
+
1020
+ mulxq %r8,%rcx,%rbp // a[1]*a[3]
1021
+ movq %r15,%rdx
1022
+ adcxq %rcx,%r12
1023
+ adoxq %rbp,%r13
1024
+ adcq $0,%r13
1025
+ // ################################
1026
+ mulxq %r8,%rcx,%r14 // a[2]*a[3]
1027
+ movq %rax,%rdx
1028
+ movq %r8,%xmm3 // offload a[3]
1029
+ xorq %r15,%r15 // %r15=0,cf=0,of=0
1030
+ adcxq %r9,%r9 // acc1:6<<1
1031
+ adoxq %rcx,%r13
1032
+ adcxq %r10,%r10
1033
+ adoxq %r15,%r14 // of=0
1034
+
1035
+ // ################################ a[i]*a[i]
1036
+ mulxq %rdx,%r8,%rbp
1037
+ movq %xmm1,%rdx
1038
+ adcxq %r11,%r11
1039
+ adoxq %rbp,%r9
1040
+ adcxq %r12,%r12
1041
+ mulxq %rdx,%rcx,%rax
1042
+ movq %xmm2,%rdx
1043
+ adcxq %r13,%r13
1044
+ adoxq %rcx,%r10
1045
+ adcxq %r14,%r14
1046
+ mulxq %rdx,%rcx,%rbp
1047
+ .byte 0x67
1048
+ movq %xmm3,%rdx
1049
+ adoxq %rax,%r11
1050
+ adcxq %r15,%r15
1051
+ adoxq %rcx,%r12
1052
+ adoxq %rbp,%r13
1053
+ mulxq %rdx,%rcx,%rax
1054
+ adoxq %rcx,%r14
1055
+ adoxq %rax,%r15
1056
+
1057
+ // ################################ reduction
1058
+ movq %r8,%rdx
1059
+ mulxq 32(%rsi),%rdx,%rcx
1060
+
1061
+ xorq %rax,%rax // cf=0, of=0
1062
+ mulxq 0(%rsi),%rcx,%rbp
1063
+ adcxq %rcx,%r8 // guaranteed to be zero
1064
+ adoxq %rbp,%r9
1065
+ mulxq 8(%rsi),%rcx,%rbp
1066
+ adcxq %rcx,%r9
1067
+ adoxq %rbp,%r10
1068
+ mulxq 16(%rsi),%rcx,%rbp
1069
+ adcxq %rcx,%r10
1070
+ adoxq %rbp,%r11
1071
+ mulxq 24(%rsi),%rcx,%rbp
1072
+ adcxq %rcx,%r11
1073
+ adoxq %rbp,%r8 // of=0
1074
+ adcxq %rax,%r8 // cf=0
1075
+
1076
+ // ################################
1077
+ movq %r9,%rdx
1078
+ mulxq 32(%rsi),%rdx,%rcx
1079
+
1080
+ mulxq 0(%rsi),%rcx,%rbp
1081
+ adoxq %rcx,%r9 // guaranteed to be zero
1082
+ adcxq %rbp,%r10
1083
+ mulxq 8(%rsi),%rcx,%rbp
1084
+ adoxq %rcx,%r10
1085
+ adcxq %rbp,%r11
1086
+ mulxq 16(%rsi),%rcx,%rbp
1087
+ adoxq %rcx,%r11
1088
+ adcxq %rbp,%r8
1089
+ mulxq 24(%rsi),%rcx,%rbp
1090
+ adoxq %rcx,%r8
1091
+ adcxq %rbp,%r9 // cf=0
1092
+ adoxq %rax,%r9 // of=0
1093
+
1094
+ // ################################
1095
+ movq %r10,%rdx
1096
+ mulxq 32(%rsi),%rdx,%rcx
1097
+
1098
+ mulxq 0(%rsi),%rcx,%rbp
1099
+ adcxq %rcx,%r10 // guaranteed to be zero
1100
+ adoxq %rbp,%r11
1101
+ mulxq 8(%rsi),%rcx,%rbp
1102
+ adcxq %rcx,%r11
1103
+ adoxq %rbp,%r8
1104
+ mulxq 16(%rsi),%rcx,%rbp
1105
+ adcxq %rcx,%r8
1106
+ adoxq %rbp,%r9
1107
+ mulxq 24(%rsi),%rcx,%rbp
1108
+ adcxq %rcx,%r9
1109
+ adoxq %rbp,%r10 // of=0
1110
+ adcxq %rax,%r10 // cf=0
1111
+
1112
+ // ################################
1113
+ movq %r11,%rdx
1114
+ mulxq 32(%rsi),%rdx,%rcx
1115
+
1116
+ mulxq 0(%rsi),%rcx,%rbp
1117
+ adoxq %rcx,%r11 // guaranteed to be zero
1118
+ adcxq %rbp,%r8
1119
+ mulxq 8(%rsi),%rcx,%rbp
1120
+ adoxq %rcx,%r8
1121
+ adcxq %rbp,%r9
1122
+ mulxq 16(%rsi),%rcx,%rbp
1123
+ adoxq %rcx,%r9
1124
+ adcxq %rbp,%r10
1125
+ mulxq 24(%rsi),%rcx,%rbp
1126
+ adoxq %rcx,%r10
1127
+ adcxq %rbp,%r11
1128
+ adoxq %rax,%r11
1129
+
1130
+ // ################################ accumulate upper half
1131
+ addq %r8,%r12 // add %r12, %r8
1132
+ adcq %r13,%r9
1133
+ movq %r12,%rdx
1134
+ adcq %r14,%r10
1135
+ adcq %r15,%r11
1136
+ movq %r9,%r14
1137
+ adcq $0,%rax
1138
+
1139
+ // ################################ compare to modulus
1140
+ subq 0(%rsi),%r12
1141
+ movq %r10,%r15
1142
+ sbbq 8(%rsi),%r9
1143
+ sbbq 16(%rsi),%r10
1144
+ movq %r11,%r8
1145
+ sbbq 24(%rsi),%r11
1146
+ sbbq $0,%rax
1147
+
1148
+ cmovncq %r12,%rdx
1149
+ cmovncq %r9,%r14
1150
+ cmovncq %r10,%r15
1151
+ cmovncq %r11,%r8
1152
+
1153
+ decq %rbx
1154
+ jnz .Loop_ord_sqrx
1155
+
1156
+ movq %rdx,0(%rdi)
1157
+ movq %r14,8(%rdi)
1158
+ pxor %xmm1,%xmm1
1159
+ movq %r15,16(%rdi)
1160
+ pxor %xmm2,%xmm2
1161
+ movq %r8,24(%rdi)
1162
+ pxor %xmm3,%xmm3
1163
+
1164
+ movq 0(%rsp),%r15
1165
+ .cfi_restore %r15
1166
+ movq 8(%rsp),%r14
1167
+ .cfi_restore %r14
1168
+ movq 16(%rsp),%r13
1169
+ .cfi_restore %r13
1170
+ movq 24(%rsp),%r12
1171
+ .cfi_restore %r12
1172
+ movq 32(%rsp),%rbx
1173
+ .cfi_restore %rbx
1174
+ movq 40(%rsp),%rbp
1175
+ .cfi_restore %rbp
1176
+ leaq 48(%rsp),%rsp
1177
+ .cfi_adjust_cfa_offset -48
1178
+ .Lord_sqrx_epilogue:
1179
+ ret
1180
+ .cfi_endproc
1181
+ .size ecp_nistz256_ord_sqr_mont_adx,.-ecp_nistz256_ord_sqr_mont_adx
1182
+ // ##############################################################################
1183
+ // void ecp_nistz256_mul_mont(
1184
+ // uint64_t res[4],
1185
+ // uint64_t a[4],
1186
+ // uint64_t b[4]);
1187
+
1188
+ .globl ecp_nistz256_mul_mont_nohw
1189
+ .hidden ecp_nistz256_mul_mont_nohw
1190
+ .type ecp_nistz256_mul_mont_nohw,@function
1191
+ .align 32
1192
+ ecp_nistz256_mul_mont_nohw:
1193
+ .cfi_startproc
1194
+ _CET_ENDBR
1195
+ pushq %rbp
1196
+ .cfi_adjust_cfa_offset 8
1197
+ .cfi_offset %rbp,-16
1198
+ pushq %rbx
1199
+ .cfi_adjust_cfa_offset 8
1200
+ .cfi_offset %rbx,-24
1201
+ pushq %r12
1202
+ .cfi_adjust_cfa_offset 8
1203
+ .cfi_offset %r12,-32
1204
+ pushq %r13
1205
+ .cfi_adjust_cfa_offset 8
1206
+ .cfi_offset %r13,-40
1207
+ pushq %r14
1208
+ .cfi_adjust_cfa_offset 8
1209
+ .cfi_offset %r14,-48
1210
+ pushq %r15
1211
+ .cfi_adjust_cfa_offset 8
1212
+ .cfi_offset %r15,-56
1213
+ .Lmul_body:
1214
+ movq %rdx,%rbx
1215
+ movq 0(%rdx),%rax
1216
+ movq 0(%rsi),%r9
1217
+ movq 8(%rsi),%r10
1218
+ movq 16(%rsi),%r11
1219
+ movq 24(%rsi),%r12
1220
+
1221
+ call __ecp_nistz256_mul_montq
1222
+
1223
+ movq 0(%rsp),%r15
1224
+ .cfi_restore %r15
1225
+ movq 8(%rsp),%r14
1226
+ .cfi_restore %r14
1227
+ movq 16(%rsp),%r13
1228
+ .cfi_restore %r13
1229
+ movq 24(%rsp),%r12
1230
+ .cfi_restore %r12
1231
+ movq 32(%rsp),%rbx
1232
+ .cfi_restore %rbx
1233
+ movq 40(%rsp),%rbp
1234
+ .cfi_restore %rbp
1235
+ leaq 48(%rsp),%rsp
1236
+ .cfi_adjust_cfa_offset -48
1237
+ .Lmul_epilogue:
1238
+ ret
1239
+ .cfi_endproc
1240
+ .size ecp_nistz256_mul_mont_nohw,.-ecp_nistz256_mul_mont_nohw
1241
+
1242
+ .type __ecp_nistz256_mul_montq,@function
1243
+ .align 32
1244
+ __ecp_nistz256_mul_montq:
1245
+ .cfi_startproc
1246
+ // #######################################################################
1247
+ // Multiply a by b[0]
1248
+ movq %rax,%rbp
1249
+ mulq %r9
1250
+ movq .Lpoly+8(%rip),%r14
1251
+ movq %rax,%r8
1252
+ movq %rbp,%rax
1253
+ movq %rdx,%r9
1254
+
1255
+ mulq %r10
1256
+ movq .Lpoly+24(%rip),%r15
1257
+ addq %rax,%r9
1258
+ movq %rbp,%rax
1259
+ adcq $0,%rdx
1260
+ movq %rdx,%r10
1261
+
1262
+ mulq %r11
1263
+ addq %rax,%r10
1264
+ movq %rbp,%rax
1265
+ adcq $0,%rdx
1266
+ movq %rdx,%r11
1267
+
1268
+ mulq %r12
1269
+ addq %rax,%r11
1270
+ movq %r8,%rax
1271
+ adcq $0,%rdx
1272
+ xorq %r13,%r13
1273
+ movq %rdx,%r12
1274
+
1275
+ // #######################################################################
1276
+ // First reduction step
1277
+ // Basically now we want to multiply acc[0] by p256,
1278
+ // and add the result to the acc.
1279
+ // Due to the special form of p256 we do some optimizations
1280
+ //
1281
+ // acc[0] x p256[0..1] = acc[0] x 2^96 - acc[0]
1282
+ // then we add acc[0] and get acc[0] x 2^96
1283
+
1284
+ movq %r8,%rbp
1285
+ shlq $32,%r8
1286
+ mulq %r15
1287
+ shrq $32,%rbp
1288
+ addq %r8,%r9 // +=acc[0]<<96
1289
+ adcq %rbp,%r10
1290
+ adcq %rax,%r11
1291
+ movq 8(%rbx),%rax
1292
+ adcq %rdx,%r12
1293
+ adcq $0,%r13
1294
+ xorq %r8,%r8
1295
+
1296
+ // #######################################################################
1297
+ // Multiply by b[1]
1298
+ movq %rax,%rbp
1299
+ mulq 0(%rsi)
1300
+ addq %rax,%r9
1301
+ movq %rbp,%rax
1302
+ adcq $0,%rdx
1303
+ movq %rdx,%rcx
1304
+
1305
+ mulq 8(%rsi)
1306
+ addq %rcx,%r10
1307
+ adcq $0,%rdx
1308
+ addq %rax,%r10
1309
+ movq %rbp,%rax
1310
+ adcq $0,%rdx
1311
+ movq %rdx,%rcx
1312
+
1313
+ mulq 16(%rsi)
1314
+ addq %rcx,%r11
1315
+ adcq $0,%rdx
1316
+ addq %rax,%r11
1317
+ movq %rbp,%rax
1318
+ adcq $0,%rdx
1319
+ movq %rdx,%rcx
1320
+
1321
+ mulq 24(%rsi)
1322
+ addq %rcx,%r12
1323
+ adcq $0,%rdx
1324
+ addq %rax,%r12
1325
+ movq %r9,%rax
1326
+ adcq %rdx,%r13
1327
+ adcq $0,%r8
1328
+
1329
+ // #######################################################################
1330
+ // Second reduction step
1331
+ movq %r9,%rbp
1332
+ shlq $32,%r9
1333
+ mulq %r15
1334
+ shrq $32,%rbp
1335
+ addq %r9,%r10
1336
+ adcq %rbp,%r11
1337
+ adcq %rax,%r12
1338
+ movq 16(%rbx),%rax
1339
+ adcq %rdx,%r13
1340
+ adcq $0,%r8
1341
+ xorq %r9,%r9
1342
+
1343
+ // #######################################################################
1344
+ // Multiply by b[2]
1345
+ movq %rax,%rbp
1346
+ mulq 0(%rsi)
1347
+ addq %rax,%r10
1348
+ movq %rbp,%rax
1349
+ adcq $0,%rdx
1350
+ movq %rdx,%rcx
1351
+
1352
+ mulq 8(%rsi)
1353
+ addq %rcx,%r11
1354
+ adcq $0,%rdx
1355
+ addq %rax,%r11
1356
+ movq %rbp,%rax
1357
+ adcq $0,%rdx
1358
+ movq %rdx,%rcx
1359
+
1360
+ mulq 16(%rsi)
1361
+ addq %rcx,%r12
1362
+ adcq $0,%rdx
1363
+ addq %rax,%r12
1364
+ movq %rbp,%rax
1365
+ adcq $0,%rdx
1366
+ movq %rdx,%rcx
1367
+
1368
+ mulq 24(%rsi)
1369
+ addq %rcx,%r13
1370
+ adcq $0,%rdx
1371
+ addq %rax,%r13
1372
+ movq %r10,%rax
1373
+ adcq %rdx,%r8
1374
+ adcq $0,%r9
1375
+
1376
+ // #######################################################################
1377
+ // Third reduction step
1378
+ movq %r10,%rbp
1379
+ shlq $32,%r10
1380
+ mulq %r15
1381
+ shrq $32,%rbp
1382
+ addq %r10,%r11
1383
+ adcq %rbp,%r12
1384
+ adcq %rax,%r13
1385
+ movq 24(%rbx),%rax
1386
+ adcq %rdx,%r8
1387
+ adcq $0,%r9
1388
+ xorq %r10,%r10
1389
+
1390
+ // #######################################################################
1391
+ // Multiply by b[3]
1392
+ movq %rax,%rbp
1393
+ mulq 0(%rsi)
1394
+ addq %rax,%r11
1395
+ movq %rbp,%rax
1396
+ adcq $0,%rdx
1397
+ movq %rdx,%rcx
1398
+
1399
+ mulq 8(%rsi)
1400
+ addq %rcx,%r12
1401
+ adcq $0,%rdx
1402
+ addq %rax,%r12
1403
+ movq %rbp,%rax
1404
+ adcq $0,%rdx
1405
+ movq %rdx,%rcx
1406
+
1407
+ mulq 16(%rsi)
1408
+ addq %rcx,%r13
1409
+ adcq $0,%rdx
1410
+ addq %rax,%r13
1411
+ movq %rbp,%rax
1412
+ adcq $0,%rdx
1413
+ movq %rdx,%rcx
1414
+
1415
+ mulq 24(%rsi)
1416
+ addq %rcx,%r8
1417
+ adcq $0,%rdx
1418
+ addq %rax,%r8
1419
+ movq %r11,%rax
1420
+ adcq %rdx,%r9
1421
+ adcq $0,%r10
1422
+
1423
+ // #######################################################################
1424
+ // Final reduction step
1425
+ movq %r11,%rbp
1426
+ shlq $32,%r11
1427
+ mulq %r15
1428
+ shrq $32,%rbp
1429
+ addq %r11,%r12
1430
+ adcq %rbp,%r13
1431
+ movq %r12,%rcx
1432
+ adcq %rax,%r8
1433
+ adcq %rdx,%r9
1434
+ movq %r13,%rbp
1435
+ adcq $0,%r10
1436
+
1437
+ // #######################################################################
1438
+ // Branch-less conditional subtraction of P
1439
+ subq $-1,%r12 // .Lpoly[0]
1440
+ movq %r8,%rbx
1441
+ sbbq %r14,%r13 // .Lpoly[1]
1442
+ sbbq $0,%r8 // .Lpoly[2]
1443
+ movq %r9,%rdx
1444
+ sbbq %r15,%r9 // .Lpoly[3]
1445
+ sbbq $0,%r10
1446
+
1447
+ cmovcq %rcx,%r12
1448
+ cmovcq %rbp,%r13
1449
+ movq %r12,0(%rdi)
1450
+ cmovcq %rbx,%r8
1451
+ movq %r13,8(%rdi)
1452
+ cmovcq %rdx,%r9
1453
+ movq %r8,16(%rdi)
1454
+ movq %r9,24(%rdi)
1455
+
1456
+ ret
1457
+ .cfi_endproc
1458
+ .size __ecp_nistz256_mul_montq,.-__ecp_nistz256_mul_montq
1459
+
1460
+ // ##############################################################################
1461
+ // void ecp_nistz256_sqr_mont(
1462
+ // uint64_t res[4],
1463
+ // uint64_t a[4]);
1464
+
1465
+ // we optimize the square according to S.Gueron and V.Krasnov,
1466
+ // "Speeding up Big-Number Squaring"
1467
+ .globl ecp_nistz256_sqr_mont_nohw
1468
+ .hidden ecp_nistz256_sqr_mont_nohw
1469
+ .type ecp_nistz256_sqr_mont_nohw,@function
1470
+ .align 32
1471
+ ecp_nistz256_sqr_mont_nohw:
1472
+ .cfi_startproc
1473
+ _CET_ENDBR
1474
+ pushq %rbp
1475
+ .cfi_adjust_cfa_offset 8
1476
+ .cfi_offset %rbp,-16
1477
+ pushq %rbx
1478
+ .cfi_adjust_cfa_offset 8
1479
+ .cfi_offset %rbx,-24
1480
+ pushq %r12
1481
+ .cfi_adjust_cfa_offset 8
1482
+ .cfi_offset %r12,-32
1483
+ pushq %r13
1484
+ .cfi_adjust_cfa_offset 8
1485
+ .cfi_offset %r13,-40
1486
+ pushq %r14
1487
+ .cfi_adjust_cfa_offset 8
1488
+ .cfi_offset %r14,-48
1489
+ pushq %r15
1490
+ .cfi_adjust_cfa_offset 8
1491
+ .cfi_offset %r15,-56
1492
+ .Lsqr_body:
1493
+ movq 0(%rsi),%rax
1494
+ movq 8(%rsi),%r14
1495
+ movq 16(%rsi),%r15
1496
+ movq 24(%rsi),%r8
1497
+
1498
+ call __ecp_nistz256_sqr_montq
1499
+
1500
+ movq 0(%rsp),%r15
1501
+ .cfi_restore %r15
1502
+ movq 8(%rsp),%r14
1503
+ .cfi_restore %r14
1504
+ movq 16(%rsp),%r13
1505
+ .cfi_restore %r13
1506
+ movq 24(%rsp),%r12
1507
+ .cfi_restore %r12
1508
+ movq 32(%rsp),%rbx
1509
+ .cfi_restore %rbx
1510
+ movq 40(%rsp),%rbp
1511
+ .cfi_restore %rbp
1512
+ leaq 48(%rsp),%rsp
1513
+ .cfi_adjust_cfa_offset -48
1514
+ .Lsqr_epilogue:
1515
+ ret
1516
+ .cfi_endproc
1517
+ .size ecp_nistz256_sqr_mont_nohw,.-ecp_nistz256_sqr_mont_nohw
1518
+
1519
+ .type __ecp_nistz256_sqr_montq,@function
1520
+ .align 32
1521
+ __ecp_nistz256_sqr_montq:
1522
+ .cfi_startproc
1523
+ movq %rax,%r13
1524
+ mulq %r14 // a[1]*a[0]
1525
+ movq %rax,%r9
1526
+ movq %r15,%rax
1527
+ movq %rdx,%r10
1528
+
1529
+ mulq %r13 // a[0]*a[2]
1530
+ addq %rax,%r10
1531
+ movq %r8,%rax
1532
+ adcq $0,%rdx
1533
+ movq %rdx,%r11
1534
+
1535
+ mulq %r13 // a[0]*a[3]
1536
+ addq %rax,%r11
1537
+ movq %r15,%rax
1538
+ adcq $0,%rdx
1539
+ movq %rdx,%r12
1540
+
1541
+ // ################################
1542
+ mulq %r14 // a[1]*a[2]
1543
+ addq %rax,%r11
1544
+ movq %r8,%rax
1545
+ adcq $0,%rdx
1546
+ movq %rdx,%rbp
1547
+
1548
+ mulq %r14 // a[1]*a[3]
1549
+ addq %rax,%r12
1550
+ movq %r8,%rax
1551
+ adcq $0,%rdx
1552
+ addq %rbp,%r12
1553
+ movq %rdx,%r13
1554
+ adcq $0,%r13
1555
+
1556
+ // ################################
1557
+ mulq %r15 // a[2]*a[3]
1558
+ xorq %r15,%r15
1559
+ addq %rax,%r13
1560
+ movq 0(%rsi),%rax
1561
+ movq %rdx,%r14
1562
+ adcq $0,%r14
1563
+
1564
+ addq %r9,%r9 // acc1:6<<1
1565
+ adcq %r10,%r10
1566
+ adcq %r11,%r11
1567
+ adcq %r12,%r12
1568
+ adcq %r13,%r13
1569
+ adcq %r14,%r14
1570
+ adcq $0,%r15
1571
+
1572
+ mulq %rax
1573
+ movq %rax,%r8
1574
+ movq 8(%rsi),%rax
1575
+ movq %rdx,%rcx
1576
+
1577
+ mulq %rax
1578
+ addq %rcx,%r9
1579
+ adcq %rax,%r10
1580
+ movq 16(%rsi),%rax
1581
+ adcq $0,%rdx
1582
+ movq %rdx,%rcx
1583
+
1584
+ mulq %rax
1585
+ addq %rcx,%r11
1586
+ adcq %rax,%r12
1587
+ movq 24(%rsi),%rax
1588
+ adcq $0,%rdx
1589
+ movq %rdx,%rcx
1590
+
1591
+ mulq %rax
1592
+ addq %rcx,%r13
1593
+ adcq %rax,%r14
1594
+ movq %r8,%rax
1595
+ adcq %rdx,%r15
1596
+
1597
+ movq .Lpoly+8(%rip),%rsi
1598
+ movq .Lpoly+24(%rip),%rbp
1599
+
1600
+ // #########################################
1601
+ // Now the reduction
1602
+ // First iteration
1603
+ movq %r8,%rcx
1604
+ shlq $32,%r8
1605
+ mulq %rbp
1606
+ shrq $32,%rcx
1607
+ addq %r8,%r9 // +=acc[0]<<96
1608
+ adcq %rcx,%r10
1609
+ adcq %rax,%r11
1610
+ movq %r9,%rax
1611
+ adcq $0,%rdx
1612
+
1613
+ // #########################################
1614
+ // Second iteration
1615
+ movq %r9,%rcx
1616
+ shlq $32,%r9
1617
+ movq %rdx,%r8
1618
+ mulq %rbp
1619
+ shrq $32,%rcx
1620
+ addq %r9,%r10
1621
+ adcq %rcx,%r11
1622
+ adcq %rax,%r8
1623
+ movq %r10,%rax
1624
+ adcq $0,%rdx
1625
+
1626
+ // #########################################
1627
+ // Third iteration
1628
+ movq %r10,%rcx
1629
+ shlq $32,%r10
1630
+ movq %rdx,%r9
1631
+ mulq %rbp
1632
+ shrq $32,%rcx
1633
+ addq %r10,%r11
1634
+ adcq %rcx,%r8
1635
+ adcq %rax,%r9
1636
+ movq %r11,%rax
1637
+ adcq $0,%rdx
1638
+
1639
+ // ##########################################
1640
+ // Last iteration
1641
+ movq %r11,%rcx
1642
+ shlq $32,%r11
1643
+ movq %rdx,%r10
1644
+ mulq %rbp
1645
+ shrq $32,%rcx
1646
+ addq %r11,%r8
1647
+ adcq %rcx,%r9
1648
+ adcq %rax,%r10
1649
+ adcq $0,%rdx
1650
+ xorq %r11,%r11
1651
+
1652
+ // ###########################################
1653
+ // Add the rest of the acc
1654
+ addq %r8,%r12
1655
+ adcq %r9,%r13
1656
+ movq %r12,%r8
1657
+ adcq %r10,%r14
1658
+ adcq %rdx,%r15
1659
+ movq %r13,%r9
1660
+ adcq $0,%r11
1661
+
1662
+ subq $-1,%r12 // .Lpoly[0]
1663
+ movq %r14,%r10
1664
+ sbbq %rsi,%r13 // .Lpoly[1]
1665
+ sbbq $0,%r14 // .Lpoly[2]
1666
+ movq %r15,%rcx
1667
+ sbbq %rbp,%r15 // .Lpoly[3]
1668
+ sbbq $0,%r11
1669
+
1670
+ cmovcq %r8,%r12
1671
+ cmovcq %r9,%r13
1672
+ movq %r12,0(%rdi)
1673
+ cmovcq %r10,%r14
1674
+ movq %r13,8(%rdi)
1675
+ cmovcq %rcx,%r15
1676
+ movq %r14,16(%rdi)
1677
+ movq %r15,24(%rdi)
1678
+
1679
+ ret
1680
+ .cfi_endproc
1681
+ .size __ecp_nistz256_sqr_montq,.-__ecp_nistz256_sqr_montq
1682
+ .globl ecp_nistz256_mul_mont_adx
1683
+ .hidden ecp_nistz256_mul_mont_adx
1684
+ .type ecp_nistz256_mul_mont_adx,@function
1685
+ .align 32
1686
+ ecp_nistz256_mul_mont_adx:
1687
+ .cfi_startproc
1688
+ _CET_ENDBR
1689
+ pushq %rbp
1690
+ .cfi_adjust_cfa_offset 8
1691
+ .cfi_offset %rbp,-16
1692
+ pushq %rbx
1693
+ .cfi_adjust_cfa_offset 8
1694
+ .cfi_offset %rbx,-24
1695
+ pushq %r12
1696
+ .cfi_adjust_cfa_offset 8
1697
+ .cfi_offset %r12,-32
1698
+ pushq %r13
1699
+ .cfi_adjust_cfa_offset 8
1700
+ .cfi_offset %r13,-40
1701
+ pushq %r14
1702
+ .cfi_adjust_cfa_offset 8
1703
+ .cfi_offset %r14,-48
1704
+ pushq %r15
1705
+ .cfi_adjust_cfa_offset 8
1706
+ .cfi_offset %r15,-56
1707
+ .Lmulx_body:
1708
+ movq %rdx,%rbx
1709
+ movq 0(%rdx),%rdx
1710
+ movq 0(%rsi),%r9
1711
+ movq 8(%rsi),%r10
1712
+ movq 16(%rsi),%r11
1713
+ movq 24(%rsi),%r12
1714
+ leaq -128(%rsi),%rsi // control u-op density
1715
+
1716
+ call __ecp_nistz256_mul_montx
1717
+
1718
+ movq 0(%rsp),%r15
1719
+ .cfi_restore %r15
1720
+ movq 8(%rsp),%r14
1721
+ .cfi_restore %r14
1722
+ movq 16(%rsp),%r13
1723
+ .cfi_restore %r13
1724
+ movq 24(%rsp),%r12
1725
+ .cfi_restore %r12
1726
+ movq 32(%rsp),%rbx
1727
+ .cfi_restore %rbx
1728
+ movq 40(%rsp),%rbp
1729
+ .cfi_restore %rbp
1730
+ leaq 48(%rsp),%rsp
1731
+ .cfi_adjust_cfa_offset -48
1732
+ .Lmulx_epilogue:
1733
+ ret
1734
+ .cfi_endproc
1735
+ .size ecp_nistz256_mul_mont_adx,.-ecp_nistz256_mul_mont_adx
1736
+
1737
+ .type __ecp_nistz256_mul_montx,@function
1738
+ .align 32
1739
+ __ecp_nistz256_mul_montx:
1740
+ .cfi_startproc
1741
+ // #######################################################################
1742
+ // Multiply by b[0]
1743
+ mulxq %r9,%r8,%r9
1744
+ mulxq %r10,%rcx,%r10
1745
+ movq $32,%r14
1746
+ xorq %r13,%r13 // cf=0
1747
+ mulxq %r11,%rbp,%r11
1748
+ movq .Lpoly+24(%rip),%r15
1749
+ adcq %rcx,%r9
1750
+ mulxq %r12,%rcx,%r12
1751
+ movq %r8,%rdx
1752
+ adcq %rbp,%r10
1753
+ shlxq %r14,%r8,%rbp
1754
+ adcq %rcx,%r11
1755
+ shrxq %r14,%r8,%rcx
1756
+ adcq $0,%r12
1757
+
1758
+ // #######################################################################
1759
+ // First reduction step
1760
+ addq %rbp,%r9
1761
+ adcq %rcx,%r10
1762
+
1763
+ mulxq %r15,%rcx,%rbp
1764
+ movq 8(%rbx),%rdx
1765
+ adcq %rcx,%r11
1766
+ adcq %rbp,%r12
1767
+ adcq $0,%r13
1768
+ xorq %r8,%r8 // %r8=0,cf=0,of=0
1769
+
1770
+ // #######################################################################
1771
+ // Multiply by b[1]
1772
+ mulxq 0+128(%rsi),%rcx,%rbp
1773
+ adcxq %rcx,%r9
1774
+ adoxq %rbp,%r10
1775
+
1776
+ mulxq 8+128(%rsi),%rcx,%rbp
1777
+ adcxq %rcx,%r10
1778
+ adoxq %rbp,%r11
1779
+
1780
+ mulxq 16+128(%rsi),%rcx,%rbp
1781
+ adcxq %rcx,%r11
1782
+ adoxq %rbp,%r12
1783
+
1784
+ mulxq 24+128(%rsi),%rcx,%rbp
1785
+ movq %r9,%rdx
1786
+ adcxq %rcx,%r12
1787
+ shlxq %r14,%r9,%rcx
1788
+ adoxq %rbp,%r13
1789
+ shrxq %r14,%r9,%rbp
1790
+
1791
+ adcxq %r8,%r13
1792
+ adoxq %r8,%r8
1793
+ adcq $0,%r8
1794
+
1795
+ // #######################################################################
1796
+ // Second reduction step
1797
+ addq %rcx,%r10
1798
+ adcq %rbp,%r11
1799
+
1800
+ mulxq %r15,%rcx,%rbp
1801
+ movq 16(%rbx),%rdx
1802
+ adcq %rcx,%r12
1803
+ adcq %rbp,%r13
1804
+ adcq $0,%r8
1805
+ xorq %r9,%r9 // %r9=0,cf=0,of=0
1806
+
1807
+ // #######################################################################
1808
+ // Multiply by b[2]
1809
+ mulxq 0+128(%rsi),%rcx,%rbp
1810
+ adcxq %rcx,%r10
1811
+ adoxq %rbp,%r11
1812
+
1813
+ mulxq 8+128(%rsi),%rcx,%rbp
1814
+ adcxq %rcx,%r11
1815
+ adoxq %rbp,%r12
1816
+
1817
+ mulxq 16+128(%rsi),%rcx,%rbp
1818
+ adcxq %rcx,%r12
1819
+ adoxq %rbp,%r13
1820
+
1821
+ mulxq 24+128(%rsi),%rcx,%rbp
1822
+ movq %r10,%rdx
1823
+ adcxq %rcx,%r13
1824
+ shlxq %r14,%r10,%rcx
1825
+ adoxq %rbp,%r8
1826
+ shrxq %r14,%r10,%rbp
1827
+
1828
+ adcxq %r9,%r8
1829
+ adoxq %r9,%r9
1830
+ adcq $0,%r9
1831
+
1832
+ // #######################################################################
1833
+ // Third reduction step
1834
+ addq %rcx,%r11
1835
+ adcq %rbp,%r12
1836
+
1837
+ mulxq %r15,%rcx,%rbp
1838
+ movq 24(%rbx),%rdx
1839
+ adcq %rcx,%r13
1840
+ adcq %rbp,%r8
1841
+ adcq $0,%r9
1842
+ xorq %r10,%r10 // %r10=0,cf=0,of=0
1843
+
1844
+ // #######################################################################
1845
+ // Multiply by b[3]
1846
+ mulxq 0+128(%rsi),%rcx,%rbp
1847
+ adcxq %rcx,%r11
1848
+ adoxq %rbp,%r12
1849
+
1850
+ mulxq 8+128(%rsi),%rcx,%rbp
1851
+ adcxq %rcx,%r12
1852
+ adoxq %rbp,%r13
1853
+
1854
+ mulxq 16+128(%rsi),%rcx,%rbp
1855
+ adcxq %rcx,%r13
1856
+ adoxq %rbp,%r8
1857
+
1858
+ mulxq 24+128(%rsi),%rcx,%rbp
1859
+ movq %r11,%rdx
1860
+ adcxq %rcx,%r8
1861
+ shlxq %r14,%r11,%rcx
1862
+ adoxq %rbp,%r9
1863
+ shrxq %r14,%r11,%rbp
1864
+
1865
+ adcxq %r10,%r9
1866
+ adoxq %r10,%r10
1867
+ adcq $0,%r10
1868
+
1869
+ // #######################################################################
1870
+ // Fourth reduction step
1871
+ addq %rcx,%r12
1872
+ adcq %rbp,%r13
1873
+
1874
+ mulxq %r15,%rcx,%rbp
1875
+ movq %r12,%rbx
1876
+ movq .Lpoly+8(%rip),%r14
1877
+ adcq %rcx,%r8
1878
+ movq %r13,%rdx
1879
+ adcq %rbp,%r9
1880
+ adcq $0,%r10
1881
+
1882
+ // #######################################################################
1883
+ // Branch-less conditional subtraction of P
1884
+ xorl %eax,%eax
1885
+ movq %r8,%rcx
1886
+ sbbq $-1,%r12 // .Lpoly[0]
1887
+ sbbq %r14,%r13 // .Lpoly[1]
1888
+ sbbq $0,%r8 // .Lpoly[2]
1889
+ movq %r9,%rbp
1890
+ sbbq %r15,%r9 // .Lpoly[3]
1891
+ sbbq $0,%r10
1892
+
1893
+ cmovcq %rbx,%r12
1894
+ cmovcq %rdx,%r13
1895
+ movq %r12,0(%rdi)
1896
+ cmovcq %rcx,%r8
1897
+ movq %r13,8(%rdi)
1898
+ cmovcq %rbp,%r9
1899
+ movq %r8,16(%rdi)
1900
+ movq %r9,24(%rdi)
1901
+
1902
+ ret
1903
+ .cfi_endproc
1904
+ .size __ecp_nistz256_mul_montx,.-__ecp_nistz256_mul_montx
1905
+
1906
+ .globl ecp_nistz256_sqr_mont_adx
1907
+ .hidden ecp_nistz256_sqr_mont_adx
1908
+ .type ecp_nistz256_sqr_mont_adx,@function
1909
+ .align 32
1910
+ ecp_nistz256_sqr_mont_adx:
1911
+ .cfi_startproc
1912
+ _CET_ENDBR
1913
+ pushq %rbp
1914
+ .cfi_adjust_cfa_offset 8
1915
+ .cfi_offset %rbp,-16
1916
+ pushq %rbx
1917
+ .cfi_adjust_cfa_offset 8
1918
+ .cfi_offset %rbx,-24
1919
+ pushq %r12
1920
+ .cfi_adjust_cfa_offset 8
1921
+ .cfi_offset %r12,-32
1922
+ pushq %r13
1923
+ .cfi_adjust_cfa_offset 8
1924
+ .cfi_offset %r13,-40
1925
+ pushq %r14
1926
+ .cfi_adjust_cfa_offset 8
1927
+ .cfi_offset %r14,-48
1928
+ pushq %r15
1929
+ .cfi_adjust_cfa_offset 8
1930
+ .cfi_offset %r15,-56
1931
+ .Lsqrx_body:
1932
+ movq 0(%rsi),%rdx
1933
+ movq 8(%rsi),%r14
1934
+ movq 16(%rsi),%r15
1935
+ movq 24(%rsi),%r8
1936
+ leaq -128(%rsi),%rsi // control u-op density
1937
+
1938
+ call __ecp_nistz256_sqr_montx
1939
+
1940
+ movq 0(%rsp),%r15
1941
+ .cfi_restore %r15
1942
+ movq 8(%rsp),%r14
1943
+ .cfi_restore %r14
1944
+ movq 16(%rsp),%r13
1945
+ .cfi_restore %r13
1946
+ movq 24(%rsp),%r12
1947
+ .cfi_restore %r12
1948
+ movq 32(%rsp),%rbx
1949
+ .cfi_restore %rbx
1950
+ movq 40(%rsp),%rbp
1951
+ .cfi_restore %rbp
1952
+ leaq 48(%rsp),%rsp
1953
+ .cfi_adjust_cfa_offset -48
1954
+ .Lsqrx_epilogue:
1955
+ ret
1956
+ .cfi_endproc
1957
+ .size ecp_nistz256_sqr_mont_adx,.-ecp_nistz256_sqr_mont_adx
1958
+
1959
+ .type __ecp_nistz256_sqr_montx,@function
1960
+ .align 32
1961
+ __ecp_nistz256_sqr_montx:
1962
+ .cfi_startproc
1963
+ mulxq %r14,%r9,%r10 // a[0]*a[1]
1964
+ mulxq %r15,%rcx,%r11 // a[0]*a[2]
1965
+ xorl %eax,%eax
1966
+ adcq %rcx,%r10
1967
+ mulxq %r8,%rbp,%r12 // a[0]*a[3]
1968
+ movq %r14,%rdx
1969
+ adcq %rbp,%r11
1970
+ adcq $0,%r12
1971
+ xorq %r13,%r13 // %r13=0,cf=0,of=0
1972
+
1973
+ // ################################
1974
+ mulxq %r15,%rcx,%rbp // a[1]*a[2]
1975
+ adcxq %rcx,%r11
1976
+ adoxq %rbp,%r12
1977
+
1978
+ mulxq %r8,%rcx,%rbp // a[1]*a[3]
1979
+ movq %r15,%rdx
1980
+ adcxq %rcx,%r12
1981
+ adoxq %rbp,%r13
1982
+ adcq $0,%r13
1983
+
1984
+ // ################################
1985
+ mulxq %r8,%rcx,%r14 // a[2]*a[3]
1986
+ movq 0+128(%rsi),%rdx
1987
+ xorq %r15,%r15 // %r15=0,cf=0,of=0
1988
+ adcxq %r9,%r9 // acc1:6<<1
1989
+ adoxq %rcx,%r13
1990
+ adcxq %r10,%r10
1991
+ adoxq %r15,%r14 // of=0
1992
+
1993
+ mulxq %rdx,%r8,%rbp
1994
+ movq 8+128(%rsi),%rdx
1995
+ adcxq %r11,%r11
1996
+ adoxq %rbp,%r9
1997
+ adcxq %r12,%r12
1998
+ mulxq %rdx,%rcx,%rax
1999
+ movq 16+128(%rsi),%rdx
2000
+ adcxq %r13,%r13
2001
+ adoxq %rcx,%r10
2002
+ adcxq %r14,%r14
2003
+ .byte 0x67
2004
+ mulxq %rdx,%rcx,%rbp
2005
+ movq 24+128(%rsi),%rdx
2006
+ adoxq %rax,%r11
2007
+ adcxq %r15,%r15
2008
+ adoxq %rcx,%r12
2009
+ movq $32,%rsi
2010
+ adoxq %rbp,%r13
2011
+ .byte 0x67,0x67
2012
+ mulxq %rdx,%rcx,%rax
2013
+ movq .Lpoly+24(%rip),%rdx
2014
+ adoxq %rcx,%r14
2015
+ shlxq %rsi,%r8,%rcx
2016
+ adoxq %rax,%r15
2017
+ shrxq %rsi,%r8,%rax
2018
+ movq %rdx,%rbp
2019
+
2020
+ // reduction step 1
2021
+ addq %rcx,%r9
2022
+ adcq %rax,%r10
2023
+
2024
+ mulxq %r8,%rcx,%r8
2025
+ adcq %rcx,%r11
2026
+ shlxq %rsi,%r9,%rcx
2027
+ adcq $0,%r8
2028
+ shrxq %rsi,%r9,%rax
2029
+
2030
+ // reduction step 2
2031
+ addq %rcx,%r10
2032
+ adcq %rax,%r11
2033
+
2034
+ mulxq %r9,%rcx,%r9
2035
+ adcq %rcx,%r8
2036
+ shlxq %rsi,%r10,%rcx
2037
+ adcq $0,%r9
2038
+ shrxq %rsi,%r10,%rax
2039
+
2040
+ // reduction step 3
2041
+ addq %rcx,%r11
2042
+ adcq %rax,%r8
2043
+
2044
+ mulxq %r10,%rcx,%r10
2045
+ adcq %rcx,%r9
2046
+ shlxq %rsi,%r11,%rcx
2047
+ adcq $0,%r10
2048
+ shrxq %rsi,%r11,%rax
2049
+
2050
+ // reduction step 4
2051
+ addq %rcx,%r8
2052
+ adcq %rax,%r9
2053
+
2054
+ mulxq %r11,%rcx,%r11
2055
+ adcq %rcx,%r10
2056
+ adcq $0,%r11
2057
+
2058
+ xorq %rdx,%rdx
2059
+ addq %r8,%r12 // accumulate upper half
2060
+ movq .Lpoly+8(%rip),%rsi
2061
+ adcq %r9,%r13
2062
+ movq %r12,%r8
2063
+ adcq %r10,%r14
2064
+ adcq %r11,%r15
2065
+ movq %r13,%r9
2066
+ adcq $0,%rdx
2067
+
2068
+ subq $-1,%r12 // .Lpoly[0]
2069
+ movq %r14,%r10
2070
+ sbbq %rsi,%r13 // .Lpoly[1]
2071
+ sbbq $0,%r14 // .Lpoly[2]
2072
+ movq %r15,%r11
2073
+ sbbq %rbp,%r15 // .Lpoly[3]
2074
+ sbbq $0,%rdx
2075
+
2076
+ cmovcq %r8,%r12
2077
+ cmovcq %r9,%r13
2078
+ movq %r12,0(%rdi)
2079
+ cmovcq %r10,%r14
2080
+ movq %r13,8(%rdi)
2081
+ cmovcq %r11,%r15
2082
+ movq %r14,16(%rdi)
2083
+ movq %r15,24(%rdi)
2084
+
2085
+ ret
2086
+ .cfi_endproc
2087
+ .size __ecp_nistz256_sqr_montx,.-__ecp_nistz256_sqr_montx
2088
+ // ##############################################################################
2089
+ // void ecp_nistz256_select_w5_nohw(uint64_t *val, uint64_t *in_t, int index);
2090
+ .globl ecp_nistz256_select_w5_nohw
2091
+ .hidden ecp_nistz256_select_w5_nohw
2092
+ .type ecp_nistz256_select_w5_nohw,@function
2093
+ .align 32
2094
+ ecp_nistz256_select_w5_nohw:
2095
+ .cfi_startproc
2096
+ _CET_ENDBR
2097
+ movdqa .LOne(%rip),%xmm0
2098
+ movd %edx,%xmm1
2099
+
2100
+ pxor %xmm2,%xmm2
2101
+ pxor %xmm3,%xmm3
2102
+ pxor %xmm4,%xmm4
2103
+ pxor %xmm5,%xmm5
2104
+ pxor %xmm6,%xmm6
2105
+ pxor %xmm7,%xmm7
2106
+
2107
+ movdqa %xmm0,%xmm8
2108
+ pshufd $0,%xmm1,%xmm1
2109
+
2110
+ movq $16,%rax
2111
+ .Lselect_loop_sse_w5:
2112
+
2113
+ movdqa %xmm8,%xmm15
2114
+ paddd %xmm0,%xmm8
2115
+ pcmpeqd %xmm1,%xmm15
2116
+
2117
+ movdqa 0(%rsi),%xmm9
2118
+ movdqa 16(%rsi),%xmm10
2119
+ movdqa 32(%rsi),%xmm11
2120
+ movdqa 48(%rsi),%xmm12
2121
+ movdqa 64(%rsi),%xmm13
2122
+ movdqa 80(%rsi),%xmm14
2123
+ leaq 96(%rsi),%rsi
2124
+
2125
+ pand %xmm15,%xmm9
2126
+ pand %xmm15,%xmm10
2127
+ por %xmm9,%xmm2
2128
+ pand %xmm15,%xmm11
2129
+ por %xmm10,%xmm3
2130
+ pand %xmm15,%xmm12
2131
+ por %xmm11,%xmm4
2132
+ pand %xmm15,%xmm13
2133
+ por %xmm12,%xmm5
2134
+ pand %xmm15,%xmm14
2135
+ por %xmm13,%xmm6
2136
+ por %xmm14,%xmm7
2137
+
2138
+ decq %rax
2139
+ jnz .Lselect_loop_sse_w5
2140
+
2141
+ movdqu %xmm2,0(%rdi)
2142
+ movdqu %xmm3,16(%rdi)
2143
+ movdqu %xmm4,32(%rdi)
2144
+ movdqu %xmm5,48(%rdi)
2145
+ movdqu %xmm6,64(%rdi)
2146
+ movdqu %xmm7,80(%rdi)
2147
+ ret
2148
+ .cfi_endproc
2149
+ .LSEH_end_ecp_nistz256_select_w5_nohw:
2150
+ .size ecp_nistz256_select_w5_nohw,.-ecp_nistz256_select_w5_nohw
2151
+
2152
+ // ##############################################################################
2153
+ // void ecp_nistz256_select_w7_nohw(uint64_t *val, uint64_t *in_t, int index);
2154
+ .globl ecp_nistz256_select_w7_nohw
2155
+ .hidden ecp_nistz256_select_w7_nohw
2156
+ .type ecp_nistz256_select_w7_nohw,@function
2157
+ .align 32
2158
+ ecp_nistz256_select_w7_nohw:
2159
+ .cfi_startproc
2160
+ _CET_ENDBR
2161
+ movdqa .LOne(%rip),%xmm8
2162
+ movd %edx,%xmm1
2163
+
2164
+ pxor %xmm2,%xmm2
2165
+ pxor %xmm3,%xmm3
2166
+ pxor %xmm4,%xmm4
2167
+ pxor %xmm5,%xmm5
2168
+
2169
+ movdqa %xmm8,%xmm0
2170
+ pshufd $0,%xmm1,%xmm1
2171
+ movq $64,%rax
2172
+
2173
+ .Lselect_loop_sse_w7:
2174
+ movdqa %xmm8,%xmm15
2175
+ paddd %xmm0,%xmm8
2176
+ movdqa 0(%rsi),%xmm9
2177
+ movdqa 16(%rsi),%xmm10
2178
+ pcmpeqd %xmm1,%xmm15
2179
+ movdqa 32(%rsi),%xmm11
2180
+ movdqa 48(%rsi),%xmm12
2181
+ leaq 64(%rsi),%rsi
2182
+
2183
+ pand %xmm15,%xmm9
2184
+ pand %xmm15,%xmm10
2185
+ por %xmm9,%xmm2
2186
+ pand %xmm15,%xmm11
2187
+ por %xmm10,%xmm3
2188
+ pand %xmm15,%xmm12
2189
+ por %xmm11,%xmm4
2190
+ prefetcht0 255(%rsi)
2191
+ por %xmm12,%xmm5
2192
+
2193
+ decq %rax
2194
+ jnz .Lselect_loop_sse_w7
2195
+
2196
+ movdqu %xmm2,0(%rdi)
2197
+ movdqu %xmm3,16(%rdi)
2198
+ movdqu %xmm4,32(%rdi)
2199
+ movdqu %xmm5,48(%rdi)
2200
+ ret
2201
+ .cfi_endproc
2202
+ .LSEH_end_ecp_nistz256_select_w7_nohw:
2203
+ .size ecp_nistz256_select_w7_nohw,.-ecp_nistz256_select_w7_nohw
2204
+ // ##############################################################################
2205
+ // void ecp_nistz256_select_w5_avx2(uint64_t *val, uint64_t *in_t, int index);
2206
+ .globl ecp_nistz256_select_w5_avx2
2207
+ .hidden ecp_nistz256_select_w5_avx2
2208
+ .type ecp_nistz256_select_w5_avx2,@function
2209
+ .align 32
2210
+ ecp_nistz256_select_w5_avx2:
2211
+ .cfi_startproc
2212
+ _CET_ENDBR
2213
+ vzeroupper
2214
+ vmovdqa .LTwo(%rip),%ymm0
2215
+
2216
+ vpxor %ymm2,%ymm2,%ymm2
2217
+ vpxor %ymm3,%ymm3,%ymm3
2218
+ vpxor %ymm4,%ymm4,%ymm4
2219
+
2220
+ vmovdqa .LOne(%rip),%ymm5
2221
+ vmovdqa .LTwo(%rip),%ymm10
2222
+
2223
+ vmovd %edx,%xmm1
2224
+ vpermd %ymm1,%ymm2,%ymm1
2225
+
2226
+ movq $8,%rax
2227
+ .Lselect_loop_avx2_w5:
2228
+
2229
+ vmovdqa 0(%rsi),%ymm6
2230
+ vmovdqa 32(%rsi),%ymm7
2231
+ vmovdqa 64(%rsi),%ymm8
2232
+
2233
+ vmovdqa 96(%rsi),%ymm11
2234
+ vmovdqa 128(%rsi),%ymm12
2235
+ vmovdqa 160(%rsi),%ymm13
2236
+
2237
+ vpcmpeqd %ymm1,%ymm5,%ymm9
2238
+ vpcmpeqd %ymm1,%ymm10,%ymm14
2239
+
2240
+ vpaddd %ymm0,%ymm5,%ymm5
2241
+ vpaddd %ymm0,%ymm10,%ymm10
2242
+ leaq 192(%rsi),%rsi
2243
+
2244
+ vpand %ymm9,%ymm6,%ymm6
2245
+ vpand %ymm9,%ymm7,%ymm7
2246
+ vpand %ymm9,%ymm8,%ymm8
2247
+ vpand %ymm14,%ymm11,%ymm11
2248
+ vpand %ymm14,%ymm12,%ymm12
2249
+ vpand %ymm14,%ymm13,%ymm13
2250
+
2251
+ vpxor %ymm6,%ymm2,%ymm2
2252
+ vpxor %ymm7,%ymm3,%ymm3
2253
+ vpxor %ymm8,%ymm4,%ymm4
2254
+ vpxor %ymm11,%ymm2,%ymm2
2255
+ vpxor %ymm12,%ymm3,%ymm3
2256
+ vpxor %ymm13,%ymm4,%ymm4
2257
+
2258
+ decq %rax
2259
+ jnz .Lselect_loop_avx2_w5
2260
+
2261
+ vmovdqu %ymm2,0(%rdi)
2262
+ vmovdqu %ymm3,32(%rdi)
2263
+ vmovdqu %ymm4,64(%rdi)
2264
+ vzeroupper
2265
+ ret
2266
+ .cfi_endproc
2267
+ .LSEH_end_ecp_nistz256_select_w5_avx2:
2268
+ .size ecp_nistz256_select_w5_avx2,.-ecp_nistz256_select_w5_avx2
2269
+
2270
+ // ##############################################################################
2271
+ // void ecp_nistz256_select_w7_avx2(uint64_t *val, uint64_t *in_t, int index);
2272
+ .globl ecp_nistz256_select_w7_avx2
2273
+ .hidden ecp_nistz256_select_w7_avx2
2274
+ .type ecp_nistz256_select_w7_avx2,@function
2275
+ .align 32
2276
+ ecp_nistz256_select_w7_avx2:
2277
+ .cfi_startproc
2278
+ _CET_ENDBR
2279
+ vzeroupper
2280
+ vmovdqa .LThree(%rip),%ymm0
2281
+
2282
+ vpxor %ymm2,%ymm2,%ymm2
2283
+ vpxor %ymm3,%ymm3,%ymm3
2284
+
2285
+ vmovdqa .LOne(%rip),%ymm4
2286
+ vmovdqa .LTwo(%rip),%ymm8
2287
+ vmovdqa .LThree(%rip),%ymm12
2288
+
2289
+ vmovd %edx,%xmm1
2290
+ vpermd %ymm1,%ymm2,%ymm1
2291
+ // Skip index = 0, because it is implicitly the point at infinity
2292
+
2293
+ movq $21,%rax
2294
+ .Lselect_loop_avx2_w7:
2295
+
2296
+ vmovdqa 0(%rsi),%ymm5
2297
+ vmovdqa 32(%rsi),%ymm6
2298
+
2299
+ vmovdqa 64(%rsi),%ymm9
2300
+ vmovdqa 96(%rsi),%ymm10
2301
+
2302
+ vmovdqa 128(%rsi),%ymm13
2303
+ vmovdqa 160(%rsi),%ymm14
2304
+
2305
+ vpcmpeqd %ymm1,%ymm4,%ymm7
2306
+ vpcmpeqd %ymm1,%ymm8,%ymm11
2307
+ vpcmpeqd %ymm1,%ymm12,%ymm15
2308
+
2309
+ vpaddd %ymm0,%ymm4,%ymm4
2310
+ vpaddd %ymm0,%ymm8,%ymm8
2311
+ vpaddd %ymm0,%ymm12,%ymm12
2312
+ leaq 192(%rsi),%rsi
2313
+
2314
+ vpand %ymm7,%ymm5,%ymm5
2315
+ vpand %ymm7,%ymm6,%ymm6
2316
+ vpand %ymm11,%ymm9,%ymm9
2317
+ vpand %ymm11,%ymm10,%ymm10
2318
+ vpand %ymm15,%ymm13,%ymm13
2319
+ vpand %ymm15,%ymm14,%ymm14
2320
+
2321
+ vpxor %ymm5,%ymm2,%ymm2
2322
+ vpxor %ymm6,%ymm3,%ymm3
2323
+ vpxor %ymm9,%ymm2,%ymm2
2324
+ vpxor %ymm10,%ymm3,%ymm3
2325
+ vpxor %ymm13,%ymm2,%ymm2
2326
+ vpxor %ymm14,%ymm3,%ymm3
2327
+
2328
+ decq %rax
2329
+ jnz .Lselect_loop_avx2_w7
2330
+
2331
+
2332
+ vmovdqa 0(%rsi),%ymm5
2333
+ vmovdqa 32(%rsi),%ymm6
2334
+
2335
+ vpcmpeqd %ymm1,%ymm4,%ymm7
2336
+
2337
+ vpand %ymm7,%ymm5,%ymm5
2338
+ vpand %ymm7,%ymm6,%ymm6
2339
+
2340
+ vpxor %ymm5,%ymm2,%ymm2
2341
+ vpxor %ymm6,%ymm3,%ymm3
2342
+
2343
+ vmovdqu %ymm2,0(%rdi)
2344
+ vmovdqu %ymm3,32(%rdi)
2345
+ vzeroupper
2346
+ ret
2347
+ .cfi_endproc
2348
+ .LSEH_end_ecp_nistz256_select_w7_avx2:
2349
+ .size ecp_nistz256_select_w7_avx2,.-ecp_nistz256_select_w7_avx2
2350
+ .type __ecp_nistz256_add_toq,@function
2351
+ .align 32
2352
+ __ecp_nistz256_add_toq:
2353
+ .cfi_startproc
2354
+ xorq %r11,%r11
2355
+ addq 0(%rbx),%r12
2356
+ adcq 8(%rbx),%r13
2357
+ movq %r12,%rax
2358
+ adcq 16(%rbx),%r8
2359
+ adcq 24(%rbx),%r9
2360
+ movq %r13,%rbp
2361
+ adcq $0,%r11
2362
+
2363
+ subq $-1,%r12
2364
+ movq %r8,%rcx
2365
+ sbbq %r14,%r13
2366
+ sbbq $0,%r8
2367
+ movq %r9,%r10
2368
+ sbbq %r15,%r9
2369
+ sbbq $0,%r11
2370
+
2371
+ cmovcq %rax,%r12
2372
+ cmovcq %rbp,%r13
2373
+ movq %r12,0(%rdi)
2374
+ cmovcq %rcx,%r8
2375
+ movq %r13,8(%rdi)
2376
+ cmovcq %r10,%r9
2377
+ movq %r8,16(%rdi)
2378
+ movq %r9,24(%rdi)
2379
+
2380
+ ret
2381
+ .cfi_endproc
2382
+ .size __ecp_nistz256_add_toq,.-__ecp_nistz256_add_toq
2383
+
2384
+ .type __ecp_nistz256_sub_fromq,@function
2385
+ .align 32
2386
+ __ecp_nistz256_sub_fromq:
2387
+ .cfi_startproc
2388
+ subq 0(%rbx),%r12
2389
+ sbbq 8(%rbx),%r13
2390
+ movq %r12,%rax
2391
+ sbbq 16(%rbx),%r8
2392
+ sbbq 24(%rbx),%r9
2393
+ movq %r13,%rbp
2394
+ sbbq %r11,%r11
2395
+
2396
+ addq $-1,%r12
2397
+ movq %r8,%rcx
2398
+ adcq %r14,%r13
2399
+ adcq $0,%r8
2400
+ movq %r9,%r10
2401
+ adcq %r15,%r9
2402
+ testq %r11,%r11
2403
+
2404
+ cmovzq %rax,%r12
2405
+ cmovzq %rbp,%r13
2406
+ movq %r12,0(%rdi)
2407
+ cmovzq %rcx,%r8
2408
+ movq %r13,8(%rdi)
2409
+ cmovzq %r10,%r9
2410
+ movq %r8,16(%rdi)
2411
+ movq %r9,24(%rdi)
2412
+
2413
+ ret
2414
+ .cfi_endproc
2415
+ .size __ecp_nistz256_sub_fromq,.-__ecp_nistz256_sub_fromq
2416
+
2417
+ .type __ecp_nistz256_subq,@function
2418
+ .align 32
2419
+ __ecp_nistz256_subq:
2420
+ .cfi_startproc
2421
+ subq %r12,%rax
2422
+ sbbq %r13,%rbp
2423
+ movq %rax,%r12
2424
+ sbbq %r8,%rcx
2425
+ sbbq %r9,%r10
2426
+ movq %rbp,%r13
2427
+ sbbq %r11,%r11
2428
+
2429
+ addq $-1,%rax
2430
+ movq %rcx,%r8
2431
+ adcq %r14,%rbp
2432
+ adcq $0,%rcx
2433
+ movq %r10,%r9
2434
+ adcq %r15,%r10
2435
+ testq %r11,%r11
2436
+
2437
+ cmovnzq %rax,%r12
2438
+ cmovnzq %rbp,%r13
2439
+ cmovnzq %rcx,%r8
2440
+ cmovnzq %r10,%r9
2441
+
2442
+ ret
2443
+ .cfi_endproc
2444
+ .size __ecp_nistz256_subq,.-__ecp_nistz256_subq
2445
+
2446
+ .type __ecp_nistz256_mul_by_2q,@function
2447
+ .align 32
2448
+ __ecp_nistz256_mul_by_2q:
2449
+ .cfi_startproc
2450
+ xorq %r11,%r11
2451
+ addq %r12,%r12 // a0:a3+a0:a3
2452
+ adcq %r13,%r13
2453
+ movq %r12,%rax
2454
+ adcq %r8,%r8
2455
+ adcq %r9,%r9
2456
+ movq %r13,%rbp
2457
+ adcq $0,%r11
2458
+
2459
+ subq $-1,%r12
2460
+ movq %r8,%rcx
2461
+ sbbq %r14,%r13
2462
+ sbbq $0,%r8
2463
+ movq %r9,%r10
2464
+ sbbq %r15,%r9
2465
+ sbbq $0,%r11
2466
+
2467
+ cmovcq %rax,%r12
2468
+ cmovcq %rbp,%r13
2469
+ movq %r12,0(%rdi)
2470
+ cmovcq %rcx,%r8
2471
+ movq %r13,8(%rdi)
2472
+ cmovcq %r10,%r9
2473
+ movq %r8,16(%rdi)
2474
+ movq %r9,24(%rdi)
2475
+
2476
+ ret
2477
+ .cfi_endproc
2478
+ .size __ecp_nistz256_mul_by_2q,.-__ecp_nistz256_mul_by_2q
2479
+ .globl ecp_nistz256_point_double_nohw
2480
+ .hidden ecp_nistz256_point_double_nohw
2481
+ .type ecp_nistz256_point_double_nohw,@function
2482
+ .align 32
2483
+ ecp_nistz256_point_double_nohw:
2484
+ .cfi_startproc
2485
+ _CET_ENDBR
2486
+ pushq %rbp
2487
+ .cfi_adjust_cfa_offset 8
2488
+ .cfi_offset %rbp,-16
2489
+ pushq %rbx
2490
+ .cfi_adjust_cfa_offset 8
2491
+ .cfi_offset %rbx,-24
2492
+ pushq %r12
2493
+ .cfi_adjust_cfa_offset 8
2494
+ .cfi_offset %r12,-32
2495
+ pushq %r13
2496
+ .cfi_adjust_cfa_offset 8
2497
+ .cfi_offset %r13,-40
2498
+ pushq %r14
2499
+ .cfi_adjust_cfa_offset 8
2500
+ .cfi_offset %r14,-48
2501
+ pushq %r15
2502
+ .cfi_adjust_cfa_offset 8
2503
+ .cfi_offset %r15,-56
2504
+ subq $160+8,%rsp
2505
+ .cfi_adjust_cfa_offset 32*5+8
2506
+ .Lpoint_doubleq_body:
2507
+
2508
+ .Lpoint_double_shortcutq:
2509
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rsi.x
2510
+ movq %rsi,%rbx // backup copy
2511
+ movdqu 16(%rsi),%xmm1
2512
+ movq 32+0(%rsi),%r12 // load in_y in "5-4-0-1" order
2513
+ movq 32+8(%rsi),%r13
2514
+ movq 32+16(%rsi),%r8
2515
+ movq 32+24(%rsi),%r9
2516
+ movq .Lpoly+8(%rip),%r14
2517
+ movq .Lpoly+24(%rip),%r15
2518
+ movdqa %xmm0,96(%rsp)
2519
+ movdqa %xmm1,96+16(%rsp)
2520
+ leaq 32(%rdi),%r10
2521
+ leaq 64(%rdi),%r11
2522
+ movq %rdi,%xmm0
2523
+ movq %r10,%xmm1
2524
+ movq %r11,%xmm2
2525
+
2526
+ leaq 0(%rsp),%rdi
2527
+ call __ecp_nistz256_mul_by_2q // p256_mul_by_2(S, in_y);
2528
+
2529
+ movq 64+0(%rsi),%rax
2530
+ movq 64+8(%rsi),%r14
2531
+ movq 64+16(%rsi),%r15
2532
+ movq 64+24(%rsi),%r8
2533
+ leaq 64-0(%rsi),%rsi
2534
+ leaq 64(%rsp),%rdi
2535
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Zsqr, in_z);
2536
+
2537
+ movq 0+0(%rsp),%rax
2538
+ movq 8+0(%rsp),%r14
2539
+ leaq 0+0(%rsp),%rsi
2540
+ movq 16+0(%rsp),%r15
2541
+ movq 24+0(%rsp),%r8
2542
+ leaq 0(%rsp),%rdi
2543
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(S, S);
2544
+
2545
+ movq 32(%rbx),%rax // %rbx is still valid
2546
+ movq 64+0(%rbx),%r9
2547
+ movq 64+8(%rbx),%r10
2548
+ movq 64+16(%rbx),%r11
2549
+ movq 64+24(%rbx),%r12
2550
+ leaq 64-0(%rbx),%rsi
2551
+ leaq 32(%rbx),%rbx
2552
+ movq %xmm2,%rdi
2553
+ call __ecp_nistz256_mul_montq // p256_mul_mont(res_z, in_z, in_y);
2554
+ call __ecp_nistz256_mul_by_2q // p256_mul_by_2(res_z, res_z);
2555
+
2556
+ movq 96+0(%rsp),%r12 // "5-4-0-1" order
2557
+ movq 96+8(%rsp),%r13
2558
+ leaq 64(%rsp),%rbx
2559
+ movq 96+16(%rsp),%r8
2560
+ movq 96+24(%rsp),%r9
2561
+ leaq 32(%rsp),%rdi
2562
+ call __ecp_nistz256_add_toq // p256_add(M, in_x, Zsqr);
2563
+
2564
+ movq 96+0(%rsp),%r12 // "5-4-0-1" order
2565
+ movq 96+8(%rsp),%r13
2566
+ leaq 64(%rsp),%rbx
2567
+ movq 96+16(%rsp),%r8
2568
+ movq 96+24(%rsp),%r9
2569
+ leaq 64(%rsp),%rdi
2570
+ call __ecp_nistz256_sub_fromq // p256_sub(Zsqr, in_x, Zsqr);
2571
+
2572
+ movq 0+0(%rsp),%rax
2573
+ movq 8+0(%rsp),%r14
2574
+ leaq 0+0(%rsp),%rsi
2575
+ movq 16+0(%rsp),%r15
2576
+ movq 24+0(%rsp),%r8
2577
+ movq %xmm1,%rdi
2578
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(res_y, S);
2579
+ xorq %r9,%r9
2580
+ movq %r12,%rax
2581
+ addq $-1,%r12
2582
+ movq %r13,%r10
2583
+ adcq %rsi,%r13
2584
+ movq %r14,%rcx
2585
+ adcq $0,%r14
2586
+ movq %r15,%r8
2587
+ adcq %rbp,%r15
2588
+ adcq $0,%r9
2589
+ xorq %rsi,%rsi // borrow %rsi
2590
+ testq $1,%rax
2591
+
2592
+ cmovzq %rax,%r12
2593
+ cmovzq %r10,%r13
2594
+ cmovzq %rcx,%r14
2595
+ cmovzq %r8,%r15
2596
+ cmovzq %rsi,%r9
2597
+
2598
+ movq %r13,%rax // a0:a3>>1
2599
+ shrq $1,%r12
2600
+ shlq $63,%rax
2601
+ movq %r14,%r10
2602
+ shrq $1,%r13
2603
+ orq %rax,%r12
2604
+ shlq $63,%r10
2605
+ movq %r15,%rcx
2606
+ shrq $1,%r14
2607
+ orq %r10,%r13
2608
+ shlq $63,%rcx
2609
+ movq %r12,0(%rdi)
2610
+ shrq $1,%r15
2611
+ movq %r13,8(%rdi)
2612
+ shlq $63,%r9
2613
+ orq %rcx,%r14
2614
+ orq %r9,%r15
2615
+ movq %r14,16(%rdi)
2616
+ movq %r15,24(%rdi)
2617
+ movq 64(%rsp),%rax
2618
+ leaq 64(%rsp),%rbx
2619
+ movq 0+32(%rsp),%r9
2620
+ movq 8+32(%rsp),%r10
2621
+ leaq 0+32(%rsp),%rsi
2622
+ movq 16+32(%rsp),%r11
2623
+ movq 24+32(%rsp),%r12
2624
+ leaq 32(%rsp),%rdi
2625
+ call __ecp_nistz256_mul_montq // p256_mul_mont(M, M, Zsqr);
2626
+
2627
+ leaq 128(%rsp),%rdi
2628
+ call __ecp_nistz256_mul_by_2q
2629
+
2630
+ leaq 32(%rsp),%rbx
2631
+ leaq 32(%rsp),%rdi
2632
+ call __ecp_nistz256_add_toq // p256_mul_by_3(M, M);
2633
+
2634
+ movq 96(%rsp),%rax
2635
+ leaq 96(%rsp),%rbx
2636
+ movq 0+0(%rsp),%r9
2637
+ movq 8+0(%rsp),%r10
2638
+ leaq 0+0(%rsp),%rsi
2639
+ movq 16+0(%rsp),%r11
2640
+ movq 24+0(%rsp),%r12
2641
+ leaq 0(%rsp),%rdi
2642
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S, S, in_x);
2643
+
2644
+ leaq 128(%rsp),%rdi
2645
+ call __ecp_nistz256_mul_by_2q // p256_mul_by_2(tmp0, S);
2646
+
2647
+ movq 0+32(%rsp),%rax
2648
+ movq 8+32(%rsp),%r14
2649
+ leaq 0+32(%rsp),%rsi
2650
+ movq 16+32(%rsp),%r15
2651
+ movq 24+32(%rsp),%r8
2652
+ movq %xmm0,%rdi
2653
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(res_x, M);
2654
+
2655
+ leaq 128(%rsp),%rbx
2656
+ movq %r14,%r8 // harmonize sqr output and sub input
2657
+ movq %r15,%r9
2658
+ movq %rsi,%r14
2659
+ movq %rbp,%r15
2660
+ call __ecp_nistz256_sub_fromq // p256_sub(res_x, res_x, tmp0);
2661
+
2662
+ movq 0+0(%rsp),%rax
2663
+ movq 0+8(%rsp),%rbp
2664
+ movq 0+16(%rsp),%rcx
2665
+ movq 0+24(%rsp),%r10 // "4-5-0-1" order
2666
+ leaq 0(%rsp),%rdi
2667
+ call __ecp_nistz256_subq // p256_sub(S, S, res_x);
2668
+
2669
+ movq 32(%rsp),%rax
2670
+ leaq 32(%rsp),%rbx
2671
+ movq %r12,%r14 // harmonize sub output and mul input
2672
+ xorl %ecx,%ecx
2673
+ movq %r12,0+0(%rsp) // have to save:-(
2674
+ movq %r13,%r10
2675
+ movq %r13,0+8(%rsp)
2676
+ cmovzq %r8,%r11
2677
+ movq %r8,0+16(%rsp)
2678
+ leaq 0-0(%rsp),%rsi
2679
+ cmovzq %r9,%r12
2680
+ movq %r9,0+24(%rsp)
2681
+ movq %r14,%r9
2682
+ leaq 0(%rsp),%rdi
2683
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S, S, M);
2684
+
2685
+ movq %xmm1,%rbx
2686
+ movq %xmm1,%rdi
2687
+ call __ecp_nistz256_sub_fromq // p256_sub(res_y, S, res_y);
2688
+
2689
+ leaq 160+56(%rsp),%rsi
2690
+ .cfi_def_cfa %rsi,8
2691
+ movq -48(%rsi),%r15
2692
+ .cfi_restore %r15
2693
+ movq -40(%rsi),%r14
2694
+ .cfi_restore %r14
2695
+ movq -32(%rsi),%r13
2696
+ .cfi_restore %r13
2697
+ movq -24(%rsi),%r12
2698
+ .cfi_restore %r12
2699
+ movq -16(%rsi),%rbx
2700
+ .cfi_restore %rbx
2701
+ movq -8(%rsi),%rbp
2702
+ .cfi_restore %rbp
2703
+ leaq (%rsi),%rsp
2704
+ .cfi_def_cfa_register %rsp
2705
+ .Lpoint_doubleq_epilogue:
2706
+ ret
2707
+ .cfi_endproc
2708
+ .size ecp_nistz256_point_double_nohw,.-ecp_nistz256_point_double_nohw
2709
+ .globl ecp_nistz256_point_add_nohw
2710
+ .hidden ecp_nistz256_point_add_nohw
2711
+ .type ecp_nistz256_point_add_nohw,@function
2712
+ .align 32
2713
+ ecp_nistz256_point_add_nohw:
2714
+ .cfi_startproc
2715
+ _CET_ENDBR
2716
+ pushq %rbp
2717
+ .cfi_adjust_cfa_offset 8
2718
+ .cfi_offset %rbp,-16
2719
+ pushq %rbx
2720
+ .cfi_adjust_cfa_offset 8
2721
+ .cfi_offset %rbx,-24
2722
+ pushq %r12
2723
+ .cfi_adjust_cfa_offset 8
2724
+ .cfi_offset %r12,-32
2725
+ pushq %r13
2726
+ .cfi_adjust_cfa_offset 8
2727
+ .cfi_offset %r13,-40
2728
+ pushq %r14
2729
+ .cfi_adjust_cfa_offset 8
2730
+ .cfi_offset %r14,-48
2731
+ pushq %r15
2732
+ .cfi_adjust_cfa_offset 8
2733
+ .cfi_offset %r15,-56
2734
+ subq $576+8,%rsp
2735
+ .cfi_adjust_cfa_offset 32*18+8
2736
+ .Lpoint_addq_body:
2737
+
2738
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rsi
2739
+ movdqu 16(%rsi),%xmm1
2740
+ movdqu 32(%rsi),%xmm2
2741
+ movdqu 48(%rsi),%xmm3
2742
+ movdqu 64(%rsi),%xmm4
2743
+ movdqu 80(%rsi),%xmm5
2744
+ movq %rsi,%rbx // reassign
2745
+ movq %rdx,%rsi // reassign
2746
+ movdqa %xmm0,384(%rsp)
2747
+ movdqa %xmm1,384+16(%rsp)
2748
+ movdqa %xmm2,416(%rsp)
2749
+ movdqa %xmm3,416+16(%rsp)
2750
+ movdqa %xmm4,448(%rsp)
2751
+ movdqa %xmm5,448+16(%rsp)
2752
+ por %xmm4,%xmm5
2753
+
2754
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rbx
2755
+ pshufd $0xb1,%xmm5,%xmm3
2756
+ movdqu 16(%rsi),%xmm1
2757
+ movdqu 32(%rsi),%xmm2
2758
+ por %xmm3,%xmm5
2759
+ movdqu 48(%rsi),%xmm3
2760
+ movq 64+0(%rsi),%rax // load original in2_z
2761
+ movq 64+8(%rsi),%r14
2762
+ movq 64+16(%rsi),%r15
2763
+ movq 64+24(%rsi),%r8
2764
+ movdqa %xmm0,480(%rsp)
2765
+ pshufd $0x1e,%xmm5,%xmm4
2766
+ movdqa %xmm1,480+16(%rsp)
2767
+ movdqu 64(%rsi),%xmm0 // in2_z again
2768
+ movdqu 80(%rsi),%xmm1
2769
+ movdqa %xmm2,512(%rsp)
2770
+ movdqa %xmm3,512+16(%rsp)
2771
+ por %xmm4,%xmm5
2772
+ pxor %xmm4,%xmm4
2773
+ por %xmm0,%xmm1
2774
+ movq %rdi,%xmm0 // save %rdi
2775
+
2776
+ leaq 64-0(%rsi),%rsi // %rsi is still valid
2777
+ movq %rax,544+0(%rsp) // make in2_z copy
2778
+ movq %r14,544+8(%rsp)
2779
+ movq %r15,544+16(%rsp)
2780
+ movq %r8,544+24(%rsp)
2781
+ leaq 96(%rsp),%rdi // Z2^2
2782
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Z2sqr, in2_z);
2783
+
2784
+ pcmpeqd %xmm4,%xmm5
2785
+ pshufd $0xb1,%xmm1,%xmm4
2786
+ por %xmm1,%xmm4
2787
+ pshufd $0,%xmm5,%xmm5 // in1infty
2788
+ pshufd $0x1e,%xmm4,%xmm3
2789
+ por %xmm3,%xmm4
2790
+ pxor %xmm3,%xmm3
2791
+ pcmpeqd %xmm3,%xmm4
2792
+ pshufd $0,%xmm4,%xmm4 // in2infty
2793
+ movq 64+0(%rbx),%rax // load original in1_z
2794
+ movq 64+8(%rbx),%r14
2795
+ movq 64+16(%rbx),%r15
2796
+ movq 64+24(%rbx),%r8
2797
+ movq %rbx,%xmm1
2798
+
2799
+ leaq 64-0(%rbx),%rsi
2800
+ leaq 32(%rsp),%rdi // Z1^2
2801
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Z1sqr, in1_z);
2802
+
2803
+ movq 544(%rsp),%rax
2804
+ leaq 544(%rsp),%rbx
2805
+ movq 0+96(%rsp),%r9
2806
+ movq 8+96(%rsp),%r10
2807
+ leaq 0+96(%rsp),%rsi
2808
+ movq 16+96(%rsp),%r11
2809
+ movq 24+96(%rsp),%r12
2810
+ leaq 224(%rsp),%rdi // S1 = Z2^3
2811
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S1, Z2sqr, in2_z);
2812
+
2813
+ movq 448(%rsp),%rax
2814
+ leaq 448(%rsp),%rbx
2815
+ movq 0+32(%rsp),%r9
2816
+ movq 8+32(%rsp),%r10
2817
+ leaq 0+32(%rsp),%rsi
2818
+ movq 16+32(%rsp),%r11
2819
+ movq 24+32(%rsp),%r12
2820
+ leaq 256(%rsp),%rdi // S2 = Z1^3
2821
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S2, Z1sqr, in1_z);
2822
+
2823
+ movq 416(%rsp),%rax
2824
+ leaq 416(%rsp),%rbx
2825
+ movq 0+224(%rsp),%r9
2826
+ movq 8+224(%rsp),%r10
2827
+ leaq 0+224(%rsp),%rsi
2828
+ movq 16+224(%rsp),%r11
2829
+ movq 24+224(%rsp),%r12
2830
+ leaq 224(%rsp),%rdi // S1 = Y1*Z2^3
2831
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S1, S1, in1_y);
2832
+
2833
+ movq 512(%rsp),%rax
2834
+ leaq 512(%rsp),%rbx
2835
+ movq 0+256(%rsp),%r9
2836
+ movq 8+256(%rsp),%r10
2837
+ leaq 0+256(%rsp),%rsi
2838
+ movq 16+256(%rsp),%r11
2839
+ movq 24+256(%rsp),%r12
2840
+ leaq 256(%rsp),%rdi // S2 = Y2*Z1^3
2841
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S2, S2, in2_y);
2842
+
2843
+ leaq 224(%rsp),%rbx
2844
+ leaq 64(%rsp),%rdi // R = S2 - S1
2845
+ call __ecp_nistz256_sub_fromq // p256_sub(R, S2, S1);
2846
+
2847
+ orq %r13,%r12 // see if result is zero
2848
+ movdqa %xmm4,%xmm2
2849
+ orq %r8,%r12
2850
+ orq %r9,%r12
2851
+ por %xmm5,%xmm2 // in1infty || in2infty
2852
+ movq %r12,%xmm3
2853
+
2854
+ movq 384(%rsp),%rax
2855
+ leaq 384(%rsp),%rbx
2856
+ movq 0+96(%rsp),%r9
2857
+ movq 8+96(%rsp),%r10
2858
+ leaq 0+96(%rsp),%rsi
2859
+ movq 16+96(%rsp),%r11
2860
+ movq 24+96(%rsp),%r12
2861
+ leaq 160(%rsp),%rdi // U1 = X1*Z2^2
2862
+ call __ecp_nistz256_mul_montq // p256_mul_mont(U1, in1_x, Z2sqr);
2863
+
2864
+ movq 480(%rsp),%rax
2865
+ leaq 480(%rsp),%rbx
2866
+ movq 0+32(%rsp),%r9
2867
+ movq 8+32(%rsp),%r10
2868
+ leaq 0+32(%rsp),%rsi
2869
+ movq 16+32(%rsp),%r11
2870
+ movq 24+32(%rsp),%r12
2871
+ leaq 192(%rsp),%rdi // U2 = X2*Z1^2
2872
+ call __ecp_nistz256_mul_montq // p256_mul_mont(U2, in2_x, Z1sqr);
2873
+
2874
+ leaq 160(%rsp),%rbx
2875
+ leaq 0(%rsp),%rdi // H = U2 - U1
2876
+ call __ecp_nistz256_sub_fromq // p256_sub(H, U2, U1);
2877
+
2878
+ orq %r13,%r12 // see if result is zero
2879
+ orq %r8,%r12
2880
+ orq %r9,%r12 //
2881
+
2882
+ movq %xmm2,%r8
2883
+ movq %xmm3,%r9
2884
+ orq %r8,%r12
2885
+ .byte 0x3e // predict taken
2886
+ jnz .Ladd_proceedq //
2887
+
2888
+ // We now know A = B or A = -B and neither is infinity. Compare the
2889
+ // y-coordinates via S1 and S2.
2890
+ testq %r9,%r9
2891
+ jz .Ladd_doubleq // is_equal(S1, S2)
2892
+
2893
+ // A = -B, so the result is infinity.
2894
+ //
2895
+ // TODO(davidben): Does .Ladd_proceed handle this case? It seems to, in
2896
+ // which case we should eliminate this special-case and simplify the
2897
+ // timing analysis.
2898
+ movq %xmm0,%rdi // restore %rdi
2899
+ pxor %xmm0,%xmm0
2900
+ movdqu %xmm0,0(%rdi)
2901
+ movdqu %xmm0,16(%rdi)
2902
+ movdqu %xmm0,32(%rdi)
2903
+ movdqu %xmm0,48(%rdi)
2904
+ movdqu %xmm0,64(%rdi)
2905
+ movdqu %xmm0,80(%rdi)
2906
+ jmp .Ladd_doneq
2907
+
2908
+ .align 32
2909
+ .Ladd_doubleq:
2910
+ movq %xmm1,%rsi // restore %rsi
2911
+ movq %xmm0,%rdi // restore %rdi
2912
+ addq $416,%rsp // difference in frame sizes
2913
+ .cfi_adjust_cfa_offset -416
2914
+ jmp .Lpoint_double_shortcutq
2915
+ .cfi_adjust_cfa_offset 416
2916
+
2917
+ .align 32
2918
+ .Ladd_proceedq:
2919
+ movq 0+64(%rsp),%rax
2920
+ movq 8+64(%rsp),%r14
2921
+ leaq 0+64(%rsp),%rsi
2922
+ movq 16+64(%rsp),%r15
2923
+ movq 24+64(%rsp),%r8
2924
+ leaq 96(%rsp),%rdi // R^2
2925
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Rsqr, R);
2926
+
2927
+ movq 448(%rsp),%rax
2928
+ leaq 448(%rsp),%rbx
2929
+ movq 0+0(%rsp),%r9
2930
+ movq 8+0(%rsp),%r10
2931
+ leaq 0+0(%rsp),%rsi
2932
+ movq 16+0(%rsp),%r11
2933
+ movq 24+0(%rsp),%r12
2934
+ leaq 352(%rsp),%rdi // Z3 = H*Z1*Z2
2935
+ call __ecp_nistz256_mul_montq // p256_mul_mont(res_z, H, in1_z);
2936
+
2937
+ movq 0+0(%rsp),%rax
2938
+ movq 8+0(%rsp),%r14
2939
+ leaq 0+0(%rsp),%rsi
2940
+ movq 16+0(%rsp),%r15
2941
+ movq 24+0(%rsp),%r8
2942
+ leaq 32(%rsp),%rdi // H^2
2943
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Hsqr, H);
2944
+
2945
+ movq 544(%rsp),%rax
2946
+ leaq 544(%rsp),%rbx
2947
+ movq 0+352(%rsp),%r9
2948
+ movq 8+352(%rsp),%r10
2949
+ leaq 0+352(%rsp),%rsi
2950
+ movq 16+352(%rsp),%r11
2951
+ movq 24+352(%rsp),%r12
2952
+ leaq 352(%rsp),%rdi // Z3 = H*Z1*Z2
2953
+ call __ecp_nistz256_mul_montq // p256_mul_mont(res_z, res_z, in2_z);
2954
+
2955
+ movq 0(%rsp),%rax
2956
+ leaq 0(%rsp),%rbx
2957
+ movq 0+32(%rsp),%r9
2958
+ movq 8+32(%rsp),%r10
2959
+ leaq 0+32(%rsp),%rsi
2960
+ movq 16+32(%rsp),%r11
2961
+ movq 24+32(%rsp),%r12
2962
+ leaq 128(%rsp),%rdi // H^3
2963
+ call __ecp_nistz256_mul_montq // p256_mul_mont(Hcub, Hsqr, H);
2964
+
2965
+ movq 160(%rsp),%rax
2966
+ leaq 160(%rsp),%rbx
2967
+ movq 0+32(%rsp),%r9
2968
+ movq 8+32(%rsp),%r10
2969
+ leaq 0+32(%rsp),%rsi
2970
+ movq 16+32(%rsp),%r11
2971
+ movq 24+32(%rsp),%r12
2972
+ leaq 192(%rsp),%rdi // U1*H^2
2973
+ call __ecp_nistz256_mul_montq // p256_mul_mont(U2, U1, Hsqr);
2974
+ // lea 192(%rsp), %rsi
2975
+ // lea 32(%rsp), %rdi # 2*U1*H^2
2976
+ // call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
2977
+
2978
+ xorq %r11,%r11
2979
+ addq %r12,%r12 // a0:a3+a0:a3
2980
+ leaq 96(%rsp),%rsi
2981
+ adcq %r13,%r13
2982
+ movq %r12,%rax
2983
+ adcq %r8,%r8
2984
+ adcq %r9,%r9
2985
+ movq %r13,%rbp
2986
+ adcq $0,%r11
2987
+
2988
+ subq $-1,%r12
2989
+ movq %r8,%rcx
2990
+ sbbq %r14,%r13
2991
+ sbbq $0,%r8
2992
+ movq %r9,%r10
2993
+ sbbq %r15,%r9
2994
+ sbbq $0,%r11
2995
+
2996
+ cmovcq %rax,%r12
2997
+ movq 0(%rsi),%rax
2998
+ cmovcq %rbp,%r13
2999
+ movq 8(%rsi),%rbp
3000
+ cmovcq %rcx,%r8
3001
+ movq 16(%rsi),%rcx
3002
+ cmovcq %r10,%r9
3003
+ movq 24(%rsi),%r10
3004
+
3005
+ call __ecp_nistz256_subq // p256_sub(res_x, Rsqr, Hsqr);
3006
+
3007
+ leaq 128(%rsp),%rbx
3008
+ leaq 288(%rsp),%rdi
3009
+ call __ecp_nistz256_sub_fromq // p256_sub(res_x, res_x, Hcub);
3010
+
3011
+ movq 192+0(%rsp),%rax
3012
+ movq 192+8(%rsp),%rbp
3013
+ movq 192+16(%rsp),%rcx
3014
+ movq 192+24(%rsp),%r10
3015
+ leaq 320(%rsp),%rdi
3016
+
3017
+ call __ecp_nistz256_subq // p256_sub(res_y, U2, res_x);
3018
+
3019
+ movq %r12,0(%rdi) // save the result, as
3020
+ movq %r13,8(%rdi) // __ecp_nistz256_sub doesn't
3021
+ movq %r8,16(%rdi)
3022
+ movq %r9,24(%rdi)
3023
+ movq 128(%rsp),%rax
3024
+ leaq 128(%rsp),%rbx
3025
+ movq 0+224(%rsp),%r9
3026
+ movq 8+224(%rsp),%r10
3027
+ leaq 0+224(%rsp),%rsi
3028
+ movq 16+224(%rsp),%r11
3029
+ movq 24+224(%rsp),%r12
3030
+ leaq 256(%rsp),%rdi
3031
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S2, S1, Hcub);
3032
+
3033
+ movq 320(%rsp),%rax
3034
+ leaq 320(%rsp),%rbx
3035
+ movq 0+64(%rsp),%r9
3036
+ movq 8+64(%rsp),%r10
3037
+ leaq 0+64(%rsp),%rsi
3038
+ movq 16+64(%rsp),%r11
3039
+ movq 24+64(%rsp),%r12
3040
+ leaq 320(%rsp),%rdi
3041
+ call __ecp_nistz256_mul_montq // p256_mul_mont(res_y, R, res_y);
3042
+
3043
+ leaq 256(%rsp),%rbx
3044
+ leaq 320(%rsp),%rdi
3045
+ call __ecp_nistz256_sub_fromq // p256_sub(res_y, res_y, S2);
3046
+
3047
+ movq %xmm0,%rdi // restore %rdi
3048
+
3049
+ movdqa %xmm5,%xmm0 // copy_conditional(res_z, in2_z, in1infty);
3050
+ movdqa %xmm5,%xmm1
3051
+ pandn 352(%rsp),%xmm0
3052
+ movdqa %xmm5,%xmm2
3053
+ pandn 352+16(%rsp),%xmm1
3054
+ movdqa %xmm5,%xmm3
3055
+ pand 544(%rsp),%xmm2
3056
+ pand 544+16(%rsp),%xmm3
3057
+ por %xmm0,%xmm2
3058
+ por %xmm1,%xmm3
3059
+
3060
+ movdqa %xmm4,%xmm0 // copy_conditional(res_z, in1_z, in2infty);
3061
+ movdqa %xmm4,%xmm1
3062
+ pandn %xmm2,%xmm0
3063
+ movdqa %xmm4,%xmm2
3064
+ pandn %xmm3,%xmm1
3065
+ movdqa %xmm4,%xmm3
3066
+ pand 448(%rsp),%xmm2
3067
+ pand 448+16(%rsp),%xmm3
3068
+ por %xmm0,%xmm2
3069
+ por %xmm1,%xmm3
3070
+ movdqu %xmm2,64(%rdi)
3071
+ movdqu %xmm3,80(%rdi)
3072
+
3073
+ movdqa %xmm5,%xmm0 // copy_conditional(res_x, in2_x, in1infty);
3074
+ movdqa %xmm5,%xmm1
3075
+ pandn 288(%rsp),%xmm0
3076
+ movdqa %xmm5,%xmm2
3077
+ pandn 288+16(%rsp),%xmm1
3078
+ movdqa %xmm5,%xmm3
3079
+ pand 480(%rsp),%xmm2
3080
+ pand 480+16(%rsp),%xmm3
3081
+ por %xmm0,%xmm2
3082
+ por %xmm1,%xmm3
3083
+
3084
+ movdqa %xmm4,%xmm0 // copy_conditional(res_x, in1_x, in2infty);
3085
+ movdqa %xmm4,%xmm1
3086
+ pandn %xmm2,%xmm0
3087
+ movdqa %xmm4,%xmm2
3088
+ pandn %xmm3,%xmm1
3089
+ movdqa %xmm4,%xmm3
3090
+ pand 384(%rsp),%xmm2
3091
+ pand 384+16(%rsp),%xmm3
3092
+ por %xmm0,%xmm2
3093
+ por %xmm1,%xmm3
3094
+ movdqu %xmm2,0(%rdi)
3095
+ movdqu %xmm3,16(%rdi)
3096
+
3097
+ movdqa %xmm5,%xmm0 // copy_conditional(res_y, in2_y, in1infty);
3098
+ movdqa %xmm5,%xmm1
3099
+ pandn 320(%rsp),%xmm0
3100
+ movdqa %xmm5,%xmm2
3101
+ pandn 320+16(%rsp),%xmm1
3102
+ movdqa %xmm5,%xmm3
3103
+ pand 512(%rsp),%xmm2
3104
+ pand 512+16(%rsp),%xmm3
3105
+ por %xmm0,%xmm2
3106
+ por %xmm1,%xmm3
3107
+
3108
+ movdqa %xmm4,%xmm0 // copy_conditional(res_y, in1_y, in2infty);
3109
+ movdqa %xmm4,%xmm1
3110
+ pandn %xmm2,%xmm0
3111
+ movdqa %xmm4,%xmm2
3112
+ pandn %xmm3,%xmm1
3113
+ movdqa %xmm4,%xmm3
3114
+ pand 416(%rsp),%xmm2
3115
+ pand 416+16(%rsp),%xmm3
3116
+ por %xmm0,%xmm2
3117
+ por %xmm1,%xmm3
3118
+ movdqu %xmm2,32(%rdi)
3119
+ movdqu %xmm3,48(%rdi)
3120
+
3121
+ .Ladd_doneq:
3122
+ leaq 576+56(%rsp),%rsi
3123
+ .cfi_def_cfa %rsi,8
3124
+ movq -48(%rsi),%r15
3125
+ .cfi_restore %r15
3126
+ movq -40(%rsi),%r14
3127
+ .cfi_restore %r14
3128
+ movq -32(%rsi),%r13
3129
+ .cfi_restore %r13
3130
+ movq -24(%rsi),%r12
3131
+ .cfi_restore %r12
3132
+ movq -16(%rsi),%rbx
3133
+ .cfi_restore %rbx
3134
+ movq -8(%rsi),%rbp
3135
+ .cfi_restore %rbp
3136
+ leaq (%rsi),%rsp
3137
+ .cfi_def_cfa_register %rsp
3138
+ .Lpoint_addq_epilogue:
3139
+ ret
3140
+ .cfi_endproc
3141
+ .size ecp_nistz256_point_add_nohw,.-ecp_nistz256_point_add_nohw
3142
+ .globl ecp_nistz256_point_add_affine_nohw
3143
+ .hidden ecp_nistz256_point_add_affine_nohw
3144
+ .type ecp_nistz256_point_add_affine_nohw,@function
3145
+ .align 32
3146
+ ecp_nistz256_point_add_affine_nohw:
3147
+ .cfi_startproc
3148
+ _CET_ENDBR
3149
+ pushq %rbp
3150
+ .cfi_adjust_cfa_offset 8
3151
+ .cfi_offset %rbp,-16
3152
+ pushq %rbx
3153
+ .cfi_adjust_cfa_offset 8
3154
+ .cfi_offset %rbx,-24
3155
+ pushq %r12
3156
+ .cfi_adjust_cfa_offset 8
3157
+ .cfi_offset %r12,-32
3158
+ pushq %r13
3159
+ .cfi_adjust_cfa_offset 8
3160
+ .cfi_offset %r13,-40
3161
+ pushq %r14
3162
+ .cfi_adjust_cfa_offset 8
3163
+ .cfi_offset %r14,-48
3164
+ pushq %r15
3165
+ .cfi_adjust_cfa_offset 8
3166
+ .cfi_offset %r15,-56
3167
+ subq $480+8,%rsp
3168
+ .cfi_adjust_cfa_offset 32*15+8
3169
+ .Ladd_affineq_body:
3170
+
3171
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rsi
3172
+ movq %rdx,%rbx // reassign
3173
+ movdqu 16(%rsi),%xmm1
3174
+ movdqu 32(%rsi),%xmm2
3175
+ movdqu 48(%rsi),%xmm3
3176
+ movdqu 64(%rsi),%xmm4
3177
+ movdqu 80(%rsi),%xmm5
3178
+ movq 64+0(%rsi),%rax // load original in1_z
3179
+ movq 64+8(%rsi),%r14
3180
+ movq 64+16(%rsi),%r15
3181
+ movq 64+24(%rsi),%r8
3182
+ movdqa %xmm0,320(%rsp)
3183
+ movdqa %xmm1,320+16(%rsp)
3184
+ movdqa %xmm2,352(%rsp)
3185
+ movdqa %xmm3,352+16(%rsp)
3186
+ movdqa %xmm4,384(%rsp)
3187
+ movdqa %xmm5,384+16(%rsp)
3188
+ por %xmm4,%xmm5
3189
+
3190
+ movdqu 0(%rbx),%xmm0 // copy *(P256_POINT_AFFINE *)%rbx
3191
+ pshufd $0xb1,%xmm5,%xmm3
3192
+ movdqu 16(%rbx),%xmm1
3193
+ movdqu 32(%rbx),%xmm2
3194
+ por %xmm3,%xmm5
3195
+ movdqu 48(%rbx),%xmm3
3196
+ movdqa %xmm0,416(%rsp)
3197
+ pshufd $0x1e,%xmm5,%xmm4
3198
+ movdqa %xmm1,416+16(%rsp)
3199
+ por %xmm0,%xmm1
3200
+ movq %rdi,%xmm0 // save %rdi
3201
+ movdqa %xmm2,448(%rsp)
3202
+ movdqa %xmm3,448+16(%rsp)
3203
+ por %xmm2,%xmm3
3204
+ por %xmm4,%xmm5
3205
+ pxor %xmm4,%xmm4
3206
+ por %xmm1,%xmm3
3207
+
3208
+ leaq 64-0(%rsi),%rsi // %rsi is still valid
3209
+ leaq 32(%rsp),%rdi // Z1^2
3210
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Z1sqr, in1_z);
3211
+
3212
+ pcmpeqd %xmm4,%xmm5
3213
+ pshufd $0xb1,%xmm3,%xmm4
3214
+ movq 0(%rbx),%rax // %rbx is still valid
3215
+ // lea 0x00(%rbx), %rbx
3216
+ movq %r12,%r9 // harmonize sqr output and mul input
3217
+ por %xmm3,%xmm4
3218
+ pshufd $0,%xmm5,%xmm5 // in1infty
3219
+ pshufd $0x1e,%xmm4,%xmm3
3220
+ movq %r13,%r10
3221
+ por %xmm3,%xmm4
3222
+ pxor %xmm3,%xmm3
3223
+ movq %r14,%r11
3224
+ pcmpeqd %xmm3,%xmm4
3225
+ pshufd $0,%xmm4,%xmm4 // in2infty
3226
+
3227
+ leaq 32-0(%rsp),%rsi
3228
+ movq %r15,%r12
3229
+ leaq 0(%rsp),%rdi // U2 = X2*Z1^2
3230
+ call __ecp_nistz256_mul_montq // p256_mul_mont(U2, Z1sqr, in2_x);
3231
+
3232
+ leaq 320(%rsp),%rbx
3233
+ leaq 64(%rsp),%rdi // H = U2 - U1
3234
+ call __ecp_nistz256_sub_fromq // p256_sub(H, U2, in1_x);
3235
+
3236
+ movq 384(%rsp),%rax
3237
+ leaq 384(%rsp),%rbx
3238
+ movq 0+32(%rsp),%r9
3239
+ movq 8+32(%rsp),%r10
3240
+ leaq 0+32(%rsp),%rsi
3241
+ movq 16+32(%rsp),%r11
3242
+ movq 24+32(%rsp),%r12
3243
+ leaq 32(%rsp),%rdi // S2 = Z1^3
3244
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S2, Z1sqr, in1_z);
3245
+
3246
+ movq 384(%rsp),%rax
3247
+ leaq 384(%rsp),%rbx
3248
+ movq 0+64(%rsp),%r9
3249
+ movq 8+64(%rsp),%r10
3250
+ leaq 0+64(%rsp),%rsi
3251
+ movq 16+64(%rsp),%r11
3252
+ movq 24+64(%rsp),%r12
3253
+ leaq 288(%rsp),%rdi // Z3 = H*Z1*Z2
3254
+ call __ecp_nistz256_mul_montq // p256_mul_mont(res_z, H, in1_z);
3255
+
3256
+ movq 448(%rsp),%rax
3257
+ leaq 448(%rsp),%rbx
3258
+ movq 0+32(%rsp),%r9
3259
+ movq 8+32(%rsp),%r10
3260
+ leaq 0+32(%rsp),%rsi
3261
+ movq 16+32(%rsp),%r11
3262
+ movq 24+32(%rsp),%r12
3263
+ leaq 32(%rsp),%rdi // S2 = Y2*Z1^3
3264
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S2, S2, in2_y);
3265
+
3266
+ leaq 352(%rsp),%rbx
3267
+ leaq 96(%rsp),%rdi // R = S2 - S1
3268
+ call __ecp_nistz256_sub_fromq // p256_sub(R, S2, in1_y);
3269
+
3270
+ movq 0+64(%rsp),%rax
3271
+ movq 8+64(%rsp),%r14
3272
+ leaq 0+64(%rsp),%rsi
3273
+ movq 16+64(%rsp),%r15
3274
+ movq 24+64(%rsp),%r8
3275
+ leaq 128(%rsp),%rdi // H^2
3276
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Hsqr, H);
3277
+
3278
+ movq 0+96(%rsp),%rax
3279
+ movq 8+96(%rsp),%r14
3280
+ leaq 0+96(%rsp),%rsi
3281
+ movq 16+96(%rsp),%r15
3282
+ movq 24+96(%rsp),%r8
3283
+ leaq 192(%rsp),%rdi // R^2
3284
+ call __ecp_nistz256_sqr_montq // p256_sqr_mont(Rsqr, R);
3285
+
3286
+ movq 128(%rsp),%rax
3287
+ leaq 128(%rsp),%rbx
3288
+ movq 0+64(%rsp),%r9
3289
+ movq 8+64(%rsp),%r10
3290
+ leaq 0+64(%rsp),%rsi
3291
+ movq 16+64(%rsp),%r11
3292
+ movq 24+64(%rsp),%r12
3293
+ leaq 160(%rsp),%rdi // H^3
3294
+ call __ecp_nistz256_mul_montq // p256_mul_mont(Hcub, Hsqr, H);
3295
+
3296
+ movq 320(%rsp),%rax
3297
+ leaq 320(%rsp),%rbx
3298
+ movq 0+128(%rsp),%r9
3299
+ movq 8+128(%rsp),%r10
3300
+ leaq 0+128(%rsp),%rsi
3301
+ movq 16+128(%rsp),%r11
3302
+ movq 24+128(%rsp),%r12
3303
+ leaq 0(%rsp),%rdi // U1*H^2
3304
+ call __ecp_nistz256_mul_montq // p256_mul_mont(U2, in1_x, Hsqr);
3305
+ // lea 0(%rsp), %rsi
3306
+ // lea 128(%rsp), %rdi # 2*U1*H^2
3307
+ // call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
3308
+
3309
+ xorq %r11,%r11
3310
+ addq %r12,%r12 // a0:a3+a0:a3
3311
+ leaq 192(%rsp),%rsi
3312
+ adcq %r13,%r13
3313
+ movq %r12,%rax
3314
+ adcq %r8,%r8
3315
+ adcq %r9,%r9
3316
+ movq %r13,%rbp
3317
+ adcq $0,%r11
3318
+
3319
+ subq $-1,%r12
3320
+ movq %r8,%rcx
3321
+ sbbq %r14,%r13
3322
+ sbbq $0,%r8
3323
+ movq %r9,%r10
3324
+ sbbq %r15,%r9
3325
+ sbbq $0,%r11
3326
+
3327
+ cmovcq %rax,%r12
3328
+ movq 0(%rsi),%rax
3329
+ cmovcq %rbp,%r13
3330
+ movq 8(%rsi),%rbp
3331
+ cmovcq %rcx,%r8
3332
+ movq 16(%rsi),%rcx
3333
+ cmovcq %r10,%r9
3334
+ movq 24(%rsi),%r10
3335
+
3336
+ call __ecp_nistz256_subq // p256_sub(res_x, Rsqr, Hsqr);
3337
+
3338
+ leaq 160(%rsp),%rbx
3339
+ leaq 224(%rsp),%rdi
3340
+ call __ecp_nistz256_sub_fromq // p256_sub(res_x, res_x, Hcub);
3341
+
3342
+ movq 0+0(%rsp),%rax
3343
+ movq 0+8(%rsp),%rbp
3344
+ movq 0+16(%rsp),%rcx
3345
+ movq 0+24(%rsp),%r10
3346
+ leaq 64(%rsp),%rdi
3347
+
3348
+ call __ecp_nistz256_subq // p256_sub(H, U2, res_x);
3349
+
3350
+ movq %r12,0(%rdi) // save the result, as
3351
+ movq %r13,8(%rdi) // __ecp_nistz256_sub doesn't
3352
+ movq %r8,16(%rdi)
3353
+ movq %r9,24(%rdi)
3354
+ movq 352(%rsp),%rax
3355
+ leaq 352(%rsp),%rbx
3356
+ movq 0+160(%rsp),%r9
3357
+ movq 8+160(%rsp),%r10
3358
+ leaq 0+160(%rsp),%rsi
3359
+ movq 16+160(%rsp),%r11
3360
+ movq 24+160(%rsp),%r12
3361
+ leaq 32(%rsp),%rdi
3362
+ call __ecp_nistz256_mul_montq // p256_mul_mont(S2, Hcub, in1_y);
3363
+
3364
+ movq 96(%rsp),%rax
3365
+ leaq 96(%rsp),%rbx
3366
+ movq 0+64(%rsp),%r9
3367
+ movq 8+64(%rsp),%r10
3368
+ leaq 0+64(%rsp),%rsi
3369
+ movq 16+64(%rsp),%r11
3370
+ movq 24+64(%rsp),%r12
3371
+ leaq 64(%rsp),%rdi
3372
+ call __ecp_nistz256_mul_montq // p256_mul_mont(H, H, R);
3373
+
3374
+ leaq 32(%rsp),%rbx
3375
+ leaq 256(%rsp),%rdi
3376
+ call __ecp_nistz256_sub_fromq // p256_sub(res_y, H, S2);
3377
+
3378
+ movq %xmm0,%rdi // restore %rdi
3379
+
3380
+ movdqa %xmm5,%xmm0 // copy_conditional(res_z, ONE, in1infty);
3381
+ movdqa %xmm5,%xmm1
3382
+ pandn 288(%rsp),%xmm0
3383
+ movdqa %xmm5,%xmm2
3384
+ pandn 288+16(%rsp),%xmm1
3385
+ movdqa %xmm5,%xmm3
3386
+ pand .LONE_mont(%rip),%xmm2
3387
+ pand .LONE_mont+16(%rip),%xmm3
3388
+ por %xmm0,%xmm2
3389
+ por %xmm1,%xmm3
3390
+
3391
+ movdqa %xmm4,%xmm0 // copy_conditional(res_z, in1_z, in2infty);
3392
+ movdqa %xmm4,%xmm1
3393
+ pandn %xmm2,%xmm0
3394
+ movdqa %xmm4,%xmm2
3395
+ pandn %xmm3,%xmm1
3396
+ movdqa %xmm4,%xmm3
3397
+ pand 384(%rsp),%xmm2
3398
+ pand 384+16(%rsp),%xmm3
3399
+ por %xmm0,%xmm2
3400
+ por %xmm1,%xmm3
3401
+ movdqu %xmm2,64(%rdi)
3402
+ movdqu %xmm3,80(%rdi)
3403
+
3404
+ movdqa %xmm5,%xmm0 // copy_conditional(res_x, in2_x, in1infty);
3405
+ movdqa %xmm5,%xmm1
3406
+ pandn 224(%rsp),%xmm0
3407
+ movdqa %xmm5,%xmm2
3408
+ pandn 224+16(%rsp),%xmm1
3409
+ movdqa %xmm5,%xmm3
3410
+ pand 416(%rsp),%xmm2
3411
+ pand 416+16(%rsp),%xmm3
3412
+ por %xmm0,%xmm2
3413
+ por %xmm1,%xmm3
3414
+
3415
+ movdqa %xmm4,%xmm0 // copy_conditional(res_x, in1_x, in2infty);
3416
+ movdqa %xmm4,%xmm1
3417
+ pandn %xmm2,%xmm0
3418
+ movdqa %xmm4,%xmm2
3419
+ pandn %xmm3,%xmm1
3420
+ movdqa %xmm4,%xmm3
3421
+ pand 320(%rsp),%xmm2
3422
+ pand 320+16(%rsp),%xmm3
3423
+ por %xmm0,%xmm2
3424
+ por %xmm1,%xmm3
3425
+ movdqu %xmm2,0(%rdi)
3426
+ movdqu %xmm3,16(%rdi)
3427
+
3428
+ movdqa %xmm5,%xmm0 // copy_conditional(res_y, in2_y, in1infty);
3429
+ movdqa %xmm5,%xmm1
3430
+ pandn 256(%rsp),%xmm0
3431
+ movdqa %xmm5,%xmm2
3432
+ pandn 256+16(%rsp),%xmm1
3433
+ movdqa %xmm5,%xmm3
3434
+ pand 448(%rsp),%xmm2
3435
+ pand 448+16(%rsp),%xmm3
3436
+ por %xmm0,%xmm2
3437
+ por %xmm1,%xmm3
3438
+
3439
+ movdqa %xmm4,%xmm0 // copy_conditional(res_y, in1_y, in2infty);
3440
+ movdqa %xmm4,%xmm1
3441
+ pandn %xmm2,%xmm0
3442
+ movdqa %xmm4,%xmm2
3443
+ pandn %xmm3,%xmm1
3444
+ movdqa %xmm4,%xmm3
3445
+ pand 352(%rsp),%xmm2
3446
+ pand 352+16(%rsp),%xmm3
3447
+ por %xmm0,%xmm2
3448
+ por %xmm1,%xmm3
3449
+ movdqu %xmm2,32(%rdi)
3450
+ movdqu %xmm3,48(%rdi)
3451
+
3452
+ leaq 480+56(%rsp),%rsi
3453
+ .cfi_def_cfa %rsi,8
3454
+ movq -48(%rsi),%r15
3455
+ .cfi_restore %r15
3456
+ movq -40(%rsi),%r14
3457
+ .cfi_restore %r14
3458
+ movq -32(%rsi),%r13
3459
+ .cfi_restore %r13
3460
+ movq -24(%rsi),%r12
3461
+ .cfi_restore %r12
3462
+ movq -16(%rsi),%rbx
3463
+ .cfi_restore %rbx
3464
+ movq -8(%rsi),%rbp
3465
+ .cfi_restore %rbp
3466
+ leaq (%rsi),%rsp
3467
+ .cfi_def_cfa_register %rsp
3468
+ .Ladd_affineq_epilogue:
3469
+ ret
3470
+ .cfi_endproc
3471
+ .size ecp_nistz256_point_add_affine_nohw,.-ecp_nistz256_point_add_affine_nohw
3472
+ .type __ecp_nistz256_add_tox,@function
3473
+ .align 32
3474
+ __ecp_nistz256_add_tox:
3475
+ .cfi_startproc
3476
+ xorq %r11,%r11
3477
+ adcq 0(%rbx),%r12
3478
+ adcq 8(%rbx),%r13
3479
+ movq %r12,%rax
3480
+ adcq 16(%rbx),%r8
3481
+ adcq 24(%rbx),%r9
3482
+ movq %r13,%rbp
3483
+ adcq $0,%r11
3484
+
3485
+ xorq %r10,%r10
3486
+ sbbq $-1,%r12
3487
+ movq %r8,%rcx
3488
+ sbbq %r14,%r13
3489
+ sbbq $0,%r8
3490
+ movq %r9,%r10
3491
+ sbbq %r15,%r9
3492
+ sbbq $0,%r11
3493
+
3494
+ cmovcq %rax,%r12
3495
+ cmovcq %rbp,%r13
3496
+ movq %r12,0(%rdi)
3497
+ cmovcq %rcx,%r8
3498
+ movq %r13,8(%rdi)
3499
+ cmovcq %r10,%r9
3500
+ movq %r8,16(%rdi)
3501
+ movq %r9,24(%rdi)
3502
+
3503
+ ret
3504
+ .cfi_endproc
3505
+ .size __ecp_nistz256_add_tox,.-__ecp_nistz256_add_tox
3506
+
3507
+ .type __ecp_nistz256_sub_fromx,@function
3508
+ .align 32
3509
+ __ecp_nistz256_sub_fromx:
3510
+ .cfi_startproc
3511
+ xorq %r11,%r11
3512
+ sbbq 0(%rbx),%r12
3513
+ sbbq 8(%rbx),%r13
3514
+ movq %r12,%rax
3515
+ sbbq 16(%rbx),%r8
3516
+ sbbq 24(%rbx),%r9
3517
+ movq %r13,%rbp
3518
+ sbbq $0,%r11
3519
+
3520
+ xorq %r10,%r10
3521
+ adcq $-1,%r12
3522
+ movq %r8,%rcx
3523
+ adcq %r14,%r13
3524
+ adcq $0,%r8
3525
+ movq %r9,%r10
3526
+ adcq %r15,%r9
3527
+
3528
+ btq $0,%r11
3529
+ cmovncq %rax,%r12
3530
+ cmovncq %rbp,%r13
3531
+ movq %r12,0(%rdi)
3532
+ cmovncq %rcx,%r8
3533
+ movq %r13,8(%rdi)
3534
+ cmovncq %r10,%r9
3535
+ movq %r8,16(%rdi)
3536
+ movq %r9,24(%rdi)
3537
+
3538
+ ret
3539
+ .cfi_endproc
3540
+ .size __ecp_nistz256_sub_fromx,.-__ecp_nistz256_sub_fromx
3541
+
3542
+ .type __ecp_nistz256_subx,@function
3543
+ .align 32
3544
+ __ecp_nistz256_subx:
3545
+ .cfi_startproc
3546
+ xorq %r11,%r11
3547
+ sbbq %r12,%rax
3548
+ sbbq %r13,%rbp
3549
+ movq %rax,%r12
3550
+ sbbq %r8,%rcx
3551
+ sbbq %r9,%r10
3552
+ movq %rbp,%r13
3553
+ sbbq $0,%r11
3554
+
3555
+ xorq %r9,%r9
3556
+ adcq $-1,%rax
3557
+ movq %rcx,%r8
3558
+ adcq %r14,%rbp
3559
+ adcq $0,%rcx
3560
+ movq %r10,%r9
3561
+ adcq %r15,%r10
3562
+
3563
+ btq $0,%r11
3564
+ cmovcq %rax,%r12
3565
+ cmovcq %rbp,%r13
3566
+ cmovcq %rcx,%r8
3567
+ cmovcq %r10,%r9
3568
+
3569
+ ret
3570
+ .cfi_endproc
3571
+ .size __ecp_nistz256_subx,.-__ecp_nistz256_subx
3572
+
3573
+ .type __ecp_nistz256_mul_by_2x,@function
3574
+ .align 32
3575
+ __ecp_nistz256_mul_by_2x:
3576
+ .cfi_startproc
3577
+ xorq %r11,%r11
3578
+ adcq %r12,%r12 // a0:a3+a0:a3
3579
+ adcq %r13,%r13
3580
+ movq %r12,%rax
3581
+ adcq %r8,%r8
3582
+ adcq %r9,%r9
3583
+ movq %r13,%rbp
3584
+ adcq $0,%r11
3585
+
3586
+ xorq %r10,%r10
3587
+ sbbq $-1,%r12
3588
+ movq %r8,%rcx
3589
+ sbbq %r14,%r13
3590
+ sbbq $0,%r8
3591
+ movq %r9,%r10
3592
+ sbbq %r15,%r9
3593
+ sbbq $0,%r11
3594
+
3595
+ cmovcq %rax,%r12
3596
+ cmovcq %rbp,%r13
3597
+ movq %r12,0(%rdi)
3598
+ cmovcq %rcx,%r8
3599
+ movq %r13,8(%rdi)
3600
+ cmovcq %r10,%r9
3601
+ movq %r8,16(%rdi)
3602
+ movq %r9,24(%rdi)
3603
+
3604
+ ret
3605
+ .cfi_endproc
3606
+ .size __ecp_nistz256_mul_by_2x,.-__ecp_nistz256_mul_by_2x
3607
+ .globl ecp_nistz256_point_double_adx
3608
+ .hidden ecp_nistz256_point_double_adx
3609
+ .type ecp_nistz256_point_double_adx,@function
3610
+ .align 32
3611
+ ecp_nistz256_point_double_adx:
3612
+ .cfi_startproc
3613
+ _CET_ENDBR
3614
+ pushq %rbp
3615
+ .cfi_adjust_cfa_offset 8
3616
+ .cfi_offset %rbp,-16
3617
+ pushq %rbx
3618
+ .cfi_adjust_cfa_offset 8
3619
+ .cfi_offset %rbx,-24
3620
+ pushq %r12
3621
+ .cfi_adjust_cfa_offset 8
3622
+ .cfi_offset %r12,-32
3623
+ pushq %r13
3624
+ .cfi_adjust_cfa_offset 8
3625
+ .cfi_offset %r13,-40
3626
+ pushq %r14
3627
+ .cfi_adjust_cfa_offset 8
3628
+ .cfi_offset %r14,-48
3629
+ pushq %r15
3630
+ .cfi_adjust_cfa_offset 8
3631
+ .cfi_offset %r15,-56
3632
+ subq $160+8,%rsp
3633
+ .cfi_adjust_cfa_offset 32*5+8
3634
+ .Lpoint_doublex_body:
3635
+
3636
+ .Lpoint_double_shortcutx:
3637
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rsi.x
3638
+ movq %rsi,%rbx // backup copy
3639
+ movdqu 16(%rsi),%xmm1
3640
+ movq 32+0(%rsi),%r12 // load in_y in "5-4-0-1" order
3641
+ movq 32+8(%rsi),%r13
3642
+ movq 32+16(%rsi),%r8
3643
+ movq 32+24(%rsi),%r9
3644
+ movq .Lpoly+8(%rip),%r14
3645
+ movq .Lpoly+24(%rip),%r15
3646
+ movdqa %xmm0,96(%rsp)
3647
+ movdqa %xmm1,96+16(%rsp)
3648
+ leaq 32(%rdi),%r10
3649
+ leaq 64(%rdi),%r11
3650
+ movq %rdi,%xmm0
3651
+ movq %r10,%xmm1
3652
+ movq %r11,%xmm2
3653
+
3654
+ leaq 0(%rsp),%rdi
3655
+ call __ecp_nistz256_mul_by_2x // p256_mul_by_2(S, in_y);
3656
+
3657
+ movq 64+0(%rsi),%rdx
3658
+ movq 64+8(%rsi),%r14
3659
+ movq 64+16(%rsi),%r15
3660
+ movq 64+24(%rsi),%r8
3661
+ leaq 64-128(%rsi),%rsi
3662
+ leaq 64(%rsp),%rdi
3663
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Zsqr, in_z);
3664
+
3665
+ movq 0+0(%rsp),%rdx
3666
+ movq 8+0(%rsp),%r14
3667
+ leaq -128+0(%rsp),%rsi
3668
+ movq 16+0(%rsp),%r15
3669
+ movq 24+0(%rsp),%r8
3670
+ leaq 0(%rsp),%rdi
3671
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(S, S);
3672
+
3673
+ movq 32(%rbx),%rdx // %rbx is still valid
3674
+ movq 64+0(%rbx),%r9
3675
+ movq 64+8(%rbx),%r10
3676
+ movq 64+16(%rbx),%r11
3677
+ movq 64+24(%rbx),%r12
3678
+ leaq 64-128(%rbx),%rsi
3679
+ leaq 32(%rbx),%rbx
3680
+ movq %xmm2,%rdi
3681
+ call __ecp_nistz256_mul_montx // p256_mul_mont(res_z, in_z, in_y);
3682
+ call __ecp_nistz256_mul_by_2x // p256_mul_by_2(res_z, res_z);
3683
+
3684
+ movq 96+0(%rsp),%r12 // "5-4-0-1" order
3685
+ movq 96+8(%rsp),%r13
3686
+ leaq 64(%rsp),%rbx
3687
+ movq 96+16(%rsp),%r8
3688
+ movq 96+24(%rsp),%r9
3689
+ leaq 32(%rsp),%rdi
3690
+ call __ecp_nistz256_add_tox // p256_add(M, in_x, Zsqr);
3691
+
3692
+ movq 96+0(%rsp),%r12 // "5-4-0-1" order
3693
+ movq 96+8(%rsp),%r13
3694
+ leaq 64(%rsp),%rbx
3695
+ movq 96+16(%rsp),%r8
3696
+ movq 96+24(%rsp),%r9
3697
+ leaq 64(%rsp),%rdi
3698
+ call __ecp_nistz256_sub_fromx // p256_sub(Zsqr, in_x, Zsqr);
3699
+
3700
+ movq 0+0(%rsp),%rdx
3701
+ movq 8+0(%rsp),%r14
3702
+ leaq -128+0(%rsp),%rsi
3703
+ movq 16+0(%rsp),%r15
3704
+ movq 24+0(%rsp),%r8
3705
+ movq %xmm1,%rdi
3706
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(res_y, S);
3707
+ xorq %r9,%r9
3708
+ movq %r12,%rax
3709
+ addq $-1,%r12
3710
+ movq %r13,%r10
3711
+ adcq %rsi,%r13
3712
+ movq %r14,%rcx
3713
+ adcq $0,%r14
3714
+ movq %r15,%r8
3715
+ adcq %rbp,%r15
3716
+ adcq $0,%r9
3717
+ xorq %rsi,%rsi // borrow %rsi
3718
+ testq $1,%rax
3719
+
3720
+ cmovzq %rax,%r12
3721
+ cmovzq %r10,%r13
3722
+ cmovzq %rcx,%r14
3723
+ cmovzq %r8,%r15
3724
+ cmovzq %rsi,%r9
3725
+
3726
+ movq %r13,%rax // a0:a3>>1
3727
+ shrq $1,%r12
3728
+ shlq $63,%rax
3729
+ movq %r14,%r10
3730
+ shrq $1,%r13
3731
+ orq %rax,%r12
3732
+ shlq $63,%r10
3733
+ movq %r15,%rcx
3734
+ shrq $1,%r14
3735
+ orq %r10,%r13
3736
+ shlq $63,%rcx
3737
+ movq %r12,0(%rdi)
3738
+ shrq $1,%r15
3739
+ movq %r13,8(%rdi)
3740
+ shlq $63,%r9
3741
+ orq %rcx,%r14
3742
+ orq %r9,%r15
3743
+ movq %r14,16(%rdi)
3744
+ movq %r15,24(%rdi)
3745
+ movq 64(%rsp),%rdx
3746
+ leaq 64(%rsp),%rbx
3747
+ movq 0+32(%rsp),%r9
3748
+ movq 8+32(%rsp),%r10
3749
+ leaq -128+32(%rsp),%rsi
3750
+ movq 16+32(%rsp),%r11
3751
+ movq 24+32(%rsp),%r12
3752
+ leaq 32(%rsp),%rdi
3753
+ call __ecp_nistz256_mul_montx // p256_mul_mont(M, M, Zsqr);
3754
+
3755
+ leaq 128(%rsp),%rdi
3756
+ call __ecp_nistz256_mul_by_2x
3757
+
3758
+ leaq 32(%rsp),%rbx
3759
+ leaq 32(%rsp),%rdi
3760
+ call __ecp_nistz256_add_tox // p256_mul_by_3(M, M);
3761
+
3762
+ movq 96(%rsp),%rdx
3763
+ leaq 96(%rsp),%rbx
3764
+ movq 0+0(%rsp),%r9
3765
+ movq 8+0(%rsp),%r10
3766
+ leaq -128+0(%rsp),%rsi
3767
+ movq 16+0(%rsp),%r11
3768
+ movq 24+0(%rsp),%r12
3769
+ leaq 0(%rsp),%rdi
3770
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S, S, in_x);
3771
+
3772
+ leaq 128(%rsp),%rdi
3773
+ call __ecp_nistz256_mul_by_2x // p256_mul_by_2(tmp0, S);
3774
+
3775
+ movq 0+32(%rsp),%rdx
3776
+ movq 8+32(%rsp),%r14
3777
+ leaq -128+32(%rsp),%rsi
3778
+ movq 16+32(%rsp),%r15
3779
+ movq 24+32(%rsp),%r8
3780
+ movq %xmm0,%rdi
3781
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(res_x, M);
3782
+
3783
+ leaq 128(%rsp),%rbx
3784
+ movq %r14,%r8 // harmonize sqr output and sub input
3785
+ movq %r15,%r9
3786
+ movq %rsi,%r14
3787
+ movq %rbp,%r15
3788
+ call __ecp_nistz256_sub_fromx // p256_sub(res_x, res_x, tmp0);
3789
+
3790
+ movq 0+0(%rsp),%rax
3791
+ movq 0+8(%rsp),%rbp
3792
+ movq 0+16(%rsp),%rcx
3793
+ movq 0+24(%rsp),%r10 // "4-5-0-1" order
3794
+ leaq 0(%rsp),%rdi
3795
+ call __ecp_nistz256_subx // p256_sub(S, S, res_x);
3796
+
3797
+ movq 32(%rsp),%rdx
3798
+ leaq 32(%rsp),%rbx
3799
+ movq %r12,%r14 // harmonize sub output and mul input
3800
+ xorl %ecx,%ecx
3801
+ movq %r12,0+0(%rsp) // have to save:-(
3802
+ movq %r13,%r10
3803
+ movq %r13,0+8(%rsp)
3804
+ cmovzq %r8,%r11
3805
+ movq %r8,0+16(%rsp)
3806
+ leaq 0-128(%rsp),%rsi
3807
+ cmovzq %r9,%r12
3808
+ movq %r9,0+24(%rsp)
3809
+ movq %r14,%r9
3810
+ leaq 0(%rsp),%rdi
3811
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S, S, M);
3812
+
3813
+ movq %xmm1,%rbx
3814
+ movq %xmm1,%rdi
3815
+ call __ecp_nistz256_sub_fromx // p256_sub(res_y, S, res_y);
3816
+
3817
+ leaq 160+56(%rsp),%rsi
3818
+ .cfi_def_cfa %rsi,8
3819
+ movq -48(%rsi),%r15
3820
+ .cfi_restore %r15
3821
+ movq -40(%rsi),%r14
3822
+ .cfi_restore %r14
3823
+ movq -32(%rsi),%r13
3824
+ .cfi_restore %r13
3825
+ movq -24(%rsi),%r12
3826
+ .cfi_restore %r12
3827
+ movq -16(%rsi),%rbx
3828
+ .cfi_restore %rbx
3829
+ movq -8(%rsi),%rbp
3830
+ .cfi_restore %rbp
3831
+ leaq (%rsi),%rsp
3832
+ .cfi_def_cfa_register %rsp
3833
+ .Lpoint_doublex_epilogue:
3834
+ ret
3835
+ .cfi_endproc
3836
+ .size ecp_nistz256_point_double_adx,.-ecp_nistz256_point_double_adx
3837
+ .globl ecp_nistz256_point_add_adx
3838
+ .hidden ecp_nistz256_point_add_adx
3839
+ .type ecp_nistz256_point_add_adx,@function
3840
+ .align 32
3841
+ ecp_nistz256_point_add_adx:
3842
+ .cfi_startproc
3843
+ _CET_ENDBR
3844
+ pushq %rbp
3845
+ .cfi_adjust_cfa_offset 8
3846
+ .cfi_offset %rbp,-16
3847
+ pushq %rbx
3848
+ .cfi_adjust_cfa_offset 8
3849
+ .cfi_offset %rbx,-24
3850
+ pushq %r12
3851
+ .cfi_adjust_cfa_offset 8
3852
+ .cfi_offset %r12,-32
3853
+ pushq %r13
3854
+ .cfi_adjust_cfa_offset 8
3855
+ .cfi_offset %r13,-40
3856
+ pushq %r14
3857
+ .cfi_adjust_cfa_offset 8
3858
+ .cfi_offset %r14,-48
3859
+ pushq %r15
3860
+ .cfi_adjust_cfa_offset 8
3861
+ .cfi_offset %r15,-56
3862
+ subq $576+8,%rsp
3863
+ .cfi_adjust_cfa_offset 32*18+8
3864
+ .Lpoint_addx_body:
3865
+
3866
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rsi
3867
+ movdqu 16(%rsi),%xmm1
3868
+ movdqu 32(%rsi),%xmm2
3869
+ movdqu 48(%rsi),%xmm3
3870
+ movdqu 64(%rsi),%xmm4
3871
+ movdqu 80(%rsi),%xmm5
3872
+ movq %rsi,%rbx // reassign
3873
+ movq %rdx,%rsi // reassign
3874
+ movdqa %xmm0,384(%rsp)
3875
+ movdqa %xmm1,384+16(%rsp)
3876
+ movdqa %xmm2,416(%rsp)
3877
+ movdqa %xmm3,416+16(%rsp)
3878
+ movdqa %xmm4,448(%rsp)
3879
+ movdqa %xmm5,448+16(%rsp)
3880
+ por %xmm4,%xmm5
3881
+
3882
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rbx
3883
+ pshufd $0xb1,%xmm5,%xmm3
3884
+ movdqu 16(%rsi),%xmm1
3885
+ movdqu 32(%rsi),%xmm2
3886
+ por %xmm3,%xmm5
3887
+ movdqu 48(%rsi),%xmm3
3888
+ movq 64+0(%rsi),%rdx // load original in2_z
3889
+ movq 64+8(%rsi),%r14
3890
+ movq 64+16(%rsi),%r15
3891
+ movq 64+24(%rsi),%r8
3892
+ movdqa %xmm0,480(%rsp)
3893
+ pshufd $0x1e,%xmm5,%xmm4
3894
+ movdqa %xmm1,480+16(%rsp)
3895
+ movdqu 64(%rsi),%xmm0 // in2_z again
3896
+ movdqu 80(%rsi),%xmm1
3897
+ movdqa %xmm2,512(%rsp)
3898
+ movdqa %xmm3,512+16(%rsp)
3899
+ por %xmm4,%xmm5
3900
+ pxor %xmm4,%xmm4
3901
+ por %xmm0,%xmm1
3902
+ movq %rdi,%xmm0 // save %rdi
3903
+
3904
+ leaq 64-128(%rsi),%rsi // %rsi is still valid
3905
+ movq %rdx,544+0(%rsp) // make in2_z copy
3906
+ movq %r14,544+8(%rsp)
3907
+ movq %r15,544+16(%rsp)
3908
+ movq %r8,544+24(%rsp)
3909
+ leaq 96(%rsp),%rdi // Z2^2
3910
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Z2sqr, in2_z);
3911
+
3912
+ pcmpeqd %xmm4,%xmm5
3913
+ pshufd $0xb1,%xmm1,%xmm4
3914
+ por %xmm1,%xmm4
3915
+ pshufd $0,%xmm5,%xmm5 // in1infty
3916
+ pshufd $0x1e,%xmm4,%xmm3
3917
+ por %xmm3,%xmm4
3918
+ pxor %xmm3,%xmm3
3919
+ pcmpeqd %xmm3,%xmm4
3920
+ pshufd $0,%xmm4,%xmm4 // in2infty
3921
+ movq 64+0(%rbx),%rdx // load original in1_z
3922
+ movq 64+8(%rbx),%r14
3923
+ movq 64+16(%rbx),%r15
3924
+ movq 64+24(%rbx),%r8
3925
+ movq %rbx,%xmm1
3926
+
3927
+ leaq 64-128(%rbx),%rsi
3928
+ leaq 32(%rsp),%rdi // Z1^2
3929
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Z1sqr, in1_z);
3930
+
3931
+ movq 544(%rsp),%rdx
3932
+ leaq 544(%rsp),%rbx
3933
+ movq 0+96(%rsp),%r9
3934
+ movq 8+96(%rsp),%r10
3935
+ leaq -128+96(%rsp),%rsi
3936
+ movq 16+96(%rsp),%r11
3937
+ movq 24+96(%rsp),%r12
3938
+ leaq 224(%rsp),%rdi // S1 = Z2^3
3939
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S1, Z2sqr, in2_z);
3940
+
3941
+ movq 448(%rsp),%rdx
3942
+ leaq 448(%rsp),%rbx
3943
+ movq 0+32(%rsp),%r9
3944
+ movq 8+32(%rsp),%r10
3945
+ leaq -128+32(%rsp),%rsi
3946
+ movq 16+32(%rsp),%r11
3947
+ movq 24+32(%rsp),%r12
3948
+ leaq 256(%rsp),%rdi // S2 = Z1^3
3949
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S2, Z1sqr, in1_z);
3950
+
3951
+ movq 416(%rsp),%rdx
3952
+ leaq 416(%rsp),%rbx
3953
+ movq 0+224(%rsp),%r9
3954
+ movq 8+224(%rsp),%r10
3955
+ leaq -128+224(%rsp),%rsi
3956
+ movq 16+224(%rsp),%r11
3957
+ movq 24+224(%rsp),%r12
3958
+ leaq 224(%rsp),%rdi // S1 = Y1*Z2^3
3959
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S1, S1, in1_y);
3960
+
3961
+ movq 512(%rsp),%rdx
3962
+ leaq 512(%rsp),%rbx
3963
+ movq 0+256(%rsp),%r9
3964
+ movq 8+256(%rsp),%r10
3965
+ leaq -128+256(%rsp),%rsi
3966
+ movq 16+256(%rsp),%r11
3967
+ movq 24+256(%rsp),%r12
3968
+ leaq 256(%rsp),%rdi // S2 = Y2*Z1^3
3969
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S2, S2, in2_y);
3970
+
3971
+ leaq 224(%rsp),%rbx
3972
+ leaq 64(%rsp),%rdi // R = S2 - S1
3973
+ call __ecp_nistz256_sub_fromx // p256_sub(R, S2, S1);
3974
+
3975
+ orq %r13,%r12 // see if result is zero
3976
+ movdqa %xmm4,%xmm2
3977
+ orq %r8,%r12
3978
+ orq %r9,%r12
3979
+ por %xmm5,%xmm2 // in1infty || in2infty
3980
+ movq %r12,%xmm3
3981
+
3982
+ movq 384(%rsp),%rdx
3983
+ leaq 384(%rsp),%rbx
3984
+ movq 0+96(%rsp),%r9
3985
+ movq 8+96(%rsp),%r10
3986
+ leaq -128+96(%rsp),%rsi
3987
+ movq 16+96(%rsp),%r11
3988
+ movq 24+96(%rsp),%r12
3989
+ leaq 160(%rsp),%rdi // U1 = X1*Z2^2
3990
+ call __ecp_nistz256_mul_montx // p256_mul_mont(U1, in1_x, Z2sqr);
3991
+
3992
+ movq 480(%rsp),%rdx
3993
+ leaq 480(%rsp),%rbx
3994
+ movq 0+32(%rsp),%r9
3995
+ movq 8+32(%rsp),%r10
3996
+ leaq -128+32(%rsp),%rsi
3997
+ movq 16+32(%rsp),%r11
3998
+ movq 24+32(%rsp),%r12
3999
+ leaq 192(%rsp),%rdi // U2 = X2*Z1^2
4000
+ call __ecp_nistz256_mul_montx // p256_mul_mont(U2, in2_x, Z1sqr);
4001
+
4002
+ leaq 160(%rsp),%rbx
4003
+ leaq 0(%rsp),%rdi // H = U2 - U1
4004
+ call __ecp_nistz256_sub_fromx // p256_sub(H, U2, U1);
4005
+
4006
+ orq %r13,%r12 // see if result is zero
4007
+ orq %r8,%r12
4008
+ orq %r9,%r12 //
4009
+
4010
+ movq %xmm2,%r8
4011
+ movq %xmm3,%r9
4012
+ orq %r8,%r12
4013
+ .byte 0x3e // predict taken
4014
+ jnz .Ladd_proceedx //
4015
+
4016
+ // We now know A = B or A = -B and neither is infinity. Compare the
4017
+ // y-coordinates via S1 and S2.
4018
+ testq %r9,%r9
4019
+ jz .Ladd_doublex // is_equal(S1, S2)
4020
+
4021
+ // A = -B, so the result is infinity.
4022
+ //
4023
+ // TODO(davidben): Does .Ladd_proceed handle this case? It seems to, in
4024
+ // which case we should eliminate this special-case and simplify the
4025
+ // timing analysis.
4026
+ movq %xmm0,%rdi // restore %rdi
4027
+ pxor %xmm0,%xmm0
4028
+ movdqu %xmm0,0(%rdi)
4029
+ movdqu %xmm0,16(%rdi)
4030
+ movdqu %xmm0,32(%rdi)
4031
+ movdqu %xmm0,48(%rdi)
4032
+ movdqu %xmm0,64(%rdi)
4033
+ movdqu %xmm0,80(%rdi)
4034
+ jmp .Ladd_donex
4035
+
4036
+ .align 32
4037
+ .Ladd_doublex:
4038
+ movq %xmm1,%rsi // restore %rsi
4039
+ movq %xmm0,%rdi // restore %rdi
4040
+ addq $416,%rsp // difference in frame sizes
4041
+ .cfi_adjust_cfa_offset -416
4042
+ jmp .Lpoint_double_shortcutx
4043
+ .cfi_adjust_cfa_offset 416
4044
+
4045
+ .align 32
4046
+ .Ladd_proceedx:
4047
+ movq 0+64(%rsp),%rdx
4048
+ movq 8+64(%rsp),%r14
4049
+ leaq -128+64(%rsp),%rsi
4050
+ movq 16+64(%rsp),%r15
4051
+ movq 24+64(%rsp),%r8
4052
+ leaq 96(%rsp),%rdi // R^2
4053
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Rsqr, R);
4054
+
4055
+ movq 448(%rsp),%rdx
4056
+ leaq 448(%rsp),%rbx
4057
+ movq 0+0(%rsp),%r9
4058
+ movq 8+0(%rsp),%r10
4059
+ leaq -128+0(%rsp),%rsi
4060
+ movq 16+0(%rsp),%r11
4061
+ movq 24+0(%rsp),%r12
4062
+ leaq 352(%rsp),%rdi // Z3 = H*Z1*Z2
4063
+ call __ecp_nistz256_mul_montx // p256_mul_mont(res_z, H, in1_z);
4064
+
4065
+ movq 0+0(%rsp),%rdx
4066
+ movq 8+0(%rsp),%r14
4067
+ leaq -128+0(%rsp),%rsi
4068
+ movq 16+0(%rsp),%r15
4069
+ movq 24+0(%rsp),%r8
4070
+ leaq 32(%rsp),%rdi // H^2
4071
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Hsqr, H);
4072
+
4073
+ movq 544(%rsp),%rdx
4074
+ leaq 544(%rsp),%rbx
4075
+ movq 0+352(%rsp),%r9
4076
+ movq 8+352(%rsp),%r10
4077
+ leaq -128+352(%rsp),%rsi
4078
+ movq 16+352(%rsp),%r11
4079
+ movq 24+352(%rsp),%r12
4080
+ leaq 352(%rsp),%rdi // Z3 = H*Z1*Z2
4081
+ call __ecp_nistz256_mul_montx // p256_mul_mont(res_z, res_z, in2_z);
4082
+
4083
+ movq 0(%rsp),%rdx
4084
+ leaq 0(%rsp),%rbx
4085
+ movq 0+32(%rsp),%r9
4086
+ movq 8+32(%rsp),%r10
4087
+ leaq -128+32(%rsp),%rsi
4088
+ movq 16+32(%rsp),%r11
4089
+ movq 24+32(%rsp),%r12
4090
+ leaq 128(%rsp),%rdi // H^3
4091
+ call __ecp_nistz256_mul_montx // p256_mul_mont(Hcub, Hsqr, H);
4092
+
4093
+ movq 160(%rsp),%rdx
4094
+ leaq 160(%rsp),%rbx
4095
+ movq 0+32(%rsp),%r9
4096
+ movq 8+32(%rsp),%r10
4097
+ leaq -128+32(%rsp),%rsi
4098
+ movq 16+32(%rsp),%r11
4099
+ movq 24+32(%rsp),%r12
4100
+ leaq 192(%rsp),%rdi // U1*H^2
4101
+ call __ecp_nistz256_mul_montx // p256_mul_mont(U2, U1, Hsqr);
4102
+ // lea 192(%rsp), %rsi
4103
+ // lea 32(%rsp), %rdi # 2*U1*H^2
4104
+ // call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
4105
+
4106
+ xorq %r11,%r11
4107
+ addq %r12,%r12 // a0:a3+a0:a3
4108
+ leaq 96(%rsp),%rsi
4109
+ adcq %r13,%r13
4110
+ movq %r12,%rax
4111
+ adcq %r8,%r8
4112
+ adcq %r9,%r9
4113
+ movq %r13,%rbp
4114
+ adcq $0,%r11
4115
+
4116
+ subq $-1,%r12
4117
+ movq %r8,%rcx
4118
+ sbbq %r14,%r13
4119
+ sbbq $0,%r8
4120
+ movq %r9,%r10
4121
+ sbbq %r15,%r9
4122
+ sbbq $0,%r11
4123
+
4124
+ cmovcq %rax,%r12
4125
+ movq 0(%rsi),%rax
4126
+ cmovcq %rbp,%r13
4127
+ movq 8(%rsi),%rbp
4128
+ cmovcq %rcx,%r8
4129
+ movq 16(%rsi),%rcx
4130
+ cmovcq %r10,%r9
4131
+ movq 24(%rsi),%r10
4132
+
4133
+ call __ecp_nistz256_subx // p256_sub(res_x, Rsqr, Hsqr);
4134
+
4135
+ leaq 128(%rsp),%rbx
4136
+ leaq 288(%rsp),%rdi
4137
+ call __ecp_nistz256_sub_fromx // p256_sub(res_x, res_x, Hcub);
4138
+
4139
+ movq 192+0(%rsp),%rax
4140
+ movq 192+8(%rsp),%rbp
4141
+ movq 192+16(%rsp),%rcx
4142
+ movq 192+24(%rsp),%r10
4143
+ leaq 320(%rsp),%rdi
4144
+
4145
+ call __ecp_nistz256_subx // p256_sub(res_y, U2, res_x);
4146
+
4147
+ movq %r12,0(%rdi) // save the result, as
4148
+ movq %r13,8(%rdi) // __ecp_nistz256_sub doesn't
4149
+ movq %r8,16(%rdi)
4150
+ movq %r9,24(%rdi)
4151
+ movq 128(%rsp),%rdx
4152
+ leaq 128(%rsp),%rbx
4153
+ movq 0+224(%rsp),%r9
4154
+ movq 8+224(%rsp),%r10
4155
+ leaq -128+224(%rsp),%rsi
4156
+ movq 16+224(%rsp),%r11
4157
+ movq 24+224(%rsp),%r12
4158
+ leaq 256(%rsp),%rdi
4159
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S2, S1, Hcub);
4160
+
4161
+ movq 320(%rsp),%rdx
4162
+ leaq 320(%rsp),%rbx
4163
+ movq 0+64(%rsp),%r9
4164
+ movq 8+64(%rsp),%r10
4165
+ leaq -128+64(%rsp),%rsi
4166
+ movq 16+64(%rsp),%r11
4167
+ movq 24+64(%rsp),%r12
4168
+ leaq 320(%rsp),%rdi
4169
+ call __ecp_nistz256_mul_montx // p256_mul_mont(res_y, R, res_y);
4170
+
4171
+ leaq 256(%rsp),%rbx
4172
+ leaq 320(%rsp),%rdi
4173
+ call __ecp_nistz256_sub_fromx // p256_sub(res_y, res_y, S2);
4174
+
4175
+ movq %xmm0,%rdi // restore %rdi
4176
+
4177
+ movdqa %xmm5,%xmm0 // copy_conditional(res_z, in2_z, in1infty);
4178
+ movdqa %xmm5,%xmm1
4179
+ pandn 352(%rsp),%xmm0
4180
+ movdqa %xmm5,%xmm2
4181
+ pandn 352+16(%rsp),%xmm1
4182
+ movdqa %xmm5,%xmm3
4183
+ pand 544(%rsp),%xmm2
4184
+ pand 544+16(%rsp),%xmm3
4185
+ por %xmm0,%xmm2
4186
+ por %xmm1,%xmm3
4187
+
4188
+ movdqa %xmm4,%xmm0 // copy_conditional(res_z, in1_z, in2infty);
4189
+ movdqa %xmm4,%xmm1
4190
+ pandn %xmm2,%xmm0
4191
+ movdqa %xmm4,%xmm2
4192
+ pandn %xmm3,%xmm1
4193
+ movdqa %xmm4,%xmm3
4194
+ pand 448(%rsp),%xmm2
4195
+ pand 448+16(%rsp),%xmm3
4196
+ por %xmm0,%xmm2
4197
+ por %xmm1,%xmm3
4198
+ movdqu %xmm2,64(%rdi)
4199
+ movdqu %xmm3,80(%rdi)
4200
+
4201
+ movdqa %xmm5,%xmm0 // copy_conditional(res_x, in2_x, in1infty);
4202
+ movdqa %xmm5,%xmm1
4203
+ pandn 288(%rsp),%xmm0
4204
+ movdqa %xmm5,%xmm2
4205
+ pandn 288+16(%rsp),%xmm1
4206
+ movdqa %xmm5,%xmm3
4207
+ pand 480(%rsp),%xmm2
4208
+ pand 480+16(%rsp),%xmm3
4209
+ por %xmm0,%xmm2
4210
+ por %xmm1,%xmm3
4211
+
4212
+ movdqa %xmm4,%xmm0 // copy_conditional(res_x, in1_x, in2infty);
4213
+ movdqa %xmm4,%xmm1
4214
+ pandn %xmm2,%xmm0
4215
+ movdqa %xmm4,%xmm2
4216
+ pandn %xmm3,%xmm1
4217
+ movdqa %xmm4,%xmm3
4218
+ pand 384(%rsp),%xmm2
4219
+ pand 384+16(%rsp),%xmm3
4220
+ por %xmm0,%xmm2
4221
+ por %xmm1,%xmm3
4222
+ movdqu %xmm2,0(%rdi)
4223
+ movdqu %xmm3,16(%rdi)
4224
+
4225
+ movdqa %xmm5,%xmm0 // copy_conditional(res_y, in2_y, in1infty);
4226
+ movdqa %xmm5,%xmm1
4227
+ pandn 320(%rsp),%xmm0
4228
+ movdqa %xmm5,%xmm2
4229
+ pandn 320+16(%rsp),%xmm1
4230
+ movdqa %xmm5,%xmm3
4231
+ pand 512(%rsp),%xmm2
4232
+ pand 512+16(%rsp),%xmm3
4233
+ por %xmm0,%xmm2
4234
+ por %xmm1,%xmm3
4235
+
4236
+ movdqa %xmm4,%xmm0 // copy_conditional(res_y, in1_y, in2infty);
4237
+ movdqa %xmm4,%xmm1
4238
+ pandn %xmm2,%xmm0
4239
+ movdqa %xmm4,%xmm2
4240
+ pandn %xmm3,%xmm1
4241
+ movdqa %xmm4,%xmm3
4242
+ pand 416(%rsp),%xmm2
4243
+ pand 416+16(%rsp),%xmm3
4244
+ por %xmm0,%xmm2
4245
+ por %xmm1,%xmm3
4246
+ movdqu %xmm2,32(%rdi)
4247
+ movdqu %xmm3,48(%rdi)
4248
+
4249
+ .Ladd_donex:
4250
+ leaq 576+56(%rsp),%rsi
4251
+ .cfi_def_cfa %rsi,8
4252
+ movq -48(%rsi),%r15
4253
+ .cfi_restore %r15
4254
+ movq -40(%rsi),%r14
4255
+ .cfi_restore %r14
4256
+ movq -32(%rsi),%r13
4257
+ .cfi_restore %r13
4258
+ movq -24(%rsi),%r12
4259
+ .cfi_restore %r12
4260
+ movq -16(%rsi),%rbx
4261
+ .cfi_restore %rbx
4262
+ movq -8(%rsi),%rbp
4263
+ .cfi_restore %rbp
4264
+ leaq (%rsi),%rsp
4265
+ .cfi_def_cfa_register %rsp
4266
+ .Lpoint_addx_epilogue:
4267
+ ret
4268
+ .cfi_endproc
4269
+ .size ecp_nistz256_point_add_adx,.-ecp_nistz256_point_add_adx
4270
+ .globl ecp_nistz256_point_add_affine_adx
4271
+ .hidden ecp_nistz256_point_add_affine_adx
4272
+ .type ecp_nistz256_point_add_affine_adx,@function
4273
+ .align 32
4274
+ ecp_nistz256_point_add_affine_adx:
4275
+ .cfi_startproc
4276
+ _CET_ENDBR
4277
+ pushq %rbp
4278
+ .cfi_adjust_cfa_offset 8
4279
+ .cfi_offset %rbp,-16
4280
+ pushq %rbx
4281
+ .cfi_adjust_cfa_offset 8
4282
+ .cfi_offset %rbx,-24
4283
+ pushq %r12
4284
+ .cfi_adjust_cfa_offset 8
4285
+ .cfi_offset %r12,-32
4286
+ pushq %r13
4287
+ .cfi_adjust_cfa_offset 8
4288
+ .cfi_offset %r13,-40
4289
+ pushq %r14
4290
+ .cfi_adjust_cfa_offset 8
4291
+ .cfi_offset %r14,-48
4292
+ pushq %r15
4293
+ .cfi_adjust_cfa_offset 8
4294
+ .cfi_offset %r15,-56
4295
+ subq $480+8,%rsp
4296
+ .cfi_adjust_cfa_offset 32*15+8
4297
+ .Ladd_affinex_body:
4298
+
4299
+ movdqu 0(%rsi),%xmm0 // copy *(P256_POINT *)%rsi
4300
+ movq %rdx,%rbx // reassign
4301
+ movdqu 16(%rsi),%xmm1
4302
+ movdqu 32(%rsi),%xmm2
4303
+ movdqu 48(%rsi),%xmm3
4304
+ movdqu 64(%rsi),%xmm4
4305
+ movdqu 80(%rsi),%xmm5
4306
+ movq 64+0(%rsi),%rdx // load original in1_z
4307
+ movq 64+8(%rsi),%r14
4308
+ movq 64+16(%rsi),%r15
4309
+ movq 64+24(%rsi),%r8
4310
+ movdqa %xmm0,320(%rsp)
4311
+ movdqa %xmm1,320+16(%rsp)
4312
+ movdqa %xmm2,352(%rsp)
4313
+ movdqa %xmm3,352+16(%rsp)
4314
+ movdqa %xmm4,384(%rsp)
4315
+ movdqa %xmm5,384+16(%rsp)
4316
+ por %xmm4,%xmm5
4317
+
4318
+ movdqu 0(%rbx),%xmm0 // copy *(P256_POINT_AFFINE *)%rbx
4319
+ pshufd $0xb1,%xmm5,%xmm3
4320
+ movdqu 16(%rbx),%xmm1
4321
+ movdqu 32(%rbx),%xmm2
4322
+ por %xmm3,%xmm5
4323
+ movdqu 48(%rbx),%xmm3
4324
+ movdqa %xmm0,416(%rsp)
4325
+ pshufd $0x1e,%xmm5,%xmm4
4326
+ movdqa %xmm1,416+16(%rsp)
4327
+ por %xmm0,%xmm1
4328
+ movq %rdi,%xmm0 // save %rdi
4329
+ movdqa %xmm2,448(%rsp)
4330
+ movdqa %xmm3,448+16(%rsp)
4331
+ por %xmm2,%xmm3
4332
+ por %xmm4,%xmm5
4333
+ pxor %xmm4,%xmm4
4334
+ por %xmm1,%xmm3
4335
+
4336
+ leaq 64-128(%rsi),%rsi // %rsi is still valid
4337
+ leaq 32(%rsp),%rdi // Z1^2
4338
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Z1sqr, in1_z);
4339
+
4340
+ pcmpeqd %xmm4,%xmm5
4341
+ pshufd $0xb1,%xmm3,%xmm4
4342
+ movq 0(%rbx),%rdx // %rbx is still valid
4343
+ // lea 0x00(%rbx), %rbx
4344
+ movq %r12,%r9 // harmonize sqr output and mul input
4345
+ por %xmm3,%xmm4
4346
+ pshufd $0,%xmm5,%xmm5 // in1infty
4347
+ pshufd $0x1e,%xmm4,%xmm3
4348
+ movq %r13,%r10
4349
+ por %xmm3,%xmm4
4350
+ pxor %xmm3,%xmm3
4351
+ movq %r14,%r11
4352
+ pcmpeqd %xmm3,%xmm4
4353
+ pshufd $0,%xmm4,%xmm4 // in2infty
4354
+
4355
+ leaq 32-128(%rsp),%rsi
4356
+ movq %r15,%r12
4357
+ leaq 0(%rsp),%rdi // U2 = X2*Z1^2
4358
+ call __ecp_nistz256_mul_montx // p256_mul_mont(U2, Z1sqr, in2_x);
4359
+
4360
+ leaq 320(%rsp),%rbx
4361
+ leaq 64(%rsp),%rdi // H = U2 - U1
4362
+ call __ecp_nistz256_sub_fromx // p256_sub(H, U2, in1_x);
4363
+
4364
+ movq 384(%rsp),%rdx
4365
+ leaq 384(%rsp),%rbx
4366
+ movq 0+32(%rsp),%r9
4367
+ movq 8+32(%rsp),%r10
4368
+ leaq -128+32(%rsp),%rsi
4369
+ movq 16+32(%rsp),%r11
4370
+ movq 24+32(%rsp),%r12
4371
+ leaq 32(%rsp),%rdi // S2 = Z1^3
4372
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S2, Z1sqr, in1_z);
4373
+
4374
+ movq 384(%rsp),%rdx
4375
+ leaq 384(%rsp),%rbx
4376
+ movq 0+64(%rsp),%r9
4377
+ movq 8+64(%rsp),%r10
4378
+ leaq -128+64(%rsp),%rsi
4379
+ movq 16+64(%rsp),%r11
4380
+ movq 24+64(%rsp),%r12
4381
+ leaq 288(%rsp),%rdi // Z3 = H*Z1*Z2
4382
+ call __ecp_nistz256_mul_montx // p256_mul_mont(res_z, H, in1_z);
4383
+
4384
+ movq 448(%rsp),%rdx
4385
+ leaq 448(%rsp),%rbx
4386
+ movq 0+32(%rsp),%r9
4387
+ movq 8+32(%rsp),%r10
4388
+ leaq -128+32(%rsp),%rsi
4389
+ movq 16+32(%rsp),%r11
4390
+ movq 24+32(%rsp),%r12
4391
+ leaq 32(%rsp),%rdi // S2 = Y2*Z1^3
4392
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S2, S2, in2_y);
4393
+
4394
+ leaq 352(%rsp),%rbx
4395
+ leaq 96(%rsp),%rdi // R = S2 - S1
4396
+ call __ecp_nistz256_sub_fromx // p256_sub(R, S2, in1_y);
4397
+
4398
+ movq 0+64(%rsp),%rdx
4399
+ movq 8+64(%rsp),%r14
4400
+ leaq -128+64(%rsp),%rsi
4401
+ movq 16+64(%rsp),%r15
4402
+ movq 24+64(%rsp),%r8
4403
+ leaq 128(%rsp),%rdi // H^2
4404
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Hsqr, H);
4405
+
4406
+ movq 0+96(%rsp),%rdx
4407
+ movq 8+96(%rsp),%r14
4408
+ leaq -128+96(%rsp),%rsi
4409
+ movq 16+96(%rsp),%r15
4410
+ movq 24+96(%rsp),%r8
4411
+ leaq 192(%rsp),%rdi // R^2
4412
+ call __ecp_nistz256_sqr_montx // p256_sqr_mont(Rsqr, R);
4413
+
4414
+ movq 128(%rsp),%rdx
4415
+ leaq 128(%rsp),%rbx
4416
+ movq 0+64(%rsp),%r9
4417
+ movq 8+64(%rsp),%r10
4418
+ leaq -128+64(%rsp),%rsi
4419
+ movq 16+64(%rsp),%r11
4420
+ movq 24+64(%rsp),%r12
4421
+ leaq 160(%rsp),%rdi // H^3
4422
+ call __ecp_nistz256_mul_montx // p256_mul_mont(Hcub, Hsqr, H);
4423
+
4424
+ movq 320(%rsp),%rdx
4425
+ leaq 320(%rsp),%rbx
4426
+ movq 0+128(%rsp),%r9
4427
+ movq 8+128(%rsp),%r10
4428
+ leaq -128+128(%rsp),%rsi
4429
+ movq 16+128(%rsp),%r11
4430
+ movq 24+128(%rsp),%r12
4431
+ leaq 0(%rsp),%rdi // U1*H^2
4432
+ call __ecp_nistz256_mul_montx // p256_mul_mont(U2, in1_x, Hsqr);
4433
+ // lea 0(%rsp), %rsi
4434
+ // lea 128(%rsp), %rdi # 2*U1*H^2
4435
+ // call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
4436
+
4437
+ xorq %r11,%r11
4438
+ addq %r12,%r12 // a0:a3+a0:a3
4439
+ leaq 192(%rsp),%rsi
4440
+ adcq %r13,%r13
4441
+ movq %r12,%rax
4442
+ adcq %r8,%r8
4443
+ adcq %r9,%r9
4444
+ movq %r13,%rbp
4445
+ adcq $0,%r11
4446
+
4447
+ subq $-1,%r12
4448
+ movq %r8,%rcx
4449
+ sbbq %r14,%r13
4450
+ sbbq $0,%r8
4451
+ movq %r9,%r10
4452
+ sbbq %r15,%r9
4453
+ sbbq $0,%r11
4454
+
4455
+ cmovcq %rax,%r12
4456
+ movq 0(%rsi),%rax
4457
+ cmovcq %rbp,%r13
4458
+ movq 8(%rsi),%rbp
4459
+ cmovcq %rcx,%r8
4460
+ movq 16(%rsi),%rcx
4461
+ cmovcq %r10,%r9
4462
+ movq 24(%rsi),%r10
4463
+
4464
+ call __ecp_nistz256_subx // p256_sub(res_x, Rsqr, Hsqr);
4465
+
4466
+ leaq 160(%rsp),%rbx
4467
+ leaq 224(%rsp),%rdi
4468
+ call __ecp_nistz256_sub_fromx // p256_sub(res_x, res_x, Hcub);
4469
+
4470
+ movq 0+0(%rsp),%rax
4471
+ movq 0+8(%rsp),%rbp
4472
+ movq 0+16(%rsp),%rcx
4473
+ movq 0+24(%rsp),%r10
4474
+ leaq 64(%rsp),%rdi
4475
+
4476
+ call __ecp_nistz256_subx // p256_sub(H, U2, res_x);
4477
+
4478
+ movq %r12,0(%rdi) // save the result, as
4479
+ movq %r13,8(%rdi) // __ecp_nistz256_sub doesn't
4480
+ movq %r8,16(%rdi)
4481
+ movq %r9,24(%rdi)
4482
+ movq 352(%rsp),%rdx
4483
+ leaq 352(%rsp),%rbx
4484
+ movq 0+160(%rsp),%r9
4485
+ movq 8+160(%rsp),%r10
4486
+ leaq -128+160(%rsp),%rsi
4487
+ movq 16+160(%rsp),%r11
4488
+ movq 24+160(%rsp),%r12
4489
+ leaq 32(%rsp),%rdi
4490
+ call __ecp_nistz256_mul_montx // p256_mul_mont(S2, Hcub, in1_y);
4491
+
4492
+ movq 96(%rsp),%rdx
4493
+ leaq 96(%rsp),%rbx
4494
+ movq 0+64(%rsp),%r9
4495
+ movq 8+64(%rsp),%r10
4496
+ leaq -128+64(%rsp),%rsi
4497
+ movq 16+64(%rsp),%r11
4498
+ movq 24+64(%rsp),%r12
4499
+ leaq 64(%rsp),%rdi
4500
+ call __ecp_nistz256_mul_montx // p256_mul_mont(H, H, R);
4501
+
4502
+ leaq 32(%rsp),%rbx
4503
+ leaq 256(%rsp),%rdi
4504
+ call __ecp_nistz256_sub_fromx // p256_sub(res_y, H, S2);
4505
+
4506
+ movq %xmm0,%rdi // restore %rdi
4507
+
4508
+ movdqa %xmm5,%xmm0 // copy_conditional(res_z, ONE, in1infty);
4509
+ movdqa %xmm5,%xmm1
4510
+ pandn 288(%rsp),%xmm0
4511
+ movdqa %xmm5,%xmm2
4512
+ pandn 288+16(%rsp),%xmm1
4513
+ movdqa %xmm5,%xmm3
4514
+ pand .LONE_mont(%rip),%xmm2
4515
+ pand .LONE_mont+16(%rip),%xmm3
4516
+ por %xmm0,%xmm2
4517
+ por %xmm1,%xmm3
4518
+
4519
+ movdqa %xmm4,%xmm0 // copy_conditional(res_z, in1_z, in2infty);
4520
+ movdqa %xmm4,%xmm1
4521
+ pandn %xmm2,%xmm0
4522
+ movdqa %xmm4,%xmm2
4523
+ pandn %xmm3,%xmm1
4524
+ movdqa %xmm4,%xmm3
4525
+ pand 384(%rsp),%xmm2
4526
+ pand 384+16(%rsp),%xmm3
4527
+ por %xmm0,%xmm2
4528
+ por %xmm1,%xmm3
4529
+ movdqu %xmm2,64(%rdi)
4530
+ movdqu %xmm3,80(%rdi)
4531
+
4532
+ movdqa %xmm5,%xmm0 // copy_conditional(res_x, in2_x, in1infty);
4533
+ movdqa %xmm5,%xmm1
4534
+ pandn 224(%rsp),%xmm0
4535
+ movdqa %xmm5,%xmm2
4536
+ pandn 224+16(%rsp),%xmm1
4537
+ movdqa %xmm5,%xmm3
4538
+ pand 416(%rsp),%xmm2
4539
+ pand 416+16(%rsp),%xmm3
4540
+ por %xmm0,%xmm2
4541
+ por %xmm1,%xmm3
4542
+
4543
+ movdqa %xmm4,%xmm0 // copy_conditional(res_x, in1_x, in2infty);
4544
+ movdqa %xmm4,%xmm1
4545
+ pandn %xmm2,%xmm0
4546
+ movdqa %xmm4,%xmm2
4547
+ pandn %xmm3,%xmm1
4548
+ movdqa %xmm4,%xmm3
4549
+ pand 320(%rsp),%xmm2
4550
+ pand 320+16(%rsp),%xmm3
4551
+ por %xmm0,%xmm2
4552
+ por %xmm1,%xmm3
4553
+ movdqu %xmm2,0(%rdi)
4554
+ movdqu %xmm3,16(%rdi)
4555
+
4556
+ movdqa %xmm5,%xmm0 // copy_conditional(res_y, in2_y, in1infty);
4557
+ movdqa %xmm5,%xmm1
4558
+ pandn 256(%rsp),%xmm0
4559
+ movdqa %xmm5,%xmm2
4560
+ pandn 256+16(%rsp),%xmm1
4561
+ movdqa %xmm5,%xmm3
4562
+ pand 448(%rsp),%xmm2
4563
+ pand 448+16(%rsp),%xmm3
4564
+ por %xmm0,%xmm2
4565
+ por %xmm1,%xmm3
4566
+
4567
+ movdqa %xmm4,%xmm0 // copy_conditional(res_y, in1_y, in2infty);
4568
+ movdqa %xmm4,%xmm1
4569
+ pandn %xmm2,%xmm0
4570
+ movdqa %xmm4,%xmm2
4571
+ pandn %xmm3,%xmm1
4572
+ movdqa %xmm4,%xmm3
4573
+ pand 352(%rsp),%xmm2
4574
+ pand 352+16(%rsp),%xmm3
4575
+ por %xmm0,%xmm2
4576
+ por %xmm1,%xmm3
4577
+ movdqu %xmm2,32(%rdi)
4578
+ movdqu %xmm3,48(%rdi)
4579
+
4580
+ leaq 480+56(%rsp),%rsi
4581
+ .cfi_def_cfa %rsi,8
4582
+ movq -48(%rsi),%r15
4583
+ .cfi_restore %r15
4584
+ movq -40(%rsi),%r14
4585
+ .cfi_restore %r14
4586
+ movq -32(%rsi),%r13
4587
+ .cfi_restore %r13
4588
+ movq -24(%rsi),%r12
4589
+ .cfi_restore %r12
4590
+ movq -16(%rsi),%rbx
4591
+ .cfi_restore %rbx
4592
+ movq -8(%rsi),%rbp
4593
+ .cfi_restore %rbp
4594
+ leaq (%rsi),%rsp
4595
+ .cfi_def_cfa_register %rsp
4596
+ .Ladd_affinex_epilogue:
4597
+ ret
4598
+ .cfi_endproc
4599
+ .size ecp_nistz256_point_add_affine_adx,.-ecp_nistz256_point_add_affine_adx
4600
+ #endif