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