visaljs 0.0.2 → 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 (1007) hide show
  1. package/cli.js +393 -62
  2. package/node/include/js_node.h +28 -5
  3. package/node/include/js_uv.h +36 -0
  4. package/node/prelude/crypto.js +7 -10
  5. package/node/prelude/dns.js +99 -0
  6. package/node/prelude/dns_promises.js +10 -0
  7. package/node/prelude/http.js +1039 -195
  8. package/node/prelude/internal/crypto/asym.js +39 -12
  9. package/node/prelude/internal/crypto/dh_groups.js +12 -0
  10. package/node/prelude/internal/crypto/diffiehellman.js +354 -0
  11. package/node/prelude/internal/crypto/hash.js +1 -1
  12. package/node/prelude/internal/crypto/key_type.js +3 -0
  13. package/node/prelude/internal/crypto/keys.js +39 -9
  14. package/node/prelude/internal/http_agent.js +249 -0
  15. package/node/prelude/internal/net.js +33 -0
  16. package/node/prelude/internal/socketaddress.js +249 -0
  17. package/node/prelude/internal/tls/common.js +306 -0
  18. package/node/prelude/internal/tls/wrap.js +1217 -0
  19. package/node/prelude/internal/tls/x509.js +394 -0
  20. package/node/prelude/net.js +1083 -50
  21. package/node/prelude/stream.js +6 -0
  22. package/node/prelude/tls.js +141 -0
  23. package/node/prelude/util.js +5 -2
  24. package/node/prelude/util_types.js +85 -0
  25. package/node/src/host_http.c +268 -270
  26. package/node/src/host_loop.c +84 -0
  27. package/node/src/host_net.c +495 -0
  28. package/node/src/host_sys.c +16 -0
  29. package/package.json +1 -1
  30. package/runtime/include/js_builtins.h +16 -0
  31. package/runtime/include/js_console.h +2 -0
  32. package/runtime/include/js_core.def +23 -0
  33. package/runtime/include/js_crypto.h +23 -0
  34. package/runtime/include/js_generator.h +2 -3
  35. package/runtime/include/js_promise.h +0 -2
  36. package/runtime/src/async_iter.c +4 -1
  37. package/runtime/src/boringssl_support.cc +34 -0
  38. package/runtime/src/builtin_table.c +8 -0
  39. package/runtime/src/components.c +10 -0
  40. package/runtime/src/console.c +6 -18
  41. package/runtime/src/core_all.c +1 -0
  42. package/runtime/src/crypto_asym.c +450 -241
  43. package/runtime/src/crypto_bn.c +91 -0
  44. package/runtime/src/crypto_cipher.c +153 -75
  45. package/runtime/src/crypto_hash.c +68 -53
  46. package/runtime/src/crypto_internal.h +55 -26
  47. package/runtime/src/crypto_pkey.c +198 -61
  48. package/runtime/src/crypto_subtle.c +42 -16
  49. package/runtime/src/crypto_tls.c +678 -0
  50. package/runtime/src/generator.c +8 -1
  51. package/runtime/src/global.c +2 -4
  52. package/runtime/src/internal.h +0 -1
  53. package/runtime/src/jobs.c +2 -1
  54. package/runtime/src/promise.c +4 -1
  55. package/runtime/src/tls_roots.gen.h +3215 -0
  56. package/runtime/src/util_types.c +52 -0
  57. package/runtime/src/weak.c +2 -1
  58. package/runtime/third_party/boringssl/LICENSE +238 -0
  59. package/runtime/third_party/boringssl/README.md +46 -0
  60. package/runtime/third_party/boringssl/VERSION +1 -0
  61. package/runtime/third_party/boringssl/crypto/aes/aes.cc +44 -0
  62. package/runtime/third_party/boringssl/crypto/armv8_feature_parsing.h +67 -0
  63. package/runtime/third_party/boringssl/crypto/asn1/a_bitstr.cc +297 -0
  64. package/runtime/third_party/boringssl/crypto/asn1/a_bool.cc +50 -0
  65. package/runtime/third_party/boringssl/crypto/asn1/a_d2i_fp.cc +47 -0
  66. package/runtime/third_party/boringssl/crypto/asn1/a_dup.cc +42 -0
  67. package/runtime/third_party/boringssl/crypto/asn1/a_gentm.cc +130 -0
  68. package/runtime/third_party/boringssl/crypto/asn1/a_i2d_fp.cc +44 -0
  69. package/runtime/third_party/boringssl/crypto/asn1/a_int.cc +467 -0
  70. package/runtime/third_party/boringssl/crypto/asn1/a_mbstr.cc +242 -0
  71. package/runtime/third_party/boringssl/crypto/asn1/a_object.cc +191 -0
  72. package/runtime/third_party/boringssl/crypto/asn1/a_octet.cc +32 -0
  73. package/runtime/third_party/boringssl/crypto/asn1/a_strex.cc +411 -0
  74. package/runtime/third_party/boringssl/crypto/asn1/a_strnid.cc +208 -0
  75. package/runtime/third_party/boringssl/crypto/asn1/a_time.cc +248 -0
  76. package/runtime/third_party/boringssl/crypto/asn1/a_type.cc +467 -0
  77. package/runtime/third_party/boringssl/crypto/asn1/a_utctm.cc +128 -0
  78. package/runtime/third_party/boringssl/crypto/asn1/asn1_lib.cc +453 -0
  79. package/runtime/third_party/boringssl/crypto/asn1/asn1_par.cc +61 -0
  80. package/runtime/third_party/boringssl/crypto/asn1/asn_pack.cc +56 -0
  81. package/runtime/third_party/boringssl/crypto/asn1/f_int.cc +63 -0
  82. package/runtime/third_party/boringssl/crypto/asn1/f_string.cc +52 -0
  83. package/runtime/third_party/boringssl/crypto/asn1/internal.h +430 -0
  84. package/runtime/third_party/boringssl/crypto/asn1/posix_time.cc +244 -0
  85. package/runtime/third_party/boringssl/crypto/asn1/tasn_dec.cc +611 -0
  86. package/runtime/third_party/boringssl/crypto/asn1/tasn_enc.cc +348 -0
  87. package/runtime/third_party/boringssl/crypto/asn1/tasn_fre.cc +163 -0
  88. package/runtime/third_party/boringssl/crypto/asn1/tasn_new.cc +274 -0
  89. package/runtime/third_party/boringssl/crypto/asn1/tasn_typ.cc +92 -0
  90. package/runtime/third_party/boringssl/crypto/asn1/tasn_utl.cc +218 -0
  91. package/runtime/third_party/boringssl/crypto/base64/base64.cc +433 -0
  92. package/runtime/third_party/boringssl/crypto/bcm_support.h +62 -0
  93. package/runtime/third_party/boringssl/crypto/bio/bio.cc +715 -0
  94. package/runtime/third_party/boringssl/crypto/bio/bio_mem.cc +260 -0
  95. package/runtime/third_party/boringssl/crypto/bio/connect.cc +463 -0
  96. package/runtime/third_party/boringssl/crypto/bio/errno.cc +52 -0
  97. package/runtime/third_party/boringssl/crypto/bio/fd.cc +193 -0
  98. package/runtime/third_party/boringssl/crypto/bio/file.cc +283 -0
  99. package/runtime/third_party/boringssl/crypto/bio/hexdump.cc +154 -0
  100. package/runtime/third_party/boringssl/crypto/bio/internal.h +128 -0
  101. package/runtime/third_party/boringssl/crypto/bio/pair.cc +426 -0
  102. package/runtime/third_party/boringssl/crypto/bio/printf.cc +59 -0
  103. package/runtime/third_party/boringssl/crypto/bio/socket.cc +210 -0
  104. package/runtime/third_party/boringssl/crypto/bio/socket_helper.cc +179 -0
  105. package/runtime/third_party/boringssl/crypto/blake2/blake2.cc +173 -0
  106. package/runtime/third_party/boringssl/crypto/bn/bn_asn1.cc +57 -0
  107. package/runtime/third_party/boringssl/crypto/bn/convert.cc +409 -0
  108. package/runtime/third_party/boringssl/crypto/bn/div.cc +102 -0
  109. package/runtime/third_party/boringssl/crypto/bn/exponentiation.cc +168 -0
  110. package/runtime/third_party/boringssl/crypto/bn/sqrt.cc +93 -0
  111. package/runtime/third_party/boringssl/crypto/buf/buf.cc +119 -0
  112. package/runtime/third_party/boringssl/crypto/bytestring/asn1_compat.cc +54 -0
  113. package/runtime/third_party/boringssl/crypto/bytestring/ber.cc +268 -0
  114. package/runtime/third_party/boringssl/crypto/bytestring/cbb.cc +787 -0
  115. package/runtime/third_party/boringssl/crypto/bytestring/cbs.cc +977 -0
  116. package/runtime/third_party/boringssl/crypto/bytestring/internal.h +134 -0
  117. package/runtime/third_party/boringssl/crypto/bytestring/unicode.cc +156 -0
  118. package/runtime/third_party/boringssl/crypto/chacha/chacha.cc +226 -0
  119. package/runtime/third_party/boringssl/crypto/chacha/internal.h +103 -0
  120. package/runtime/third_party/boringssl/crypto/cipher/derive_key.cc +106 -0
  121. package/runtime/third_party/boringssl/crypto/cipher/e_aesctrhmac.cc +294 -0
  122. package/runtime/third_party/boringssl/crypto/cipher/e_aeseax.cc +351 -0
  123. package/runtime/third_party/boringssl/crypto/cipher/e_aesgcmsiv.cc +918 -0
  124. package/runtime/third_party/boringssl/crypto/cipher/e_chacha20poly1305.cc +404 -0
  125. package/runtime/third_party/boringssl/crypto/cipher/e_des.cc +214 -0
  126. package/runtime/third_party/boringssl/crypto/cipher/e_null.cc +55 -0
  127. package/runtime/third_party/boringssl/crypto/cipher/e_rc2.cc +432 -0
  128. package/runtime/third_party/boringssl/crypto/cipher/e_rc4.cc +56 -0
  129. package/runtime/third_party/boringssl/crypto/cipher/e_tls.cc +615 -0
  130. package/runtime/third_party/boringssl/crypto/cipher/get_cipher.cc +85 -0
  131. package/runtime/third_party/boringssl/crypto/cipher/internal.h +399 -0
  132. package/runtime/third_party/boringssl/crypto/cipher/tls_cbc.cc +476 -0
  133. package/runtime/third_party/boringssl/crypto/cms/cms.cc +178 -0
  134. package/runtime/third_party/boringssl/crypto/conf/conf.cc +637 -0
  135. package/runtime/third_party/boringssl/crypto/conf/internal.h +54 -0
  136. package/runtime/third_party/boringssl/crypto/cpu_aarch64_apple.cc +76 -0
  137. package/runtime/third_party/boringssl/crypto/cpu_aarch64_fuchsia.cc +58 -0
  138. package/runtime/third_party/boringssl/crypto/cpu_aarch64_linux.cc +66 -0
  139. package/runtime/third_party/boringssl/crypto/cpu_aarch64_openbsd.cc +45 -0
  140. package/runtime/third_party/boringssl/crypto/cpu_aarch64_sysreg.cc +66 -0
  141. package/runtime/third_party/boringssl/crypto/cpu_aarch64_win.cc +52 -0
  142. package/runtime/third_party/boringssl/crypto/cpu_arm_freebsd.cc +55 -0
  143. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.cc +173 -0
  144. package/runtime/third_party/boringssl/crypto/cpu_arm_linux.h +141 -0
  145. package/runtime/third_party/boringssl/crypto/cpu_intel.cc +287 -0
  146. package/runtime/third_party/boringssl/crypto/crypto.cc +152 -0
  147. package/runtime/third_party/boringssl/crypto/curve25519/asm/x25519-asm-arm.S +2124 -0
  148. package/runtime/third_party/boringssl/crypto/curve25519/cpace.cc +227 -0
  149. package/runtime/third_party/boringssl/crypto/curve25519/curve25519.cc +2436 -0
  150. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_64_adx.cc +18 -0
  151. package/runtime/third_party/boringssl/crypto/curve25519/curve25519_tables.h +3264 -0
  152. package/runtime/third_party/boringssl/crypto/curve25519/internal.h +202 -0
  153. package/runtime/third_party/boringssl/crypto/curve25519/spake25519.cc +532 -0
  154. package/runtime/third_party/boringssl/crypto/des/des.cc +837 -0
  155. package/runtime/third_party/boringssl/crypto/des/internal.h +144 -0
  156. package/runtime/third_party/boringssl/crypto/dh/dh_asn1.cc +109 -0
  157. package/runtime/third_party/boringssl/crypto/dh/params.cc +411 -0
  158. package/runtime/third_party/boringssl/crypto/digest/digest_extra.cc +361 -0
  159. package/runtime/third_party/boringssl/crypto/dsa/dsa.cc +922 -0
  160. package/runtime/third_party/boringssl/crypto/dsa/dsa_asn1.cc +306 -0
  161. package/runtime/third_party/boringssl/crypto/dsa/internal.h +56 -0
  162. package/runtime/third_party/boringssl/crypto/ec/ec_asn1.cc +542 -0
  163. package/runtime/third_party/boringssl/crypto/ec/ec_derive.cc +94 -0
  164. package/runtime/third_party/boringssl/crypto/ec/hash_to_curve.cc +773 -0
  165. package/runtime/third_party/boringssl/crypto/ec/internal.h +114 -0
  166. package/runtime/third_party/boringssl/crypto/ecdh/ecdh.cc +75 -0
  167. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.cc +337 -0
  168. package/runtime/third_party/boringssl/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  169. package/runtime/third_party/boringssl/crypto/engine/engine.cc +95 -0
  170. package/runtime/third_party/boringssl/crypto/err/err.cc +820 -0
  171. package/runtime/third_party/boringssl/crypto/err/internal.h +45 -0
  172. package/runtime/third_party/boringssl/crypto/evp/evp.cc +454 -0
  173. package/runtime/third_party/boringssl/crypto/evp/evp_asn1.cc +439 -0
  174. package/runtime/third_party/boringssl/crypto/evp/evp_ctx.cc +541 -0
  175. package/runtime/third_party/boringssl/crypto/evp/evp_kem.cc +101 -0
  176. package/runtime/third_party/boringssl/crypto/evp/internal.h +427 -0
  177. package/runtime/third_party/boringssl/crypto/evp/p_dh.cc +326 -0
  178. package/runtime/third_party/boringssl/crypto/evp/p_dsa.cc +333 -0
  179. package/runtime/third_party/boringssl/crypto/evp/p_ec.cc +736 -0
  180. package/runtime/third_party/boringssl/crypto/evp/p_ed25519.cc +359 -0
  181. package/runtime/third_party/boringssl/crypto/evp/p_hkdf.cc +204 -0
  182. package/runtime/third_party/boringssl/crypto/evp/p_mldsa.cc +549 -0
  183. package/runtime/third_party/boringssl/crypto/evp/p_mlkem.cc +510 -0
  184. package/runtime/third_party/boringssl/crypto/evp/p_rsa.cc +1185 -0
  185. package/runtime/third_party/boringssl/crypto/evp/p_x25519.cc +371 -0
  186. package/runtime/third_party/boringssl/crypto/evp/p_xwing.cc +300 -0
  187. package/runtime/third_party/boringssl/crypto/evp/pbkdf.cc +105 -0
  188. package/runtime/third_party/boringssl/crypto/evp/print.cc +287 -0
  189. package/runtime/third_party/boringssl/crypto/evp/scrypt.cc +218 -0
  190. package/runtime/third_party/boringssl/crypto/evp/sign.cc +95 -0
  191. package/runtime/third_party/boringssl/crypto/ex_data.cc +140 -0
  192. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes.cc.inc +208 -0
  193. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/aes_nohw.cc.inc +1279 -0
  194. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cbc.cc.inc +132 -0
  195. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/cfb.cc.inc +168 -0
  196. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ctr.cc.inc +102 -0
  197. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm.cc.inc +614 -0
  198. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/gcm_nohw.cc.inc +304 -0
  199. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/internal.h +590 -0
  200. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.cc.inc +211 -0
  201. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.cc.inc +97 -0
  202. package/runtime/third_party/boringssl/crypto/fipsmodule/aes/ofb.cc.inc +55 -0
  203. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm.cc +288 -0
  204. package/runtime/third_party/boringssl/crypto/fipsmodule/bcm_interface.h +953 -0
  205. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/add.cc.inc +276 -0
  206. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +573 -0
  207. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bn.cc.inc +377 -0
  208. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/bytes.cc.inc +230 -0
  209. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/cmp.cc.inc +161 -0
  210. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/ctx.cc.inc +127 -0
  211. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div.cc.inc +738 -0
  212. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/div_extra.cc.inc +90 -0
  213. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.cc.inc +743 -0
  214. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd.cc.inc +281 -0
  215. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.cc.inc +327 -0
  216. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/generic.cc.inc +579 -0
  217. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/internal.h +810 -0
  218. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/jacobi.cc.inc +101 -0
  219. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery.cc.inc +408 -0
  220. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.cc.inc +179 -0
  221. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/mul.cc.inc +347 -0
  222. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/prime.cc.inc +931 -0
  223. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/random.cc.inc +261 -0
  224. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.cc.inc +144 -0
  225. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +109 -0
  226. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/shift.cc.inc +317 -0
  227. package/runtime/third_party/boringssl/crypto/fipsmodule/bn/sqrt.cc.inc +370 -0
  228. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/aead.cc.inc +619 -0
  229. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/cipher.cc.inc +837 -0
  230. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.cc.inc +1240 -0
  231. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/e_aesccm.cc.inc +440 -0
  232. package/runtime/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +461 -0
  233. package/runtime/third_party/boringssl/crypto/fipsmodule/cmac/cmac.cc.inc +293 -0
  234. package/runtime/third_party/boringssl/crypto/fipsmodule/delocate.h +95 -0
  235. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/check.cc.inc +198 -0
  236. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/dh.cc.inc +401 -0
  237. package/runtime/third_party/boringssl/crypto/fipsmodule/dh/internal.h +63 -0
  238. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digest.cc.inc +221 -0
  239. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/digests.cc.inc +184 -0
  240. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/internal.h +72 -0
  241. package/runtime/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +166 -0
  242. package/runtime/third_party/boringssl/crypto/fipsmodule/digestsign/digestsign.cc.inc +230 -0
  243. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/builtin_curves.h +277 -0
  244. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec.cc.inc +1024 -0
  245. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_key.cc.inc +536 -0
  246. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.cc.inc +379 -0
  247. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/felem.cc.inc +250 -0
  248. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/internal.h +752 -0
  249. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/oct.cc.inc +174 -0
  250. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz-table.h +9502 -0
  251. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.cc.inc +740 -0
  252. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256-nistz.h +207 -0
  253. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256.cc.inc +578 -0
  254. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/p256_table.h +297 -0
  255. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/scalar.cc.inc +184 -0
  256. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple.cc.inc +246 -0
  257. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.cc.inc +274 -0
  258. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/util.cc.inc +258 -0
  259. package/runtime/third_party/boringssl/crypto/fipsmodule/ec/wnaf.cc.inc +224 -0
  260. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.cc.inc +91 -0
  261. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +288 -0
  262. package/runtime/third_party/boringssl/crypto/fipsmodule/ecdsa/internal.h +57 -0
  263. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/internal.h +38 -0
  264. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/jitter.cc.inc +487 -0
  265. package/runtime/third_party/boringssl/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  266. package/runtime/third_party/boringssl/crypto/fipsmodule/fips_shared_support.cc +28 -0
  267. package/runtime/third_party/boringssl/crypto/fipsmodule/hkdf/hkdf.cc.inc +114 -0
  268. package/runtime/third_party/boringssl/crypto/fipsmodule/hmac/hmac.cc.inc +218 -0
  269. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/internal.h +165 -0
  270. package/runtime/third_party/boringssl/crypto/fipsmodule/keccak/keccak.cc.inc +647 -0
  271. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  272. package/runtime/third_party/boringssl/crypto/fipsmodule/mldsa/mldsa.cc.inc +3323 -0
  273. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  274. package/runtime/third_party/boringssl/crypto/fipsmodule/mlkem/mlkem.cc.inc +1856 -0
  275. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  276. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.cc.inc +401 -0
  277. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/internal.h +99 -0
  278. package/runtime/third_party/boringssl/crypto/fipsmodule/rand/rand.cc.inc +486 -0
  279. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +167 -0
  280. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/padding.cc.inc +371 -0
  281. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa.cc.inc +996 -0
  282. package/runtime/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.cc.inc +1000 -0
  283. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/fips.cc.inc +129 -0
  284. package/runtime/third_party/boringssl/crypto/fipsmodule/self_check/self_check.cc.inc +1093 -0
  285. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/internal.h +112 -0
  286. package/runtime/third_party/boringssl/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +330 -0
  287. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/internal.h +205 -0
  288. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha1.cc.inc +404 -0
  289. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha256.cc.inc +315 -0
  290. package/runtime/third_party/boringssl/crypto/fipsmodule/sha/sha512.cc.inc +473 -0
  291. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/address.h +144 -0
  292. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  293. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.cc.inc +179 -0
  294. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/fors.h +48 -0
  295. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.cc.inc +164 -0
  296. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/merkle.h +58 -0
  297. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/params.h +178 -0
  298. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +690 -0
  299. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.cc.inc +326 -0
  300. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/thash.h +71 -0
  301. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.cc.inc +172 -0
  302. package/runtime/third_party/boringssl/crypto/fipsmodule/slhdsa/wots.h +40 -0
  303. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/internal.h +33 -0
  304. package/runtime/third_party/boringssl/crypto/fipsmodule/tls/kdf.cc.inc +180 -0
  305. package/runtime/third_party/boringssl/crypto/fuzzer_mode.cc +30 -0
  306. package/runtime/third_party/boringssl/crypto/hpke/hpke.cc +1514 -0
  307. package/runtime/third_party/boringssl/crypto/hrss/asm/poly_rq_mul.S +8489 -0
  308. package/runtime/third_party/boringssl/crypto/hrss/hrss.cc +2189 -0
  309. package/runtime/third_party/boringssl/crypto/hrss/internal.h +64 -0
  310. package/runtime/third_party/boringssl/crypto/internal.h +1767 -0
  311. package/runtime/third_party/boringssl/crypto/lhash/internal.h +222 -0
  312. package/runtime/third_party/boringssl/crypto/lhash/lhash.cc +312 -0
  313. package/runtime/third_party/boringssl/crypto/md4/md4.cc +207 -0
  314. package/runtime/third_party/boringssl/crypto/md5/internal.h +34 -0
  315. package/runtime/third_party/boringssl/crypto/md5/md5.cc +255 -0
  316. package/runtime/third_party/boringssl/crypto/mem.cc +577 -0
  317. package/runtime/third_party/boringssl/crypto/mem_internal.h +706 -0
  318. package/runtime/third_party/boringssl/crypto/mldsa/mldsa.cc +296 -0
  319. package/runtime/third_party/boringssl/crypto/mlkem/mlkem.cc +108 -0
  320. package/runtime/third_party/boringssl/crypto/obj/obj.cc +494 -0
  321. package/runtime/third_party/boringssl/crypto/obj/obj_dat.h +11722 -0
  322. package/runtime/third_party/boringssl/crypto/obj/obj_xref.cc +83 -0
  323. package/runtime/third_party/boringssl/crypto/params_internal.h +30 -0
  324. package/runtime/third_party/boringssl/crypto/pem/internal.h +135 -0
  325. package/runtime/third_party/boringssl/crypto/pem/pem_all.cc +153 -0
  326. package/runtime/third_party/boringssl/crypto/pem/pem_info.cc +250 -0
  327. package/runtime/third_party/boringssl/crypto/pem/pem_lib.cc +707 -0
  328. package/runtime/third_party/boringssl/crypto/pem/pem_oth.cc +45 -0
  329. package/runtime/third_party/boringssl/crypto/pem/pem_pk8.cc +211 -0
  330. package/runtime/third_party/boringssl/crypto/pem/pem_pkey.cc +147 -0
  331. package/runtime/third_party/boringssl/crypto/pem/pem_x509.cc +25 -0
  332. package/runtime/third_party/boringssl/crypto/pem/pem_xaux.cc +25 -0
  333. package/runtime/third_party/boringssl/crypto/pkcs7/internal.h +67 -0
  334. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7.cc +198 -0
  335. package/runtime/third_party/boringssl/crypto/pkcs7/pkcs7_x509.cc +527 -0
  336. package/runtime/third_party/boringssl/crypto/pkcs8/internal.h +98 -0
  337. package/runtime/third_party/boringssl/crypto/pkcs8/p5_pbev2.cc +286 -0
  338. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8.cc +473 -0
  339. package/runtime/third_party/boringssl/crypto/pkcs8/pkcs8_x509.cc +1328 -0
  340. package/runtime/third_party/boringssl/crypto/poly1305/internal.h +54 -0
  341. package/runtime/third_party/boringssl/crypto/poly1305/poly1305.cc +315 -0
  342. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm.cc +294 -0
  343. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_arm_asm.S +2017 -0
  344. package/runtime/third_party/boringssl/crypto/poly1305/poly1305_vec.cc +853 -0
  345. package/runtime/third_party/boringssl/crypto/pool/internal.h +95 -0
  346. package/runtime/third_party/boringssl/crypto/pool/pool.cc +282 -0
  347. package/runtime/third_party/boringssl/crypto/rand/deterministic.cc +58 -0
  348. package/runtime/third_party/boringssl/crypto/rand/fork_detect.cc +222 -0
  349. package/runtime/third_party/boringssl/crypto/rand/forkunsafe.cc +44 -0
  350. package/runtime/third_party/boringssl/crypto/rand/getentropy.cc +53 -0
  351. package/runtime/third_party/boringssl/crypto/rand/internal.h +67 -0
  352. package/runtime/third_party/boringssl/crypto/rand/ios.cc +35 -0
  353. package/runtime/third_party/boringssl/crypto/rand/rand.cc +79 -0
  354. package/runtime/third_party/boringssl/crypto/rand/trusty.cc +39 -0
  355. package/runtime/third_party/boringssl/crypto/rand/urandom.cc +149 -0
  356. package/runtime/third_party/boringssl/crypto/rand/windows.cc +91 -0
  357. package/runtime/third_party/boringssl/crypto/rc4/rc4.cc +56 -0
  358. package/runtime/third_party/boringssl/crypto/refcount.cc +49 -0
  359. package/runtime/third_party/boringssl/crypto/rsa/internal.h +51 -0
  360. package/runtime/third_party/boringssl/crypto/rsa/rsa_asn1.cc +404 -0
  361. package/runtime/third_party/boringssl/crypto/rsa/rsa_crypt.cc +530 -0
  362. package/runtime/third_party/boringssl/crypto/rsa/rsa_extra.cc +30 -0
  363. package/runtime/third_party/boringssl/crypto/rsa/rsa_print.cc +25 -0
  364. package/runtime/third_party/boringssl/crypto/sha/sha1.cc +55 -0
  365. package/runtime/third_party/boringssl/crypto/sha/sha256.cc +89 -0
  366. package/runtime/third_party/boringssl/crypto/sha/sha512.cc +106 -0
  367. package/runtime/third_party/boringssl/crypto/siphash/siphash.cc +81 -0
  368. package/runtime/third_party/boringssl/crypto/slhdsa/slhdsa.cc +167 -0
  369. package/runtime/third_party/boringssl/crypto/spake2plus/internal.h +204 -0
  370. package/runtime/third_party/boringssl/crypto/spake2plus/spake2plus.cc +501 -0
  371. package/runtime/third_party/boringssl/crypto/stack/stack.cc +462 -0
  372. package/runtime/third_party/boringssl/crypto/thread.cc +68 -0
  373. package/runtime/third_party/boringssl/crypto/thread_none.cc +48 -0
  374. package/runtime/third_party/boringssl/crypto/thread_pthread.cc +138 -0
  375. package/runtime/third_party/boringssl/crypto/thread_win.cc +227 -0
  376. package/runtime/third_party/boringssl/crypto/trust_token/internal.h +405 -0
  377. package/runtime/third_party/boringssl/crypto/trust_token/pmbtoken.cc +1672 -0
  378. package/runtime/third_party/boringssl/crypto/trust_token/trust_token.cc +701 -0
  379. package/runtime/third_party/boringssl/crypto/trust_token/voprf.cc +1266 -0
  380. package/runtime/third_party/boringssl/crypto/x509/a_digest.cc +52 -0
  381. package/runtime/third_party/boringssl/crypto/x509/a_sign.cc +100 -0
  382. package/runtime/third_party/boringssl/crypto/x509/a_verify.cc +77 -0
  383. package/runtime/third_party/boringssl/crypto/x509/algorithm.cc +167 -0
  384. package/runtime/third_party/boringssl/crypto/x509/asn1_gen.cc +540 -0
  385. package/runtime/third_party/boringssl/crypto/x509/by_dir.cc +301 -0
  386. package/runtime/third_party/boringssl/crypto/x509/by_file.cc +226 -0
  387. package/runtime/third_party/boringssl/crypto/x509/i2d_pr.cc +37 -0
  388. package/runtime/third_party/boringssl/crypto/x509/internal.h +697 -0
  389. package/runtime/third_party/boringssl/crypto/x509/name_print.cc +187 -0
  390. package/runtime/third_party/boringssl/crypto/x509/policy.cc +686 -0
  391. package/runtime/third_party/boringssl/crypto/x509/rsa_pss.cc +187 -0
  392. package/runtime/third_party/boringssl/crypto/x509/t_crl.cc +106 -0
  393. package/runtime/third_party/boringssl/crypto/x509/t_req.cc +206 -0
  394. package/runtime/third_party/boringssl/crypto/x509/t_x509.cc +292 -0
  395. package/runtime/third_party/boringssl/crypto/x509/t_x509a.cc +81 -0
  396. package/runtime/third_party/boringssl/crypto/x509/v3_akey.cc +174 -0
  397. package/runtime/third_party/boringssl/crypto/x509/v3_akeya.cc +31 -0
  398. package/runtime/third_party/boringssl/crypto/x509/v3_alt.cc +636 -0
  399. package/runtime/third_party/boringssl/crypto/x509/v3_bcons.cc +96 -0
  400. package/runtime/third_party/boringssl/crypto/x509/v3_bitst.cc +100 -0
  401. package/runtime/third_party/boringssl/crypto/x509/v3_conf.cc +369 -0
  402. package/runtime/third_party/boringssl/crypto/x509/v3_cpols.cc +417 -0
  403. package/runtime/third_party/boringssl/crypto/x509/v3_crld.cc +471 -0
  404. package/runtime/third_party/boringssl/crypto/x509/v3_enum.cc +74 -0
  405. package/runtime/third_party/boringssl/crypto/x509/v3_extku.cc +97 -0
  406. package/runtime/third_party/boringssl/crypto/x509/v3_genn.cc +238 -0
  407. package/runtime/third_party/boringssl/crypto/x509/v3_ia5.cc +83 -0
  408. package/runtime/third_party/boringssl/crypto/x509/v3_info.cc +162 -0
  409. package/runtime/third_party/boringssl/crypto/x509/v3_int.cc +83 -0
  410. package/runtime/third_party/boringssl/crypto/x509/v3_lib.cc +349 -0
  411. package/runtime/third_party/boringssl/crypto/x509/v3_ncons.cc +798 -0
  412. package/runtime/third_party/boringssl/crypto/x509/v3_ocsp.cc +92 -0
  413. package/runtime/third_party/boringssl/crypto/x509/v3_pcons.cc +102 -0
  414. package/runtime/third_party/boringssl/crypto/x509/v3_pmaps.cc +110 -0
  415. package/runtime/third_party/boringssl/crypto/x509/v3_prn.cc +183 -0
  416. package/runtime/third_party/boringssl/crypto/x509/v3_purp.cc +580 -0
  417. package/runtime/third_party/boringssl/crypto/x509/v3_skey.cc +128 -0
  418. package/runtime/third_party/boringssl/crypto/x509/v3_utl.cc +1311 -0
  419. package/runtime/third_party/boringssl/crypto/x509/x509.cc +47 -0
  420. package/runtime/third_party/boringssl/crypto/x509/x509_att.cc +188 -0
  421. package/runtime/third_party/boringssl/crypto/x509/x509_cmp.cc +243 -0
  422. package/runtime/third_party/boringssl/crypto/x509/x509_d2.cc +66 -0
  423. package/runtime/third_party/boringssl/crypto/x509/x509_def.cc +42 -0
  424. package/runtime/third_party/boringssl/crypto/x509/x509_ext.cc +161 -0
  425. package/runtime/third_party/boringssl/crypto/x509/x509_lu.cc +570 -0
  426. package/runtime/third_party/boringssl/crypto/x509/x509_mtc.cc +598 -0
  427. package/runtime/third_party/boringssl/crypto/x509/x509_obj.cc +169 -0
  428. package/runtime/third_party/boringssl/crypto/x509/x509_req.cc +248 -0
  429. package/runtime/third_party/boringssl/crypto/x509/x509_set.cc +166 -0
  430. package/runtime/third_party/boringssl/crypto/x509/x509_trs.cc +123 -0
  431. package/runtime/third_party/boringssl/crypto/x509/x509_txt.cc +147 -0
  432. package/runtime/third_party/boringssl/crypto/x509/x509_v3.cc +249 -0
  433. package/runtime/third_party/boringssl/crypto/x509/x509_vfy.cc +1531 -0
  434. package/runtime/third_party/boringssl/crypto/x509/x509_vpm.cc +449 -0
  435. package/runtime/third_party/boringssl/crypto/x509/x509cset.cc +222 -0
  436. package/runtime/third_party/boringssl/crypto/x509/x509name.cc +377 -0
  437. package/runtime/third_party/boringssl/crypto/x509/x509rset.cc +55 -0
  438. package/runtime/third_party/boringssl/crypto/x509/x509spki.cc +91 -0
  439. package/runtime/third_party/boringssl/crypto/x509/x_algor.cc +223 -0
  440. package/runtime/third_party/boringssl/crypto/x509/x_all.cc +352 -0
  441. package/runtime/third_party/boringssl/crypto/x509/x_attrib.cc +61 -0
  442. package/runtime/third_party/boringssl/crypto/x509/x_crl.cc +325 -0
  443. package/runtime/third_party/boringssl/crypto/x509/x_exten.cc +42 -0
  444. package/runtime/third_party/boringssl/crypto/x509/x_name.cc +407 -0
  445. package/runtime/third_party/boringssl/crypto/x509/x_pubkey.cc +199 -0
  446. package/runtime/third_party/boringssl/crypto/x509/x_req.cc +80 -0
  447. package/runtime/third_party/boringssl/crypto/x509/x_sig.cc +51 -0
  448. package/runtime/third_party/boringssl/crypto/x509/x_spki.cc +44 -0
  449. package/runtime/third_party/boringssl/crypto/x509/x_x509.cc +495 -0
  450. package/runtime/third_party/boringssl/crypto/x509/x_x509a.cc +169 -0
  451. package/runtime/third_party/boringssl/crypto/xwing/xwing.cc +257 -0
  452. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-apple.S +1326 -0
  453. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx2-x86_64-linux.S +1327 -0
  454. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-apple.S +1252 -0
  455. package/runtime/third_party/boringssl/gen/bcm/aes-gcm-avx512-x86_64-linux.S +1253 -0
  456. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-apple.S +873 -0
  457. package/runtime/third_party/boringssl/gen/bcm/aesni-gcm-x86_64-linux.S +885 -0
  458. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-apple.S +2490 -0
  459. package/runtime/third_party/boringssl/gen/bcm/aesni-x86-linux.S +2530 -0
  460. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-apple.S +2413 -0
  461. package/runtime/third_party/boringssl/gen/bcm/aesni-x86_64-linux.S +2397 -0
  462. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv7-linux.S +784 -0
  463. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-apple.S +792 -0
  464. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-linux.S +786 -0
  465. package/runtime/third_party/boringssl/gen/bcm/aesv8-armv8-win.S +798 -0
  466. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-apple.S +2912 -0
  467. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-linux.S +2907 -0
  468. package/runtime/third_party/boringssl/gen/bcm/aesv8-gcm-armv8-win.S +2915 -0
  469. package/runtime/third_party/boringssl/gen/bcm/armv4-mont-linux.S +932 -0
  470. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-apple.S +1440 -0
  471. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-linux.S +1440 -0
  472. package/runtime/third_party/boringssl/gen/bcm/armv8-mont-win.S +1446 -0
  473. package/runtime/third_party/boringssl/gen/bcm/bn-586-apple.S +530 -0
  474. package/runtime/third_party/boringssl/gen/bcm/bn-586-linux.S +540 -0
  475. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-apple.S +88 -0
  476. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-linux.S +87 -0
  477. package/runtime/third_party/boringssl/gen/bcm/bn-armv8-win.S +87 -0
  478. package/runtime/third_party/boringssl/gen/bcm/bsaes-armv7-linux.S +1520 -0
  479. package/runtime/third_party/boringssl/gen/bcm/co-586-apple.S +1256 -0
  480. package/runtime/third_party/boringssl/gen/bcm/co-586-linux.S +1264 -0
  481. package/runtime/third_party/boringssl/gen/bcm/ghash-armv4-linux.S +242 -0
  482. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-apple.S +337 -0
  483. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-linux.S +335 -0
  484. package/runtime/third_party/boringssl/gen/bcm/ghash-neon-armv8-win.S +341 -0
  485. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-apple.S +288 -0
  486. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86-linux.S +292 -0
  487. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-apple.S +426 -0
  488. package/runtime/third_party/boringssl/gen/bcm/ghash-ssse3-x86_64-linux.S +425 -0
  489. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-apple.S +322 -0
  490. package/runtime/third_party/boringssl/gen/bcm/ghash-x86-linux.S +328 -0
  491. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-apple.S +1134 -0
  492. package/runtime/third_party/boringssl/gen/bcm/ghash-x86_64-linux.S +1129 -0
  493. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv7-linux.S +244 -0
  494. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-apple.S +567 -0
  495. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-linux.S +563 -0
  496. package/runtime/third_party/boringssl/gen/bcm/ghashv8-armv8-win.S +571 -0
  497. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-apple.S +1744 -0
  498. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-linux.S +1725 -0
  499. package/runtime/third_party/boringssl/gen/bcm/p256-armv8-asm-win.S +1765 -0
  500. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-apple.S +4544 -0
  501. package/runtime/third_party/boringssl/gen/bcm/p256-x86_64-asm-linux.S +4600 -0
  502. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-apple.S +310 -0
  503. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-linux.S +310 -0
  504. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-armv8-asm-win.S +310 -0
  505. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-apple.S +321 -0
  506. package/runtime/third_party/boringssl/gen/bcm/p256_beeu-x86_64-asm-linux.S +335 -0
  507. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-apple.S +58 -0
  508. package/runtime/third_party/boringssl/gen/bcm/rdrand-x86_64-linux.S +57 -0
  509. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-apple.S +1756 -0
  510. package/runtime/third_party/boringssl/gen/bcm/rsaz-avx2-linux.S +1751 -0
  511. package/runtime/third_party/boringssl/gen/bcm/sha1-586-apple.S +3782 -0
  512. package/runtime/third_party/boringssl/gen/bcm/sha1-586-linux.S +3788 -0
  513. package/runtime/third_party/boringssl/gen/bcm/sha1-armv4-large-linux.S +1479 -0
  514. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-apple.S +1219 -0
  515. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-linux.S +1218 -0
  516. package/runtime/third_party/boringssl/gen/bcm/sha1-armv8-win.S +1222 -0
  517. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-apple.S +5454 -0
  518. package/runtime/third_party/boringssl/gen/bcm/sha1-x86_64-linux.S +5450 -0
  519. package/runtime/third_party/boringssl/gen/bcm/sha256-586-apple.S +5593 -0
  520. package/runtime/third_party/boringssl/gen/bcm/sha256-586-linux.S +5599 -0
  521. package/runtime/third_party/boringssl/gen/bcm/sha256-armv4-linux.S +2840 -0
  522. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-apple.S +1195 -0
  523. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-linux.S +1194 -0
  524. package/runtime/third_party/boringssl/gen/bcm/sha256-armv8-win.S +1198 -0
  525. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-apple.S +4173 -0
  526. package/runtime/third_party/boringssl/gen/bcm/sha256-x86_64-linux.S +4170 -0
  527. package/runtime/third_party/boringssl/gen/bcm/sha512-586-apple.S +2406 -0
  528. package/runtime/third_party/boringssl/gen/bcm/sha512-586-linux.S +2410 -0
  529. package/runtime/third_party/boringssl/gen/bcm/sha512-armv4-linux.S +1857 -0
  530. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-apple.S +1598 -0
  531. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-linux.S +1597 -0
  532. package/runtime/third_party/boringssl/gen/bcm/sha512-armv8-win.S +1601 -0
  533. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-apple.S +2979 -0
  534. package/runtime/third_party/boringssl/gen/bcm/sha512-x86_64-linux.S +2978 -0
  535. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv7-linux.S +1225 -0
  536. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-apple.S +1238 -0
  537. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-linux.S +1220 -0
  538. package/runtime/third_party/boringssl/gen/bcm/vpaes-armv8-win.S +1256 -0
  539. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-apple.S +680 -0
  540. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86-linux.S +706 -0
  541. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-apple.S +1146 -0
  542. package/runtime/third_party/boringssl/gen/bcm/vpaes-x86_64-linux.S +1133 -0
  543. package/runtime/third_party/boringssl/gen/bcm/x86-mont-apple.S +216 -0
  544. package/runtime/third_party/boringssl/gen/bcm/x86-mont-linux.S +218 -0
  545. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-apple.S +1238 -0
  546. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont-linux.S +1237 -0
  547. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-apple.S +3644 -0
  548. package/runtime/third_party/boringssl/gen/bcm/x86_64-mont5-linux.S +3628 -0
  549. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +325 -0
  550. package/runtime/third_party/boringssl/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +325 -0
  551. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-apple.S +3113 -0
  552. package/runtime/third_party/boringssl/gen/crypto/aes128gcmsiv-x86_64-linux.S +3091 -0
  553. package/runtime/third_party/boringssl/gen/crypto/chacha-armv4-linux.S +1450 -0
  554. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-apple.S +1969 -0
  555. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-linux.S +1967 -0
  556. package/runtime/third_party/boringssl/gen/crypto/chacha-armv8-win.S +1973 -0
  557. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-apple.S +957 -0
  558. package/runtime/third_party/boringssl/gen/crypto/chacha-x86-linux.S +961 -0
  559. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-apple.S +1608 -0
  560. package/runtime/third_party/boringssl/gen/crypto/chacha-x86_64-linux.S +1611 -0
  561. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-apple.S +3010 -0
  562. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-linux.S +3008 -0
  563. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_armv8-win.S +3014 -0
  564. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-apple.S +8903 -0
  565. package/runtime/third_party/boringssl/gen/crypto/chacha20_poly1305_x86_64-linux.S +8940 -0
  566. package/runtime/third_party/boringssl/gen/crypto/err_data.cc +1578 -0
  567. package/runtime/third_party/boringssl/gen/crypto/md5-586-apple.S +684 -0
  568. package/runtime/third_party/boringssl/gen/crypto/md5-586-linux.S +686 -0
  569. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-apple.S +690 -0
  570. package/runtime/third_party/boringssl/gen/crypto/md5-x86_64-linux.S +695 -0
  571. package/runtime/third_party/boringssl/include/openssl/aead.h +650 -0
  572. package/runtime/third_party/boringssl/include/openssl/aes.h +173 -0
  573. package/runtime/third_party/boringssl/include/openssl/arm_arch.h +24 -0
  574. package/runtime/third_party/boringssl/include/openssl/asm_base.h +219 -0
  575. package/runtime/third_party/boringssl/include/openssl/asn1.h +2002 -0
  576. package/runtime/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  577. package/runtime/third_party/boringssl/include/openssl/asn1t.h +584 -0
  578. package/runtime/third_party/boringssl/include/openssl/base.h +548 -0
  579. package/runtime/third_party/boringssl/include/openssl/base64.h +156 -0
  580. package/runtime/third_party/boringssl/include/openssl/bio.h +1061 -0
  581. package/runtime/third_party/boringssl/include/openssl/blake2.h +63 -0
  582. package/runtime/third_party/boringssl/include/openssl/blowfish.h +58 -0
  583. package/runtime/third_party/boringssl/include/openssl/bn.h +986 -0
  584. package/runtime/third_party/boringssl/include/openssl/buf.h +95 -0
  585. package/runtime/third_party/boringssl/include/openssl/buffer.h +18 -0
  586. package/runtime/third_party/boringssl/include/openssl/bytestring.h +798 -0
  587. package/runtime/third_party/boringssl/include/openssl/cast.h +91 -0
  588. package/runtime/third_party/boringssl/include/openssl/chacha.h +47 -0
  589. package/runtime/third_party/boringssl/include/openssl/cipher.h +819 -0
  590. package/runtime/third_party/boringssl/include/openssl/cmac.h +91 -0
  591. package/runtime/third_party/boringssl/include/openssl/cms.h +147 -0
  592. package/runtime/third_party/boringssl/include/openssl/conf.h +136 -0
  593. package/runtime/third_party/boringssl/include/openssl/configuration.h +18 -0
  594. package/runtime/third_party/boringssl/include/openssl/cpu.h +18 -0
  595. package/runtime/third_party/boringssl/include/openssl/crypto.h +235 -0
  596. package/runtime/third_party/boringssl/include/openssl/ctrdrbg.h +116 -0
  597. package/runtime/third_party/boringssl/include/openssl/curve25519.h +309 -0
  598. package/runtime/third_party/boringssl/include/openssl/des.h +134 -0
  599. package/runtime/third_party/boringssl/include/openssl/dh.h +336 -0
  600. package/runtime/third_party/boringssl/include/openssl/digest.h +399 -0
  601. package/runtime/third_party/boringssl/include/openssl/dsa.h +392 -0
  602. package/runtime/third_party/boringssl/include/openssl/dtls1.h +16 -0
  603. package/runtime/third_party/boringssl/include/openssl/e_os2.h +18 -0
  604. package/runtime/third_party/boringssl/include/openssl/ec.h +530 -0
  605. package/runtime/third_party/boringssl/include/openssl/ec_key.h +358 -0
  606. package/runtime/third_party/boringssl/include/openssl/ecdh.h +67 -0
  607. package/runtime/third_party/boringssl/include/openssl/ecdsa.h +242 -0
  608. package/runtime/third_party/boringssl/include/openssl/engine.h +109 -0
  609. package/runtime/third_party/boringssl/include/openssl/err.h +416 -0
  610. package/runtime/third_party/boringssl/include/openssl/evp.h +1645 -0
  611. package/runtime/third_party/boringssl/include/openssl/evp_errors.h +66 -0
  612. package/runtime/third_party/boringssl/include/openssl/ex_data.h +117 -0
  613. package/runtime/third_party/boringssl/include/openssl/hkdf.h +68 -0
  614. package/runtime/third_party/boringssl/include/openssl/hmac.h +151 -0
  615. package/runtime/third_party/boringssl/include/openssl/hpke.h +456 -0
  616. package/runtime/third_party/boringssl/include/openssl/hrss.h +108 -0
  617. package/runtime/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  618. package/runtime/third_party/boringssl/include/openssl/kdf.h +92 -0
  619. package/runtime/third_party/boringssl/include/openssl/lhash.h +18 -0
  620. package/runtime/third_party/boringssl/include/openssl/md4.h +73 -0
  621. package/runtime/third_party/boringssl/include/openssl/md5.h +67 -0
  622. package/runtime/third_party/boringssl/include/openssl/mem.h +215 -0
  623. package/runtime/third_party/boringssl/include/openssl/mldsa.h +486 -0
  624. package/runtime/third_party/boringssl/include/openssl/mlkem.h +222 -0
  625. package/runtime/third_party/boringssl/include/openssl/nid.h +5561 -0
  626. package/runtime/third_party/boringssl/include/openssl/obj.h +225 -0
  627. package/runtime/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  628. package/runtime/third_party/boringssl/include/openssl/objects.h +18 -0
  629. package/runtime/third_party/boringssl/include/openssl/opensslconf.h +108 -0
  630. package/runtime/third_party/boringssl/include/openssl/opensslv.h +18 -0
  631. package/runtime/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  632. package/runtime/third_party/boringssl/include/openssl/params.h +42 -0
  633. package/runtime/third_party/boringssl/include/openssl/pem.h +769 -0
  634. package/runtime/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  635. package/runtime/third_party/boringssl/include/openssl/pkcs7.h +239 -0
  636. package/runtime/third_party/boringssl/include/openssl/pkcs8.h +267 -0
  637. package/runtime/third_party/boringssl/include/openssl/poly1305.h +52 -0
  638. package/runtime/third_party/boringssl/include/openssl/pool.h +137 -0
  639. package/runtime/third_party/boringssl/include/openssl/posix_time.h +51 -0
  640. package/runtime/third_party/boringssl/include/openssl/prefix_symbols.h +8000 -0
  641. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_S.h +633 -0
  642. package/runtime/third_party/boringssl/include/openssl/prefix_symbols_internal_c.h +329 -0
  643. package/runtime/third_party/boringssl/include/openssl/rand.h +138 -0
  644. package/runtime/third_party/boringssl/include/openssl/rc4.h +54 -0
  645. package/runtime/third_party/boringssl/include/openssl/ripemd.h +71 -0
  646. package/runtime/third_party/boringssl/include/openssl/rsa.h +893 -0
  647. package/runtime/third_party/boringssl/include/openssl/safestack.h +16 -0
  648. package/runtime/third_party/boringssl/include/openssl/service_indicator.h +19 -0
  649. package/runtime/third_party/boringssl/include/openssl/sha.h +108 -0
  650. package/runtime/third_party/boringssl/include/openssl/sha2.h +201 -0
  651. package/runtime/third_party/boringssl/include/openssl/siphash.h +37 -0
  652. package/runtime/third_party/boringssl/include/openssl/slhdsa.h +250 -0
  653. package/runtime/third_party/boringssl/include/openssl/span.h +376 -0
  654. package/runtime/third_party/boringssl/include/openssl/srtp.h +18 -0
  655. package/runtime/third_party/boringssl/include/openssl/ssl.h +7211 -0
  656. package/runtime/third_party/boringssl/include/openssl/ssl3.h +171 -0
  657. package/runtime/third_party/boringssl/include/openssl/stack.h +688 -0
  658. package/runtime/third_party/boringssl/include/openssl/target.h +246 -0
  659. package/runtime/third_party/boringssl/include/openssl/thread.h +114 -0
  660. package/runtime/third_party/boringssl/include/openssl/time.h +22 -0
  661. package/runtime/third_party/boringssl/include/openssl/tls1.h +263 -0
  662. package/runtime/third_party/boringssl/include/openssl/tls_prf.h +47 -0
  663. package/runtime/third_party/boringssl/include/openssl/trust_token.h +349 -0
  664. package/runtime/third_party/boringssl/include/openssl/type_check.h +37 -0
  665. package/runtime/third_party/boringssl/include/openssl/types.h +18 -0
  666. package/runtime/third_party/boringssl/include/openssl/x509.h +5404 -0
  667. package/runtime/third_party/boringssl/include/openssl/x509_vfy.h +18 -0
  668. package/runtime/third_party/boringssl/include/openssl/x509v3.h +63 -0
  669. package/runtime/third_party/boringssl/include/openssl/x509v3_errors.h +84 -0
  670. package/runtime/third_party/boringssl/include/openssl/xwing.h +115 -0
  671. package/runtime/third_party/boringssl/sources.json +696 -0
  672. package/runtime/third_party/boringssl/ssl/bio_ssl.cc +196 -0
  673. package/runtime/third_party/boringssl/ssl/d1_both.cc +1137 -0
  674. package/runtime/third_party/boringssl/ssl/d1_lib.cc +245 -0
  675. package/runtime/third_party/boringssl/ssl/d1_pkt.cc +322 -0
  676. package/runtime/third_party/boringssl/ssl/d1_srtp.cc +128 -0
  677. package/runtime/third_party/boringssl/ssl/dtls_method.cc +216 -0
  678. package/runtime/third_party/boringssl/ssl/dtls_record.cc +586 -0
  679. package/runtime/third_party/boringssl/ssl/encrypted_client_hello.cc +1110 -0
  680. package/runtime/third_party/boringssl/ssl/extensions.cc +5368 -0
  681. package/runtime/third_party/boringssl/ssl/handoff.cc +625 -0
  682. package/runtime/third_party/boringssl/ssl/handshake.cc +694 -0
  683. package/runtime/third_party/boringssl/ssl/handshake_client.cc +1958 -0
  684. package/runtime/third_party/boringssl/ssl/handshake_server.cc +1875 -0
  685. package/runtime/third_party/boringssl/ssl/internal.h +4506 -0
  686. package/runtime/third_party/boringssl/ssl/s3_both.cc +555 -0
  687. package/runtime/third_party/boringssl/ssl/s3_lib.cc +88 -0
  688. package/runtime/third_party/boringssl/ssl/s3_pkt.cc +396 -0
  689. package/runtime/third_party/boringssl/ssl/ssl_aead_ctx.cc +416 -0
  690. package/runtime/third_party/boringssl/ssl/ssl_asn1.cc +851 -0
  691. package/runtime/third_party/boringssl/ssl/ssl_buffer.cc +304 -0
  692. package/runtime/third_party/boringssl/ssl/ssl_cert.cc +723 -0
  693. package/runtime/third_party/boringssl/ssl/ssl_cipher.cc +1762 -0
  694. package/runtime/third_party/boringssl/ssl/ssl_credential.cc +913 -0
  695. package/runtime/third_party/boringssl/ssl/ssl_file.cc +375 -0
  696. package/runtime/third_party/boringssl/ssl/ssl_key_share.cc +445 -0
  697. package/runtime/third_party/boringssl/ssl/ssl_lib.cc +4132 -0
  698. package/runtime/third_party/boringssl/ssl/ssl_privkey.cc +973 -0
  699. package/runtime/third_party/boringssl/ssl/ssl_session.cc +1273 -0
  700. package/runtime/third_party/boringssl/ssl/ssl_stat.cc +162 -0
  701. package/runtime/third_party/boringssl/ssl/ssl_transcript.cc +224 -0
  702. package/runtime/third_party/boringssl/ssl/ssl_versions.cc +436 -0
  703. package/runtime/third_party/boringssl/ssl/ssl_x509.cc +1229 -0
  704. package/runtime/third_party/boringssl/ssl/t1_enc.cc +266 -0
  705. package/runtime/third_party/boringssl/ssl/tls13_both.cc +764 -0
  706. package/runtime/third_party/boringssl/ssl/tls13_client.cc +1325 -0
  707. package/runtime/third_party/boringssl/ssl/tls13_enc.cc +746 -0
  708. package/runtime/third_party/boringssl/ssl/tls13_server.cc +1623 -0
  709. package/runtime/third_party/boringssl/ssl/tls_method.cc +266 -0
  710. package/runtime/third_party/boringssl/ssl/tls_record.cc +524 -0
  711. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_mul.S +178 -0
  712. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_curve25519_adx_square.S +146 -0
  713. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_mul.S +177 -0
  714. package/runtime/third_party/boringssl/third_party/fiat/asm/fiat_p256_adx_sqr.S +166 -0
  715. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  716. package/runtime/third_party/boringssl/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  717. package/runtime/third_party/boringssl/third_party/fiat/curve25519_32.h +1571 -0
  718. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64.h +978 -0
  719. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_adx.h +700 -0
  720. package/runtime/third_party/boringssl/third_party/fiat/curve25519_64_msvc.h +1281 -0
  721. package/runtime/third_party/boringssl/third_party/fiat/p256_32.h +4760 -0
  722. package/runtime/third_party/boringssl/third_party/fiat/p256_64.h +1984 -0
  723. package/runtime/third_party/boringssl/third_party/fiat/p256_64_msvc.h +1939 -0
  724. package/runtime/third_party/boringssl/third_party/fiat/p256_field.c.inc +26 -0
  725. package/runtime/third_party/boringssl/third_party/fiat/p256_field_32.br.c.inc +71 -0
  726. package/runtime/third_party/boringssl/third_party/fiat/p256_field_64.br.c.inc +84 -0
  727. package/runtime/third_party/boringssl/third_party/fiat/p256_point.br.c.inc +112 -0
  728. package/runtime/third_party/v8-ieee754/README.md +2 -1
  729. package/runtime/third_party/v8-ieee754/convert.py +4 -0
  730. package/runtime/third_party/v8-ieee754/ieee754.c +1 -1
  731. package/runtime/third_party/bearssl/LICENSE.txt +0 -21
  732. package/runtime/third_party/bearssl/README.txt +0 -136
  733. package/runtime/third_party/bearssl/VERSION +0 -1
  734. package/runtime/third_party/bearssl/inc/bearssl.h +0 -183
  735. package/runtime/third_party/bearssl/inc/bearssl_aead.h +0 -1059
  736. package/runtime/third_party/bearssl/inc/bearssl_block.h +0 -2618
  737. package/runtime/third_party/bearssl/inc/bearssl_ec.h +0 -967
  738. package/runtime/third_party/bearssl/inc/bearssl_hash.h +0 -1346
  739. package/runtime/third_party/bearssl/inc/bearssl_hmac.h +0 -241
  740. package/runtime/third_party/bearssl/inc/bearssl_kdf.h +0 -284
  741. package/runtime/third_party/bearssl/inc/bearssl_pem.h +0 -294
  742. package/runtime/third_party/bearssl/inc/bearssl_prf.h +0 -150
  743. package/runtime/third_party/bearssl/inc/bearssl_rand.h +0 -397
  744. package/runtime/third_party/bearssl/inc/bearssl_rsa.h +0 -1655
  745. package/runtime/third_party/bearssl/inc/bearssl_ssl.h +0 -4296
  746. package/runtime/third_party/bearssl/inc/bearssl_x509.h +0 -1474
  747. package/runtime/third_party/bearssl/src/aead/ccm.c +0 -346
  748. package/runtime/third_party/bearssl/src/aead/eax.c +0 -525
  749. package/runtime/third_party/bearssl/src/aead/gcm.c +0 -318
  750. package/runtime/third_party/bearssl/src/codec/ccopy.c +0 -44
  751. package/runtime/third_party/bearssl/src/codec/dec16be.c +0 -38
  752. package/runtime/third_party/bearssl/src/codec/dec16le.c +0 -38
  753. package/runtime/third_party/bearssl/src/codec/dec32be.c +0 -38
  754. package/runtime/third_party/bearssl/src/codec/dec32le.c +0 -38
  755. package/runtime/third_party/bearssl/src/codec/dec64be.c +0 -38
  756. package/runtime/third_party/bearssl/src/codec/dec64le.c +0 -38
  757. package/runtime/third_party/bearssl/src/codec/enc16be.c +0 -38
  758. package/runtime/third_party/bearssl/src/codec/enc16le.c +0 -38
  759. package/runtime/third_party/bearssl/src/codec/enc32be.c +0 -38
  760. package/runtime/third_party/bearssl/src/codec/enc32le.c +0 -38
  761. package/runtime/third_party/bearssl/src/codec/enc64be.c +0 -38
  762. package/runtime/third_party/bearssl/src/codec/enc64le.c +0 -38
  763. package/runtime/third_party/bearssl/src/codec/pemdec.c +0 -526
  764. package/runtime/third_party/bearssl/src/codec/pemdec.t0 +0 -314
  765. package/runtime/third_party/bearssl/src/codec/pemenc.c +0 -173
  766. package/runtime/third_party/bearssl/src/config.h +0 -247
  767. package/runtime/third_party/bearssl/src/ec/ec_all_m15.c +0 -121
  768. package/runtime/third_party/bearssl/src/ec/ec_all_m31.c +0 -171
  769. package/runtime/third_party/bearssl/src/ec/ec_c25519_i15.c +0 -398
  770. package/runtime/third_party/bearssl/src/ec/ec_c25519_i31.c +0 -390
  771. package/runtime/third_party/bearssl/src/ec/ec_c25519_m15.c +0 -1478
  772. package/runtime/third_party/bearssl/src/ec/ec_c25519_m31.c +0 -800
  773. package/runtime/third_party/bearssl/src/ec/ec_c25519_m62.c +0 -605
  774. package/runtime/third_party/bearssl/src/ec/ec_c25519_m64.c +0 -831
  775. package/runtime/third_party/bearssl/src/ec/ec_curve25519.c +0 -46
  776. package/runtime/third_party/bearssl/src/ec/ec_default.c +0 -36
  777. package/runtime/third_party/bearssl/src/ec/ec_keygen.c +0 -86
  778. package/runtime/third_party/bearssl/src/ec/ec_p256_m15.c +0 -2124
  779. package/runtime/third_party/bearssl/src/ec/ec_p256_m31.c +0 -1469
  780. package/runtime/third_party/bearssl/src/ec/ec_p256_m62.c +0 -1765
  781. package/runtime/third_party/bearssl/src/ec/ec_p256_m64.c +0 -1781
  782. package/runtime/third_party/bearssl/src/ec/ec_prime_i15.c +0 -824
  783. package/runtime/third_party/bearssl/src/ec/ec_prime_i31.c +0 -826
  784. package/runtime/third_party/bearssl/src/ec/ec_pubkey.c +0 -85
  785. package/runtime/third_party/bearssl/src/ec/ec_secp256r1.c +0 -51
  786. package/runtime/third_party/bearssl/src/ec/ec_secp384r1.c +0 -57
  787. package/runtime/third_party/bearssl/src/ec/ec_secp521r1.c +0 -64
  788. package/runtime/third_party/bearssl/src/ec/ecdsa_atr.c +0 -134
  789. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_asn1.c +0 -36
  790. package/runtime/third_party/bearssl/src/ec/ecdsa_default_sign_raw.c +0 -36
  791. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_asn1.c +0 -36
  792. package/runtime/third_party/bearssl/src/ec/ecdsa_default_vrfy_raw.c +0 -36
  793. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_bits.c +0 -47
  794. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_asn1.c +0 -45
  795. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_sign_raw.c +0 -174
  796. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_asn1.c +0 -48
  797. package/runtime/third_party/bearssl/src/ec/ecdsa_i15_vrfy_raw.c +0 -166
  798. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_bits.c +0 -47
  799. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_asn1.c +0 -45
  800. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_sign_raw.c +0 -173
  801. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_asn1.c +0 -48
  802. package/runtime/third_party/bearssl/src/ec/ecdsa_i31_vrfy_raw.c +0 -165
  803. package/runtime/third_party/bearssl/src/ec/ecdsa_rta.c +0 -121
  804. package/runtime/third_party/bearssl/src/hash/dig_oid.c +0 -84
  805. package/runtime/third_party/bearssl/src/hash/dig_size.c +0 -50
  806. package/runtime/third_party/bearssl/src/hash/ghash_ctmul.c +0 -345
  807. package/runtime/third_party/bearssl/src/hash/ghash_ctmul32.c +0 -251
  808. package/runtime/third_party/bearssl/src/hash/ghash_ctmul64.c +0 -154
  809. package/runtime/third_party/bearssl/src/hash/ghash_pclmul.c +0 -389
  810. package/runtime/third_party/bearssl/src/hash/ghash_pwr8.c +0 -411
  811. package/runtime/third_party/bearssl/src/hash/md5.c +0 -208
  812. package/runtime/third_party/bearssl/src/hash/md5sha1.c +0 -141
  813. package/runtime/third_party/bearssl/src/hash/mgf1.c +0 -56
  814. package/runtime/third_party/bearssl/src/hash/multihash.c +0 -166
  815. package/runtime/third_party/bearssl/src/hash/sha1.c +0 -191
  816. package/runtime/third_party/bearssl/src/hash/sha2big.c +0 -285
  817. package/runtime/third_party/bearssl/src/hash/sha2small.c +0 -341
  818. package/runtime/third_party/bearssl/src/inner.h +0 -2577
  819. package/runtime/third_party/bearssl/src/int/i15_add.c +0 -46
  820. package/runtime/third_party/bearssl/src/int/i15_bitlen.c +0 -44
  821. package/runtime/third_party/bearssl/src/int/i15_decmod.c +0 -124
  822. package/runtime/third_party/bearssl/src/int/i15_decode.c +0 -56
  823. package/runtime/third_party/bearssl/src/int/i15_decred.c +0 -100
  824. package/runtime/third_party/bearssl/src/int/i15_encode.c +0 -56
  825. package/runtime/third_party/bearssl/src/int/i15_fmont.c +0 -59
  826. package/runtime/third_party/bearssl/src/int/i15_iszero.c +0 -39
  827. package/runtime/third_party/bearssl/src/int/i15_moddiv.c +0 -465
  828. package/runtime/third_party/bearssl/src/int/i15_modpow.c +0 -50
  829. package/runtime/third_party/bearssl/src/int/i15_modpow2.c +0 -160
  830. package/runtime/third_party/bearssl/src/int/i15_montmul.c +0 -184
  831. package/runtime/third_party/bearssl/src/int/i15_mulacc.c +0 -61
  832. package/runtime/third_party/bearssl/src/int/i15_muladd.c +0 -173
  833. package/runtime/third_party/bearssl/src/int/i15_ninv15.c +0 -38
  834. package/runtime/third_party/bearssl/src/int/i15_reduce.c +0 -66
  835. package/runtime/third_party/bearssl/src/int/i15_rshift.c +0 -47
  836. package/runtime/third_party/bearssl/src/int/i15_sub.c +0 -46
  837. package/runtime/third_party/bearssl/src/int/i15_tmont.c +0 -36
  838. package/runtime/third_party/bearssl/src/int/i31_add.c +0 -46
  839. package/runtime/third_party/bearssl/src/int/i31_bitlen.c +0 -44
  840. package/runtime/third_party/bearssl/src/int/i31_decmod.c +0 -124
  841. package/runtime/third_party/bearssl/src/int/i31_decode.c +0 -57
  842. package/runtime/third_party/bearssl/src/int/i31_decred.c +0 -103
  843. package/runtime/third_party/bearssl/src/int/i31_encode.c +0 -79
  844. package/runtime/third_party/bearssl/src/int/i31_fmont.c +0 -60
  845. package/runtime/third_party/bearssl/src/int/i31_iszero.c +0 -39
  846. package/runtime/third_party/bearssl/src/int/i31_moddiv.c +0 -488
  847. package/runtime/third_party/bearssl/src/int/i31_modpow.c +0 -65
  848. package/runtime/third_party/bearssl/src/int/i31_modpow2.c +0 -160
  849. package/runtime/third_party/bearssl/src/int/i31_montmul.c +0 -127
  850. package/runtime/third_party/bearssl/src/int/i31_mulacc.c +0 -74
  851. package/runtime/third_party/bearssl/src/int/i31_muladd.c +0 -157
  852. package/runtime/third_party/bearssl/src/int/i31_ninv31.c +0 -39
  853. package/runtime/third_party/bearssl/src/int/i31_reduce.c +0 -66
  854. package/runtime/third_party/bearssl/src/int/i31_rshift.c +0 -47
  855. package/runtime/third_party/bearssl/src/int/i31_sub.c +0 -46
  856. package/runtime/third_party/bearssl/src/int/i31_tmont.c +0 -36
  857. package/runtime/third_party/bearssl/src/int/i32_add.c +0 -51
  858. package/runtime/third_party/bearssl/src/int/i32_bitlen.c +0 -44
  859. package/runtime/third_party/bearssl/src/int/i32_decmod.c +0 -77
  860. package/runtime/third_party/bearssl/src/int/i32_decode.c +0 -63
  861. package/runtime/third_party/bearssl/src/int/i32_decred.c +0 -107
  862. package/runtime/third_party/bearssl/src/int/i32_div32.c +0 -56
  863. package/runtime/third_party/bearssl/src/int/i32_encode.c +0 -72
  864. package/runtime/third_party/bearssl/src/int/i32_fmont.c +0 -60
  865. package/runtime/third_party/bearssl/src/int/i32_iszero.c +0 -39
  866. package/runtime/third_party/bearssl/src/int/i32_modpow.c +0 -65
  867. package/runtime/third_party/bearssl/src/int/i32_montmul.c +0 -69
  868. package/runtime/third_party/bearssl/src/int/i32_mulacc.c +0 -56
  869. package/runtime/third_party/bearssl/src/int/i32_muladd.c +0 -138
  870. package/runtime/third_party/bearssl/src/int/i32_ninv32.c +0 -39
  871. package/runtime/third_party/bearssl/src/int/i32_reduce.c +0 -66
  872. package/runtime/third_party/bearssl/src/int/i32_sub.c +0 -51
  873. package/runtime/third_party/bearssl/src/int/i32_tmont.c +0 -36
  874. package/runtime/third_party/bearssl/src/int/i62_modpow2.c +0 -493
  875. package/runtime/third_party/bearssl/src/kdf/hkdf.c +0 -107
  876. package/runtime/third_party/bearssl/src/kdf/shake.c +0 -590
  877. package/runtime/third_party/bearssl/src/mac/hmac.c +0 -122
  878. package/runtime/third_party/bearssl/src/mac/hmac_ct.c +0 -193
  879. package/runtime/third_party/bearssl/src/rand/aesctr_drbg.c +0 -206
  880. package/runtime/third_party/bearssl/src/rand/hmac_drbg.c +0 -157
  881. package/runtime/third_party/bearssl/src/rand/sysrng.c +0 -252
  882. package/runtime/third_party/bearssl/src/rsa/rsa_default_keygen.c +0 -38
  883. package/runtime/third_party/bearssl/src/rsa/rsa_default_modulus.c +0 -36
  884. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_decrypt.c +0 -38
  885. package/runtime/third_party/bearssl/src/rsa/rsa_default_oaep_encrypt.c +0 -38
  886. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_sign.c +0 -38
  887. package/runtime/third_party/bearssl/src/rsa/rsa_default_pkcs1_vrfy.c +0 -38
  888. package/runtime/third_party/bearssl/src/rsa/rsa_default_priv.c +0 -38
  889. package/runtime/third_party/bearssl/src/rsa/rsa_default_privexp.c +0 -36
  890. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_sign.c +0 -38
  891. package/runtime/third_party/bearssl/src/rsa/rsa_default_pss_vrfy.c +0 -38
  892. package/runtime/third_party/bearssl/src/rsa/rsa_default_pub.c +0 -38
  893. package/runtime/third_party/bearssl/src/rsa/rsa_default_pubexp.c +0 -36
  894. package/runtime/third_party/bearssl/src/rsa/rsa_i15_keygen.c +0 -583
  895. package/runtime/third_party/bearssl/src/rsa/rsa_i15_modulus.c +0 -99
  896. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_decrypt.c +0 -41
  897. package/runtime/third_party/bearssl/src/rsa/rsa_i15_oaep_encrypt.c +0 -44
  898. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_sign.c +0 -37
  899. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pkcs1_vrfy.c +0 -43
  900. package/runtime/third_party/bearssl/src/rsa/rsa_i15_priv.c +0 -209
  901. package/runtime/third_party/bearssl/src/rsa/rsa_i15_privexp.c +0 -320
  902. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_sign.c +0 -40
  903. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pss_vrfy.c +0 -44
  904. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pub.c +0 -113
  905. package/runtime/third_party/bearssl/src/rsa/rsa_i15_pubexp.c +0 -152
  906. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen.c +0 -37
  907. package/runtime/third_party/bearssl/src/rsa/rsa_i31_keygen_inner.c +0 -608
  908. package/runtime/third_party/bearssl/src/rsa/rsa_i31_modulus.c +0 -99
  909. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_decrypt.c +0 -41
  910. package/runtime/third_party/bearssl/src/rsa/rsa_i31_oaep_encrypt.c +0 -44
  911. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_sign.c +0 -37
  912. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pkcs1_vrfy.c +0 -43
  913. package/runtime/third_party/bearssl/src/rsa/rsa_i31_priv.c +0 -203
  914. package/runtime/third_party/bearssl/src/rsa/rsa_i31_privexp.c +0 -318
  915. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_sign.c +0 -40
  916. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pss_vrfy.c +0 -44
  917. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pub.c +0 -106
  918. package/runtime/third_party/bearssl/src/rsa/rsa_i31_pubexp.c +0 -152
  919. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_decrypt.c +0 -41
  920. package/runtime/third_party/bearssl/src/rsa/rsa_i32_oaep_encrypt.c +0 -44
  921. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_sign.c +0 -37
  922. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pkcs1_vrfy.c +0 -43
  923. package/runtime/third_party/bearssl/src/rsa/rsa_i32_priv.c +0 -160
  924. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_sign.c +0 -40
  925. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pss_vrfy.c +0 -44
  926. package/runtime/third_party/bearssl/src/rsa/rsa_i32_pub.c +0 -77
  927. package/runtime/third_party/bearssl/src/rsa/rsa_i62_keygen.c +0 -57
  928. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_decrypt.c +0 -61
  929. package/runtime/third_party/bearssl/src/rsa/rsa_i62_oaep_encrypt.c +0 -64
  930. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_sign.c +0 -57
  931. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pkcs1_vrfy.c +0 -63
  932. package/runtime/third_party/bearssl/src/rsa/rsa_i62_priv.c +0 -223
  933. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_sign.c +0 -60
  934. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pss_vrfy.c +0 -64
  935. package/runtime/third_party/bearssl/src/rsa/rsa_i62_pub.c +0 -125
  936. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_pad.c +0 -112
  937. package/runtime/third_party/bearssl/src/rsa/rsa_oaep_unpad.c +0 -145
  938. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +0 -100
  939. package/runtime/third_party/bearssl/src/rsa/rsa_pkcs1_sig_unpad.c +0 -121
  940. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_pad.c +0 -106
  941. package/runtime/third_party/bearssl/src/rsa/rsa_pss_sig_unpad.c +0 -121
  942. package/runtime/third_party/bearssl/src/rsa/rsa_ssl_decrypt.c +0 -52
  943. package/runtime/third_party/bearssl/src/settings.c +0 -306
  944. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcdec.c +0 -69
  945. package/runtime/third_party/bearssl/src/symcipher/aes_big_cbcenc.c +0 -67
  946. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctr.c +0 -84
  947. package/runtime/third_party/bearssl/src/symcipher/aes_big_ctrcbc.c +0 -142
  948. package/runtime/third_party/bearssl/src/symcipher/aes_big_dec.c +0 -254
  949. package/runtime/third_party/bearssl/src/symcipher/aes_big_enc.c +0 -157
  950. package/runtime/third_party/bearssl/src/symcipher/aes_common.c +0 -112
  951. package/runtime/third_party/bearssl/src/symcipher/aes_ct.c +0 -328
  952. package/runtime/third_party/bearssl/src/symcipher/aes_ct64.c +0 -398
  953. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcdec.c +0 -104
  954. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_cbcenc.c +0 -81
  955. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctr.c +0 -114
  956. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_ctrcbc.c +0 -433
  957. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_dec.c +0 -159
  958. package/runtime/third_party/bearssl/src/symcipher/aes_ct64_enc.c +0 -115
  959. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcdec.c +0 -111
  960. package/runtime/third_party/bearssl/src/symcipher/aes_ct_cbcenc.c +0 -91
  961. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctr.c +0 -116
  962. package/runtime/third_party/bearssl/src/symcipher/aes_ct_ctrcbc.c +0 -422
  963. package/runtime/third_party/bearssl/src/symcipher/aes_ct_dec.c +0 -170
  964. package/runtime/third_party/bearssl/src/symcipher/aes_ct_enc.c +0 -112
  965. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8.c +0 -445
  966. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcdec.c +0 -670
  967. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_cbcenc.c +0 -417
  968. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctr.c +0 -717
  969. package/runtime/third_party/bearssl/src/symcipher/aes_pwr8_ctrcbc.c +0 -946
  970. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcdec.c +0 -69
  971. package/runtime/third_party/bearssl/src/symcipher/aes_small_cbcenc.c +0 -67
  972. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctr.c +0 -84
  973. package/runtime/third_party/bearssl/src/symcipher/aes_small_ctrcbc.c +0 -142
  974. package/runtime/third_party/bearssl/src/symcipher/aes_small_dec.c +0 -176
  975. package/runtime/third_party/bearssl/src/symcipher/aes_small_enc.c +0 -129
  976. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni.c +0 -240
  977. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcdec.c +0 -223
  978. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_cbcenc.c +0 -122
  979. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctr.c +0 -211
  980. package/runtime/third_party/bearssl/src/symcipher/aes_x86ni_ctrcbc.c +0 -596
  981. package/runtime/third_party/bearssl/src/symcipher/chacha20_ct.c +0 -106
  982. package/runtime/third_party/bearssl/src/symcipher/chacha20_sse2.c +0 -237
  983. package/runtime/third_party/bearssl/src/symcipher/des_ct.c +0 -411
  984. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcdec.c +0 -87
  985. package/runtime/third_party/bearssl/src/symcipher/des_ct_cbcenc.c +0 -69
  986. package/runtime/third_party/bearssl/src/symcipher/des_support.c +0 -166
  987. package/runtime/third_party/bearssl/src/symcipher/des_tab.c +0 -310
  988. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcdec.c +0 -85
  989. package/runtime/third_party/bearssl/src/symcipher/des_tab_cbcenc.c +0 -67
  990. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul.c +0 -260
  991. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmul32.c +0 -297
  992. package/runtime/third_party/bearssl/src/symcipher/poly1305_ctmulq.c +0 -475
  993. package/runtime/third_party/bearssl/src/symcipher/poly1305_i15.c +0 -221
  994. package/runtime/third_party/bearssl/src/x509/asn1.t0 +0 -757
  995. package/runtime/third_party/bearssl/src/x509/asn1enc.c +0 -93
  996. package/runtime/third_party/bearssl/src/x509/encode_ec_pk8der.c +0 -110
  997. package/runtime/third_party/bearssl/src/x509/encode_ec_rawder.c +0 -161
  998. package/runtime/third_party/bearssl/src/x509/encode_rsa_pk8der.c +0 -97
  999. package/runtime/third_party/bearssl/src/x509/encode_rsa_rawder.c +0 -96
  1000. package/runtime/third_party/bearssl/src/x509/skey_decoder.c +0 -653
  1001. package/runtime/third_party/bearssl/src/x509/skey_decoder.t0 +0 -376
  1002. package/runtime/third_party/bearssl/src/x509/x509_decoder.c +0 -776
  1003. package/runtime/third_party/bearssl/src/x509/x509_decoder.t0 +0 -324
  1004. package/runtime/third_party/bearssl/src/x509/x509_knownkey.c +0 -105
  1005. package/runtime/third_party/bearssl/src/x509/x509_minimal.c +0 -1722
  1006. package/runtime/third_party/bearssl/src/x509/x509_minimal.t0 +0 -1526
  1007. package/runtime/third_party/bearssl/src/x509/x509_minimal_full.c +0 -59
@@ -0,0 +1,3644 @@
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
+ .globl _bn_mul_mont_gather5_nohw
10
+ .private_extern _bn_mul_mont_gather5_nohw
11
+
12
+ .p2align 6
13
+ _bn_mul_mont_gather5_nohw:
14
+
15
+ _CET_ENDBR
16
+ // num is declared as an int, a 32-bit parameter, so the upper half is
17
+ // undefined. Zero the upper half to normalize it.
18
+ movl %r9d,%r9d
19
+ movq %rsp,%rax
20
+
21
+ movd 8(%rsp),%xmm5 // load 7th argument
22
+ pushq %rbx
23
+
24
+ pushq %rbp
25
+
26
+ pushq %r12
27
+
28
+ pushq %r13
29
+
30
+ pushq %r14
31
+
32
+ pushq %r15
33
+
34
+
35
+ negq %r9
36
+ movq %rsp,%r11
37
+ leaq -280(%rsp,%r9,8),%r10 // future alloca(8*(num+2)+256+8)
38
+ negq %r9 // restore %r9
39
+ andq $-1024,%r10 // minimize TLB usage
40
+
41
+ // An OS-agnostic version of __chkstk.
42
+ //
43
+ // Some OSes (Windows) insist on stack being "wired" to
44
+ // physical memory in strictly sequential manner, i.e. if stack
45
+ // allocation spans two pages, then reference to farmost one can
46
+ // be punishable by SEGV. But page walking can do good even on
47
+ // other OSes, because it guarantees that villain thread hits
48
+ // the guard page before it can make damage to innocent one...
49
+ subq %r10,%r11
50
+ andq $-4096,%r11
51
+ leaq (%r10,%r11,1),%rsp
52
+ movq (%rsp),%r11
53
+ cmpq %r10,%rsp
54
+ ja L$mul_page_walk
55
+ jmp L$mul_page_walk_done
56
+
57
+ L$mul_page_walk:
58
+ leaq -4096(%rsp),%rsp
59
+ movq (%rsp),%r11
60
+ cmpq %r10,%rsp
61
+ ja L$mul_page_walk
62
+ L$mul_page_walk_done:
63
+
64
+ leaq L$inc(%rip),%r10
65
+ movq %rax,8(%rsp,%r9,8) // tp[num+1]=%rsp
66
+
67
+ L$mul_body:
68
+
69
+ leaq 128(%rdx),%r12 // reassign %rdx (+size optimization)
70
+ movdqa 0(%r10),%xmm0 // 00000001000000010000000000000000
71
+ movdqa 16(%r10),%xmm1 // 00000002000000020000000200000002
72
+ leaq 24-112(%rsp,%r9,8),%r10 // place the mask after tp[num+3] (+ICache optimization)
73
+ andq $-16,%r10
74
+
75
+ pshufd $0,%xmm5,%xmm5 // broadcast index
76
+ movdqa %xmm1,%xmm4
77
+ movdqa %xmm1,%xmm2
78
+ paddd %xmm0,%xmm1
79
+ pcmpeqd %xmm5,%xmm0 // compare to 1,0
80
+ .byte 0x67
81
+ movdqa %xmm4,%xmm3
82
+ paddd %xmm1,%xmm2
83
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
84
+ movdqa %xmm0,112(%r10)
85
+ movdqa %xmm4,%xmm0
86
+
87
+ paddd %xmm2,%xmm3
88
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
89
+ movdqa %xmm1,128(%r10)
90
+ movdqa %xmm4,%xmm1
91
+
92
+ paddd %xmm3,%xmm0
93
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
94
+ movdqa %xmm2,144(%r10)
95
+ movdqa %xmm4,%xmm2
96
+
97
+ paddd %xmm0,%xmm1
98
+ pcmpeqd %xmm5,%xmm0
99
+ movdqa %xmm3,160(%r10)
100
+ movdqa %xmm4,%xmm3
101
+ paddd %xmm1,%xmm2
102
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
103
+ movdqa %xmm0,176(%r10)
104
+ movdqa %xmm4,%xmm0
105
+
106
+ paddd %xmm2,%xmm3
107
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
108
+ movdqa %xmm1,192(%r10)
109
+ movdqa %xmm4,%xmm1
110
+
111
+ paddd %xmm3,%xmm0
112
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
113
+ movdqa %xmm2,208(%r10)
114
+ movdqa %xmm4,%xmm2
115
+
116
+ paddd %xmm0,%xmm1
117
+ pcmpeqd %xmm5,%xmm0
118
+ movdqa %xmm3,224(%r10)
119
+ movdqa %xmm4,%xmm3
120
+ paddd %xmm1,%xmm2
121
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
122
+ movdqa %xmm0,240(%r10)
123
+ movdqa %xmm4,%xmm0
124
+
125
+ paddd %xmm2,%xmm3
126
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
127
+ movdqa %xmm1,256(%r10)
128
+ movdqa %xmm4,%xmm1
129
+
130
+ paddd %xmm3,%xmm0
131
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
132
+ movdqa %xmm2,272(%r10)
133
+ movdqa %xmm4,%xmm2
134
+
135
+ paddd %xmm0,%xmm1
136
+ pcmpeqd %xmm5,%xmm0
137
+ movdqa %xmm3,288(%r10)
138
+ movdqa %xmm4,%xmm3
139
+ paddd %xmm1,%xmm2
140
+ pcmpeqd %xmm5,%xmm1
141
+ movdqa %xmm0,304(%r10)
142
+
143
+ paddd %xmm2,%xmm3
144
+ .byte 0x67
145
+ pcmpeqd %xmm5,%xmm2
146
+ movdqa %xmm1,320(%r10)
147
+
148
+ pcmpeqd %xmm5,%xmm3
149
+ movdqa %xmm2,336(%r10)
150
+ pand 64(%r12),%xmm0 // while it's still in register
151
+
152
+ pand 80(%r12),%xmm1
153
+ pand 96(%r12),%xmm2
154
+ movdqa %xmm3,352(%r10)
155
+ pand 112(%r12),%xmm3
156
+ por %xmm2,%xmm0
157
+ por %xmm3,%xmm1
158
+ movdqa -128(%r12),%xmm4
159
+ movdqa -112(%r12),%xmm5
160
+ movdqa -96(%r12),%xmm2
161
+ pand 112(%r10),%xmm4
162
+ movdqa -80(%r12),%xmm3
163
+ pand 128(%r10),%xmm5
164
+ por %xmm4,%xmm0
165
+ pand 144(%r10),%xmm2
166
+ por %xmm5,%xmm1
167
+ pand 160(%r10),%xmm3
168
+ por %xmm2,%xmm0
169
+ por %xmm3,%xmm1
170
+ movdqa -64(%r12),%xmm4
171
+ movdqa -48(%r12),%xmm5
172
+ movdqa -32(%r12),%xmm2
173
+ pand 176(%r10),%xmm4
174
+ movdqa -16(%r12),%xmm3
175
+ pand 192(%r10),%xmm5
176
+ por %xmm4,%xmm0
177
+ pand 208(%r10),%xmm2
178
+ por %xmm5,%xmm1
179
+ pand 224(%r10),%xmm3
180
+ por %xmm2,%xmm0
181
+ por %xmm3,%xmm1
182
+ movdqa 0(%r12),%xmm4
183
+ movdqa 16(%r12),%xmm5
184
+ movdqa 32(%r12),%xmm2
185
+ pand 240(%r10),%xmm4
186
+ movdqa 48(%r12),%xmm3
187
+ pand 256(%r10),%xmm5
188
+ por %xmm4,%xmm0
189
+ pand 272(%r10),%xmm2
190
+ por %xmm5,%xmm1
191
+ pand 288(%r10),%xmm3
192
+ por %xmm2,%xmm0
193
+ por %xmm3,%xmm1
194
+ por %xmm1,%xmm0
195
+ // Combine the upper and lower halves of %xmm0.
196
+ pshufd $0x4e,%xmm0,%xmm1 // Swap upper and lower halves.
197
+ por %xmm1,%xmm0
198
+ leaq 256(%r12),%r12
199
+ movq %xmm0,%rbx // m0=bp[0]
200
+
201
+ movq (%r8),%r8 // pull n0[0] value
202
+ movq (%rsi),%rax
203
+
204
+ xorq %r14,%r14 // i=0
205
+ xorq %r15,%r15 // j=0
206
+
207
+ movq %r8,%rbp
208
+ mulq %rbx // ap[0]*bp[0]
209
+ movq %rax,%r10
210
+ movq (%rcx),%rax
211
+
212
+ imulq %r10,%rbp // "tp[0]"*n0
213
+ movq %rdx,%r11
214
+
215
+ mulq %rbp // np[0]*m1
216
+ addq %rax,%r10 // discarded
217
+ movq 8(%rsi),%rax
218
+ adcq $0,%rdx
219
+ movq %rdx,%r13
220
+
221
+ leaq 1(%r15),%r15 // j++
222
+ jmp L$1st_enter
223
+
224
+ .p2align 4
225
+ L$1st:
226
+ addq %rax,%r13
227
+ movq (%rsi,%r15,8),%rax
228
+ adcq $0,%rdx
229
+ addq %r11,%r13 // np[j]*m1+ap[j]*bp[0]
230
+ movq %r10,%r11
231
+ adcq $0,%rdx
232
+ movq %r13,-16(%rsp,%r15,8) // tp[j-1]
233
+ movq %rdx,%r13
234
+
235
+ L$1st_enter:
236
+ mulq %rbx // ap[j]*bp[0]
237
+ addq %rax,%r11
238
+ movq (%rcx,%r15,8),%rax
239
+ adcq $0,%rdx
240
+ leaq 1(%r15),%r15 // j++
241
+ movq %rdx,%r10
242
+
243
+ mulq %rbp // np[j]*m1
244
+ cmpq %r9,%r15
245
+ jne L$1st // note that upon exit %r15==%r9, so
246
+ // they can be used interchangeably
247
+
248
+ addq %rax,%r13
249
+ adcq $0,%rdx
250
+ addq %r11,%r13 // np[j]*m1+ap[j]*bp[0]
251
+ adcq $0,%rdx
252
+ movq %r13,-16(%rsp,%r9,8) // tp[num-1]
253
+ movq %rdx,%r13
254
+ movq %r10,%r11
255
+
256
+ xorq %rdx,%rdx
257
+ addq %r11,%r13
258
+ adcq $0,%rdx
259
+ movq %r13,-8(%rsp,%r9,8)
260
+ movq %rdx,(%rsp,%r9,8) // store upmost overflow bit
261
+
262
+ leaq 1(%r14),%r14 // i++
263
+ jmp L$outer
264
+ .p2align 4
265
+ L$outer:
266
+ leaq 24+128(%rsp,%r9,8),%rdx // where 256-byte mask is (+size optimization)
267
+ andq $-16,%rdx
268
+ pxor %xmm4,%xmm4
269
+ pxor %xmm5,%xmm5
270
+ movdqa -128(%r12),%xmm0
271
+ movdqa -112(%r12),%xmm1
272
+ movdqa -96(%r12),%xmm2
273
+ movdqa -80(%r12),%xmm3
274
+ pand -128(%rdx),%xmm0
275
+ pand -112(%rdx),%xmm1
276
+ por %xmm0,%xmm4
277
+ pand -96(%rdx),%xmm2
278
+ por %xmm1,%xmm5
279
+ pand -80(%rdx),%xmm3
280
+ por %xmm2,%xmm4
281
+ por %xmm3,%xmm5
282
+ movdqa -64(%r12),%xmm0
283
+ movdqa -48(%r12),%xmm1
284
+ movdqa -32(%r12),%xmm2
285
+ movdqa -16(%r12),%xmm3
286
+ pand -64(%rdx),%xmm0
287
+ pand -48(%rdx),%xmm1
288
+ por %xmm0,%xmm4
289
+ pand -32(%rdx),%xmm2
290
+ por %xmm1,%xmm5
291
+ pand -16(%rdx),%xmm3
292
+ por %xmm2,%xmm4
293
+ por %xmm3,%xmm5
294
+ movdqa 0(%r12),%xmm0
295
+ movdqa 16(%r12),%xmm1
296
+ movdqa 32(%r12),%xmm2
297
+ movdqa 48(%r12),%xmm3
298
+ pand 0(%rdx),%xmm0
299
+ pand 16(%rdx),%xmm1
300
+ por %xmm0,%xmm4
301
+ pand 32(%rdx),%xmm2
302
+ por %xmm1,%xmm5
303
+ pand 48(%rdx),%xmm3
304
+ por %xmm2,%xmm4
305
+ por %xmm3,%xmm5
306
+ movdqa 64(%r12),%xmm0
307
+ movdqa 80(%r12),%xmm1
308
+ movdqa 96(%r12),%xmm2
309
+ movdqa 112(%r12),%xmm3
310
+ pand 64(%rdx),%xmm0
311
+ pand 80(%rdx),%xmm1
312
+ por %xmm0,%xmm4
313
+ pand 96(%rdx),%xmm2
314
+ por %xmm1,%xmm5
315
+ pand 112(%rdx),%xmm3
316
+ por %xmm2,%xmm4
317
+ por %xmm3,%xmm5
318
+ por %xmm5,%xmm4
319
+ // Combine the upper and lower halves of %xmm4 as %xmm0.
320
+ pshufd $0x4e,%xmm4,%xmm0 // Swap upper and lower halves.
321
+ por %xmm4,%xmm0
322
+ leaq 256(%r12),%r12
323
+
324
+ movq (%rsi),%rax // ap[0]
325
+ movq %xmm0,%rbx // m0=bp[i]
326
+
327
+ xorq %r15,%r15 // j=0
328
+ movq %r8,%rbp
329
+ movq (%rsp),%r10
330
+
331
+ mulq %rbx // ap[0]*bp[i]
332
+ addq %rax,%r10 // ap[0]*bp[i]+tp[0]
333
+ movq (%rcx),%rax
334
+ adcq $0,%rdx
335
+
336
+ imulq %r10,%rbp // tp[0]*n0
337
+ movq %rdx,%r11
338
+
339
+ mulq %rbp // np[0]*m1
340
+ addq %rax,%r10 // discarded
341
+ movq 8(%rsi),%rax
342
+ adcq $0,%rdx
343
+ movq 8(%rsp),%r10 // tp[1]
344
+ movq %rdx,%r13
345
+
346
+ leaq 1(%r15),%r15 // j++
347
+ jmp L$inner_enter
348
+
349
+ .p2align 4
350
+ L$inner:
351
+ addq %rax,%r13
352
+ movq (%rsi,%r15,8),%rax
353
+ adcq $0,%rdx
354
+ addq %r10,%r13 // np[j]*m1+ap[j]*bp[i]+tp[j]
355
+ movq (%rsp,%r15,8),%r10
356
+ adcq $0,%rdx
357
+ movq %r13,-16(%rsp,%r15,8) // tp[j-1]
358
+ movq %rdx,%r13
359
+
360
+ L$inner_enter:
361
+ mulq %rbx // ap[j]*bp[i]
362
+ addq %rax,%r11
363
+ movq (%rcx,%r15,8),%rax
364
+ adcq $0,%rdx
365
+ addq %r11,%r10 // ap[j]*bp[i]+tp[j]
366
+ movq %rdx,%r11
367
+ adcq $0,%r11
368
+ leaq 1(%r15),%r15 // j++
369
+
370
+ mulq %rbp // np[j]*m1
371
+ cmpq %r9,%r15
372
+ jne L$inner // note that upon exit %r15==%r9, so
373
+ // they can be used interchangeably
374
+ addq %rax,%r13
375
+ adcq $0,%rdx
376
+ addq %r10,%r13 // np[j]*m1+ap[j]*bp[i]+tp[j]
377
+ movq (%rsp,%r9,8),%r10
378
+ adcq $0,%rdx
379
+ movq %r13,-16(%rsp,%r9,8) // tp[num-1]
380
+ movq %rdx,%r13
381
+
382
+ xorq %rdx,%rdx
383
+ addq %r11,%r13
384
+ adcq $0,%rdx
385
+ addq %r10,%r13 // pull upmost overflow bit
386
+ adcq $0,%rdx
387
+ movq %r13,-8(%rsp,%r9,8)
388
+ movq %rdx,(%rsp,%r9,8) // store upmost overflow bit
389
+
390
+ leaq 1(%r14),%r14 // i++
391
+ cmpq %r9,%r14
392
+ jb L$outer
393
+
394
+ xorq %r14,%r14 // i=0 and clear CF
395
+ movq (%rsp),%rax // tp[0]
396
+ leaq (%rsp),%rsi // borrow ap for tp
397
+ movq %r9,%r15 // j=num
398
+ jmp L$sub
399
+ .p2align 4
400
+ L$sub: sbbq (%rcx,%r14,8),%rax
401
+ movq %rax,(%rdi,%r14,8) // rp[i]=tp[i]-np[i]
402
+ movq 8(%rsi,%r14,8),%rax // tp[i+1]
403
+ leaq 1(%r14),%r14 // i++
404
+ decq %r15 // doesn't affect CF
405
+ jnz L$sub
406
+
407
+ sbbq $0,%rax // handle upmost overflow bit
408
+ movq $-1,%rbx
409
+ xorq %rax,%rbx
410
+ xorq %r14,%r14
411
+ movq %r9,%r15 // j=num
412
+
413
+ L$copy: // conditional copy
414
+ movq (%rdi,%r14,8),%rcx
415
+ movq (%rsp,%r14,8),%rdx
416
+ andq %rbx,%rcx
417
+ andq %rax,%rdx
418
+ movq %r14,(%rsp,%r14,8) // zap temporary vector
419
+ orq %rcx,%rdx
420
+ movq %rdx,(%rdi,%r14,8) // rp[i]=tp[i]
421
+ leaq 1(%r14),%r14
422
+ subq $1,%r15
423
+ jnz L$copy
424
+
425
+ movq 8(%rsp,%r9,8),%rsi // restore %rsp
426
+
427
+ movq $1,%rax
428
+
429
+ movq -48(%rsi),%r15
430
+
431
+ movq -40(%rsi),%r14
432
+
433
+ movq -32(%rsi),%r13
434
+
435
+ movq -24(%rsi),%r12
436
+
437
+ movq -16(%rsi),%rbp
438
+
439
+ movq -8(%rsi),%rbx
440
+
441
+ leaq (%rsi),%rsp
442
+
443
+ L$mul_epilogue:
444
+ ret
445
+
446
+
447
+ .globl _bn_mul4x_mont_gather5
448
+ .private_extern _bn_mul4x_mont_gather5
449
+
450
+ .p2align 5
451
+ .alt_entry _bn_mul4x_mont_gather5
452
+ _bn_mul4x_mont_gather5:
453
+
454
+ _CET_ENDBR
455
+ .byte 0x67
456
+ movq %rsp,%rax
457
+
458
+ pushq %rbx
459
+
460
+ pushq %rbp
461
+
462
+ pushq %r12
463
+
464
+ pushq %r13
465
+
466
+ pushq %r14
467
+
468
+ pushq %r15
469
+
470
+ L$mul4x_prologue:
471
+
472
+ .byte 0x67
473
+ // num is declared as an int, a 32-bit parameter, so the upper half is
474
+ // undefined. It is important that this write to %r9, which zeros the
475
+ // upper half, predates the first access.
476
+ shll $3,%r9d // convert %r9 to bytes
477
+ leaq (%r9,%r9,2),%r10 // 3*%r9 in bytes
478
+ negq %r9 // -%r9
479
+
480
+ // #############################################################
481
+ // Ensure that stack frame doesn't alias with +3*%r9
482
+ // modulo 4096, which covers ret[num], am[num] and n[num]
483
+ // (see bn_exp.c). This is done to allow memory disambiguation
484
+ // logic do its magic. [Extra [num] is allocated in order
485
+ // to align with bn_power5's frame, which is cleansed after
486
+ // completing exponentiation. Extra 256 bytes is for power mask
487
+ // calculated from 7th argument, the index.]
488
+ //
489
+ leaq -320(%rsp,%r9,2),%r11
490
+ movq %rsp,%rbp
491
+ subq %rdi,%r11
492
+ andq $4095,%r11
493
+ cmpq %r11,%r10
494
+ jb L$mul4xsp_alt
495
+ subq %r11,%rbp // align with %rdi
496
+ leaq -320(%rbp,%r9,2),%rbp // future alloca(frame+2*num*8+256)
497
+ jmp L$mul4xsp_done
498
+
499
+ .p2align 5
500
+ L$mul4xsp_alt:
501
+ leaq 4096-320(,%r9,2),%r10
502
+ leaq -320(%rbp,%r9,2),%rbp // future alloca(frame+2*num*8+256)
503
+ subq %r10,%r11
504
+ movq $0,%r10
505
+ cmovcq %r10,%r11
506
+ subq %r11,%rbp
507
+ L$mul4xsp_done:
508
+ andq $-64,%rbp
509
+ movq %rsp,%r11
510
+ subq %rbp,%r11
511
+ andq $-4096,%r11
512
+ leaq (%r11,%rbp,1),%rsp
513
+ movq (%rsp),%r10
514
+ cmpq %rbp,%rsp
515
+ ja L$mul4x_page_walk
516
+ jmp L$mul4x_page_walk_done
517
+
518
+ L$mul4x_page_walk:
519
+ leaq -4096(%rsp),%rsp
520
+ movq (%rsp),%r10
521
+ cmpq %rbp,%rsp
522
+ ja L$mul4x_page_walk
523
+ L$mul4x_page_walk_done:
524
+
525
+ negq %r9
526
+
527
+ movq %rax,40(%rsp)
528
+
529
+ L$mul4x_body:
530
+
531
+ call mul4x_internal
532
+
533
+ movq 40(%rsp),%rsi // restore %rsp
534
+
535
+ movq $1,%rax
536
+
537
+ movq -48(%rsi),%r15
538
+
539
+ movq -40(%rsi),%r14
540
+
541
+ movq -32(%rsi),%r13
542
+
543
+ movq -24(%rsi),%r12
544
+
545
+ movq -16(%rsi),%rbp
546
+
547
+ movq -8(%rsi),%rbx
548
+
549
+ leaq (%rsi),%rsp
550
+
551
+ L$mul4x_epilogue:
552
+ ret
553
+
554
+
555
+
556
+
557
+ .p2align 5
558
+ .alt_entry mul4x_internal
559
+ mul4x_internal:
560
+
561
+ shlq $5,%r9 // %r9 was in bytes
562
+ movd 8(%rax),%xmm5 // load 7th argument, index
563
+ leaq L$inc(%rip),%rax
564
+ leaq 128(%rdx,%r9,1),%r13 // end of powers table (+size optimization)
565
+ shrq $5,%r9 // restore %r9
566
+ movdqa 0(%rax),%xmm0 // 00000001000000010000000000000000
567
+ movdqa 16(%rax),%xmm1 // 00000002000000020000000200000002
568
+ leaq 88-112(%rsp,%r9,1),%r10 // place the mask after tp[num+1] (+ICache optimization)
569
+ leaq 128(%rdx),%r12 // size optimization
570
+
571
+ pshufd $0,%xmm5,%xmm5 // broadcast index
572
+ movdqa %xmm1,%xmm4
573
+ .byte 0x67,0x67
574
+ movdqa %xmm1,%xmm2
575
+ paddd %xmm0,%xmm1
576
+ pcmpeqd %xmm5,%xmm0 // compare to 1,0
577
+ .byte 0x67
578
+ movdqa %xmm4,%xmm3
579
+ paddd %xmm1,%xmm2
580
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
581
+ movdqa %xmm0,112(%r10)
582
+ movdqa %xmm4,%xmm0
583
+
584
+ paddd %xmm2,%xmm3
585
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
586
+ movdqa %xmm1,128(%r10)
587
+ movdqa %xmm4,%xmm1
588
+
589
+ paddd %xmm3,%xmm0
590
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
591
+ movdqa %xmm2,144(%r10)
592
+ movdqa %xmm4,%xmm2
593
+
594
+ paddd %xmm0,%xmm1
595
+ pcmpeqd %xmm5,%xmm0
596
+ movdqa %xmm3,160(%r10)
597
+ movdqa %xmm4,%xmm3
598
+ paddd %xmm1,%xmm2
599
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
600
+ movdqa %xmm0,176(%r10)
601
+ movdqa %xmm4,%xmm0
602
+
603
+ paddd %xmm2,%xmm3
604
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
605
+ movdqa %xmm1,192(%r10)
606
+ movdqa %xmm4,%xmm1
607
+
608
+ paddd %xmm3,%xmm0
609
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
610
+ movdqa %xmm2,208(%r10)
611
+ movdqa %xmm4,%xmm2
612
+
613
+ paddd %xmm0,%xmm1
614
+ pcmpeqd %xmm5,%xmm0
615
+ movdqa %xmm3,224(%r10)
616
+ movdqa %xmm4,%xmm3
617
+ paddd %xmm1,%xmm2
618
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
619
+ movdqa %xmm0,240(%r10)
620
+ movdqa %xmm4,%xmm0
621
+
622
+ paddd %xmm2,%xmm3
623
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
624
+ movdqa %xmm1,256(%r10)
625
+ movdqa %xmm4,%xmm1
626
+
627
+ paddd %xmm3,%xmm0
628
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
629
+ movdqa %xmm2,272(%r10)
630
+ movdqa %xmm4,%xmm2
631
+
632
+ paddd %xmm0,%xmm1
633
+ pcmpeqd %xmm5,%xmm0
634
+ movdqa %xmm3,288(%r10)
635
+ movdqa %xmm4,%xmm3
636
+ paddd %xmm1,%xmm2
637
+ pcmpeqd %xmm5,%xmm1
638
+ movdqa %xmm0,304(%r10)
639
+
640
+ paddd %xmm2,%xmm3
641
+ .byte 0x67
642
+ pcmpeqd %xmm5,%xmm2
643
+ movdqa %xmm1,320(%r10)
644
+
645
+ pcmpeqd %xmm5,%xmm3
646
+ movdqa %xmm2,336(%r10)
647
+ pand 64(%r12),%xmm0 // while it's still in register
648
+
649
+ pand 80(%r12),%xmm1
650
+ pand 96(%r12),%xmm2
651
+ movdqa %xmm3,352(%r10)
652
+ pand 112(%r12),%xmm3
653
+ por %xmm2,%xmm0
654
+ por %xmm3,%xmm1
655
+ movdqa -128(%r12),%xmm4
656
+ movdqa -112(%r12),%xmm5
657
+ movdqa -96(%r12),%xmm2
658
+ pand 112(%r10),%xmm4
659
+ movdqa -80(%r12),%xmm3
660
+ pand 128(%r10),%xmm5
661
+ por %xmm4,%xmm0
662
+ pand 144(%r10),%xmm2
663
+ por %xmm5,%xmm1
664
+ pand 160(%r10),%xmm3
665
+ por %xmm2,%xmm0
666
+ por %xmm3,%xmm1
667
+ movdqa -64(%r12),%xmm4
668
+ movdqa -48(%r12),%xmm5
669
+ movdqa -32(%r12),%xmm2
670
+ pand 176(%r10),%xmm4
671
+ movdqa -16(%r12),%xmm3
672
+ pand 192(%r10),%xmm5
673
+ por %xmm4,%xmm0
674
+ pand 208(%r10),%xmm2
675
+ por %xmm5,%xmm1
676
+ pand 224(%r10),%xmm3
677
+ por %xmm2,%xmm0
678
+ por %xmm3,%xmm1
679
+ movdqa 0(%r12),%xmm4
680
+ movdqa 16(%r12),%xmm5
681
+ movdqa 32(%r12),%xmm2
682
+ pand 240(%r10),%xmm4
683
+ movdqa 48(%r12),%xmm3
684
+ pand 256(%r10),%xmm5
685
+ por %xmm4,%xmm0
686
+ pand 272(%r10),%xmm2
687
+ por %xmm5,%xmm1
688
+ pand 288(%r10),%xmm3
689
+ por %xmm2,%xmm0
690
+ por %xmm3,%xmm1
691
+ por %xmm1,%xmm0
692
+ // Combine the upper and lower halves of %xmm0.
693
+ pshufd $0x4e,%xmm0,%xmm1 // Swap upper and lower halves.
694
+ por %xmm1,%xmm0
695
+ leaq 256(%r12),%r12
696
+ movq %xmm0,%rbx // m0=bp[0]
697
+
698
+ movq %r13,16+8(%rsp) // save end of b[num]
699
+ movq %rdi,56+8(%rsp) // save %rdi
700
+
701
+ movq (%r8),%r8 // pull n0[0] value
702
+ movq (%rsi),%rax
703
+ leaq (%rsi,%r9,1),%rsi // end of a[num]
704
+ negq %r9
705
+
706
+ movq %r8,%rbp
707
+ mulq %rbx // ap[0]*bp[0]
708
+ movq %rax,%r10
709
+ movq (%rcx),%rax
710
+
711
+ imulq %r10,%rbp // "tp[0]"*n0
712
+ leaq 64+8(%rsp),%r14
713
+ movq %rdx,%r11
714
+
715
+ mulq %rbp // np[0]*m1
716
+ addq %rax,%r10 // discarded
717
+ movq 8(%rsi,%r9,1),%rax
718
+ adcq $0,%rdx
719
+ movq %rdx,%rdi
720
+
721
+ mulq %rbx
722
+ addq %rax,%r11
723
+ movq 8(%rcx),%rax
724
+ adcq $0,%rdx
725
+ movq %rdx,%r10
726
+
727
+ mulq %rbp
728
+ addq %rax,%rdi
729
+ movq 16(%rsi,%r9,1),%rax
730
+ adcq $0,%rdx
731
+ addq %r11,%rdi
732
+ leaq 32(%r9),%r15 // j=4
733
+ leaq 32(%rcx),%rcx
734
+ adcq $0,%rdx
735
+ movq %rdi,(%r14)
736
+ movq %rdx,%r13
737
+ jmp L$1st4x
738
+
739
+ .p2align 5
740
+ L$1st4x:
741
+ mulq %rbx // ap[j]*bp[0]
742
+ addq %rax,%r10
743
+ movq -16(%rcx),%rax
744
+ leaq 32(%r14),%r14
745
+ adcq $0,%rdx
746
+ movq %rdx,%r11
747
+
748
+ mulq %rbp // np[j]*m1
749
+ addq %rax,%r13
750
+ movq -8(%rsi,%r15,1),%rax
751
+ adcq $0,%rdx
752
+ addq %r10,%r13 // np[j]*m1+ap[j]*bp[0]
753
+ adcq $0,%rdx
754
+ movq %r13,-24(%r14) // tp[j-1]
755
+ movq %rdx,%rdi
756
+
757
+ mulq %rbx // ap[j]*bp[0]
758
+ addq %rax,%r11
759
+ movq -8(%rcx),%rax
760
+ adcq $0,%rdx
761
+ movq %rdx,%r10
762
+
763
+ mulq %rbp // np[j]*m1
764
+ addq %rax,%rdi
765
+ movq (%rsi,%r15,1),%rax
766
+ adcq $0,%rdx
767
+ addq %r11,%rdi // np[j]*m1+ap[j]*bp[0]
768
+ adcq $0,%rdx
769
+ movq %rdi,-16(%r14) // tp[j-1]
770
+ movq %rdx,%r13
771
+
772
+ mulq %rbx // ap[j]*bp[0]
773
+ addq %rax,%r10
774
+ movq 0(%rcx),%rax
775
+ adcq $0,%rdx
776
+ movq %rdx,%r11
777
+
778
+ mulq %rbp // np[j]*m1
779
+ addq %rax,%r13
780
+ movq 8(%rsi,%r15,1),%rax
781
+ adcq $0,%rdx
782
+ addq %r10,%r13 // np[j]*m1+ap[j]*bp[0]
783
+ adcq $0,%rdx
784
+ movq %r13,-8(%r14) // tp[j-1]
785
+ movq %rdx,%rdi
786
+
787
+ mulq %rbx // ap[j]*bp[0]
788
+ addq %rax,%r11
789
+ movq 8(%rcx),%rax
790
+ adcq $0,%rdx
791
+ movq %rdx,%r10
792
+
793
+ mulq %rbp // np[j]*m1
794
+ addq %rax,%rdi
795
+ movq 16(%rsi,%r15,1),%rax
796
+ adcq $0,%rdx
797
+ addq %r11,%rdi // np[j]*m1+ap[j]*bp[0]
798
+ leaq 32(%rcx),%rcx
799
+ adcq $0,%rdx
800
+ movq %rdi,(%r14) // tp[j-1]
801
+ movq %rdx,%r13
802
+
803
+ addq $32,%r15 // j+=4
804
+ jnz L$1st4x
805
+
806
+ mulq %rbx // ap[j]*bp[0]
807
+ addq %rax,%r10
808
+ movq -16(%rcx),%rax
809
+ leaq 32(%r14),%r14
810
+ adcq $0,%rdx
811
+ movq %rdx,%r11
812
+
813
+ mulq %rbp // np[j]*m1
814
+ addq %rax,%r13
815
+ movq -8(%rsi),%rax
816
+ adcq $0,%rdx
817
+ addq %r10,%r13 // np[j]*m1+ap[j]*bp[0]
818
+ adcq $0,%rdx
819
+ movq %r13,-24(%r14) // tp[j-1]
820
+ movq %rdx,%rdi
821
+
822
+ mulq %rbx // ap[j]*bp[0]
823
+ addq %rax,%r11
824
+ movq -8(%rcx),%rax
825
+ adcq $0,%rdx
826
+ movq %rdx,%r10
827
+
828
+ mulq %rbp // np[j]*m1
829
+ addq %rax,%rdi
830
+ movq (%rsi,%r9,1),%rax // ap[0]
831
+ adcq $0,%rdx
832
+ addq %r11,%rdi // np[j]*m1+ap[j]*bp[0]
833
+ adcq $0,%rdx
834
+ movq %rdi,-16(%r14) // tp[j-1]
835
+ movq %rdx,%r13
836
+
837
+ leaq (%rcx,%r9,1),%rcx // rewind %rcx
838
+
839
+ xorq %rdi,%rdi
840
+ addq %r10,%r13
841
+ adcq $0,%rdi
842
+ movq %r13,-8(%r14)
843
+
844
+ jmp L$outer4x
845
+
846
+ .p2align 5
847
+ L$outer4x:
848
+ leaq 16+128(%r14),%rdx // where 256-byte mask is (+size optimization)
849
+ pxor %xmm4,%xmm4
850
+ pxor %xmm5,%xmm5
851
+ movdqa -128(%r12),%xmm0
852
+ movdqa -112(%r12),%xmm1
853
+ movdqa -96(%r12),%xmm2
854
+ movdqa -80(%r12),%xmm3
855
+ pand -128(%rdx),%xmm0
856
+ pand -112(%rdx),%xmm1
857
+ por %xmm0,%xmm4
858
+ pand -96(%rdx),%xmm2
859
+ por %xmm1,%xmm5
860
+ pand -80(%rdx),%xmm3
861
+ por %xmm2,%xmm4
862
+ por %xmm3,%xmm5
863
+ movdqa -64(%r12),%xmm0
864
+ movdqa -48(%r12),%xmm1
865
+ movdqa -32(%r12),%xmm2
866
+ movdqa -16(%r12),%xmm3
867
+ pand -64(%rdx),%xmm0
868
+ pand -48(%rdx),%xmm1
869
+ por %xmm0,%xmm4
870
+ pand -32(%rdx),%xmm2
871
+ por %xmm1,%xmm5
872
+ pand -16(%rdx),%xmm3
873
+ por %xmm2,%xmm4
874
+ por %xmm3,%xmm5
875
+ movdqa 0(%r12),%xmm0
876
+ movdqa 16(%r12),%xmm1
877
+ movdqa 32(%r12),%xmm2
878
+ movdqa 48(%r12),%xmm3
879
+ pand 0(%rdx),%xmm0
880
+ pand 16(%rdx),%xmm1
881
+ por %xmm0,%xmm4
882
+ pand 32(%rdx),%xmm2
883
+ por %xmm1,%xmm5
884
+ pand 48(%rdx),%xmm3
885
+ por %xmm2,%xmm4
886
+ por %xmm3,%xmm5
887
+ movdqa 64(%r12),%xmm0
888
+ movdqa 80(%r12),%xmm1
889
+ movdqa 96(%r12),%xmm2
890
+ movdqa 112(%r12),%xmm3
891
+ pand 64(%rdx),%xmm0
892
+ pand 80(%rdx),%xmm1
893
+ por %xmm0,%xmm4
894
+ pand 96(%rdx),%xmm2
895
+ por %xmm1,%xmm5
896
+ pand 112(%rdx),%xmm3
897
+ por %xmm2,%xmm4
898
+ por %xmm3,%xmm5
899
+ por %xmm5,%xmm4
900
+ // Combine the upper and lower halves of %xmm4 as %xmm0.
901
+ pshufd $0x4e,%xmm4,%xmm0 // Swap upper and lower halves.
902
+ por %xmm4,%xmm0
903
+ leaq 256(%r12),%r12
904
+ movq %xmm0,%rbx // m0=bp[i]
905
+
906
+ movq (%r14,%r9,1),%r10
907
+ movq %r8,%rbp
908
+ mulq %rbx // ap[0]*bp[i]
909
+ addq %rax,%r10 // ap[0]*bp[i]+tp[0]
910
+ movq (%rcx),%rax
911
+ adcq $0,%rdx
912
+
913
+ imulq %r10,%rbp // tp[0]*n0
914
+ movq %rdx,%r11
915
+ movq %rdi,(%r14) // store upmost overflow bit
916
+
917
+ leaq (%r14,%r9,1),%r14 // rewind %r14
918
+
919
+ mulq %rbp // np[0]*m1
920
+ addq %rax,%r10 // "%r13", discarded
921
+ movq 8(%rsi,%r9,1),%rax
922
+ adcq $0,%rdx
923
+ movq %rdx,%rdi
924
+
925
+ mulq %rbx // ap[j]*bp[i]
926
+ addq %rax,%r11
927
+ movq 8(%rcx),%rax
928
+ adcq $0,%rdx
929
+ addq 8(%r14),%r11 // +tp[1]
930
+ adcq $0,%rdx
931
+ movq %rdx,%r10
932
+
933
+ mulq %rbp // np[j]*m1
934
+ addq %rax,%rdi
935
+ movq 16(%rsi,%r9,1),%rax
936
+ adcq $0,%rdx
937
+ addq %r11,%rdi // np[j]*m1+ap[j]*bp[i]+tp[j]
938
+ leaq 32(%r9),%r15 // j=4
939
+ leaq 32(%rcx),%rcx
940
+ adcq $0,%rdx
941
+ movq %rdx,%r13
942
+ jmp L$inner4x
943
+
944
+ .p2align 5
945
+ L$inner4x:
946
+ mulq %rbx // ap[j]*bp[i]
947
+ addq %rax,%r10
948
+ movq -16(%rcx),%rax
949
+ adcq $0,%rdx
950
+ addq 16(%r14),%r10 // ap[j]*bp[i]+tp[j]
951
+ leaq 32(%r14),%r14
952
+ adcq $0,%rdx
953
+ movq %rdx,%r11
954
+
955
+ mulq %rbp // np[j]*m1
956
+ addq %rax,%r13
957
+ movq -8(%rsi,%r15,1),%rax
958
+ adcq $0,%rdx
959
+ addq %r10,%r13
960
+ adcq $0,%rdx
961
+ movq %rdi,-32(%r14) // tp[j-1]
962
+ movq %rdx,%rdi
963
+
964
+ mulq %rbx // ap[j]*bp[i]
965
+ addq %rax,%r11
966
+ movq -8(%rcx),%rax
967
+ adcq $0,%rdx
968
+ addq -8(%r14),%r11
969
+ adcq $0,%rdx
970
+ movq %rdx,%r10
971
+
972
+ mulq %rbp // np[j]*m1
973
+ addq %rax,%rdi
974
+ movq (%rsi,%r15,1),%rax
975
+ adcq $0,%rdx
976
+ addq %r11,%rdi
977
+ adcq $0,%rdx
978
+ movq %r13,-24(%r14) // tp[j-1]
979
+ movq %rdx,%r13
980
+
981
+ mulq %rbx // ap[j]*bp[i]
982
+ addq %rax,%r10
983
+ movq 0(%rcx),%rax
984
+ adcq $0,%rdx
985
+ addq (%r14),%r10 // ap[j]*bp[i]+tp[j]
986
+ adcq $0,%rdx
987
+ movq %rdx,%r11
988
+
989
+ mulq %rbp // np[j]*m1
990
+ addq %rax,%r13
991
+ movq 8(%rsi,%r15,1),%rax
992
+ adcq $0,%rdx
993
+ addq %r10,%r13
994
+ adcq $0,%rdx
995
+ movq %rdi,-16(%r14) // tp[j-1]
996
+ movq %rdx,%rdi
997
+
998
+ mulq %rbx // ap[j]*bp[i]
999
+ addq %rax,%r11
1000
+ movq 8(%rcx),%rax
1001
+ adcq $0,%rdx
1002
+ addq 8(%r14),%r11
1003
+ adcq $0,%rdx
1004
+ movq %rdx,%r10
1005
+
1006
+ mulq %rbp // np[j]*m1
1007
+ addq %rax,%rdi
1008
+ movq 16(%rsi,%r15,1),%rax
1009
+ adcq $0,%rdx
1010
+ addq %r11,%rdi
1011
+ leaq 32(%rcx),%rcx
1012
+ adcq $0,%rdx
1013
+ movq %r13,-8(%r14) // tp[j-1]
1014
+ movq %rdx,%r13
1015
+
1016
+ addq $32,%r15 // j+=4
1017
+ jnz L$inner4x
1018
+
1019
+ mulq %rbx // ap[j]*bp[i]
1020
+ addq %rax,%r10
1021
+ movq -16(%rcx),%rax
1022
+ adcq $0,%rdx
1023
+ addq 16(%r14),%r10 // ap[j]*bp[i]+tp[j]
1024
+ leaq 32(%r14),%r14
1025
+ adcq $0,%rdx
1026
+ movq %rdx,%r11
1027
+
1028
+ mulq %rbp // np[j]*m1
1029
+ addq %rax,%r13
1030
+ movq -8(%rsi),%rax
1031
+ adcq $0,%rdx
1032
+ addq %r10,%r13
1033
+ adcq $0,%rdx
1034
+ movq %rdi,-32(%r14) // tp[j-1]
1035
+ movq %rdx,%rdi
1036
+
1037
+ mulq %rbx // ap[j]*bp[i]
1038
+ addq %rax,%r11
1039
+ movq %rbp,%rax
1040
+ movq -8(%rcx),%rbp
1041
+ adcq $0,%rdx
1042
+ addq -8(%r14),%r11
1043
+ adcq $0,%rdx
1044
+ movq %rdx,%r10
1045
+
1046
+ mulq %rbp // np[j]*m1
1047
+ addq %rax,%rdi
1048
+ movq (%rsi,%r9,1),%rax // ap[0]
1049
+ adcq $0,%rdx
1050
+ addq %r11,%rdi
1051
+ adcq $0,%rdx
1052
+ movq %r13,-24(%r14) // tp[j-1]
1053
+ movq %rdx,%r13
1054
+
1055
+ movq %rdi,-16(%r14) // tp[j-1]
1056
+ leaq (%rcx,%r9,1),%rcx // rewind %rcx
1057
+
1058
+ xorq %rdi,%rdi
1059
+ addq %r10,%r13
1060
+ adcq $0,%rdi
1061
+ addq (%r14),%r13 // pull upmost overflow bit
1062
+ adcq $0,%rdi // upmost overflow bit
1063
+ movq %r13,-8(%r14)
1064
+
1065
+ cmpq 16+8(%rsp),%r12
1066
+ jb L$outer4x
1067
+ xorq %rax,%rax
1068
+ subq %r13,%rbp // compare top-most words
1069
+ adcq %r15,%r15 // %r15 is zero
1070
+ orq %r15,%rdi
1071
+ subq %rdi,%rax // %rax=-%rdi
1072
+ leaq (%r14,%r9,1),%rbx // tptr in .sqr4x_sub
1073
+ movq (%rcx),%r12
1074
+ leaq (%rcx),%rbp // nptr in .sqr4x_sub
1075
+ movq %r9,%rcx
1076
+ sarq $3+2,%rcx
1077
+ movq 56+8(%rsp),%rdi // rptr in .sqr4x_sub
1078
+ decq %r12 // so that after 'not' we get -n[0]
1079
+ xorq %r10,%r10
1080
+ movq 8(%rbp),%r13
1081
+ movq 16(%rbp),%r14
1082
+ movq 24(%rbp),%r15
1083
+ jmp L$sqr4x_sub_entry
1084
+
1085
+
1086
+ .globl _bn_power5_nohw
1087
+ .private_extern _bn_power5_nohw
1088
+
1089
+ .p2align 5
1090
+ .alt_entry _bn_power5_nohw
1091
+ _bn_power5_nohw:
1092
+
1093
+ _CET_ENDBR
1094
+ movq %rsp,%rax
1095
+
1096
+ pushq %rbx
1097
+
1098
+ pushq %rbp
1099
+
1100
+ pushq %r12
1101
+
1102
+ pushq %r13
1103
+
1104
+ pushq %r14
1105
+
1106
+ pushq %r15
1107
+
1108
+ L$power5_prologue:
1109
+
1110
+ // num is declared as an int, a 32-bit parameter, so the upper half is
1111
+ // undefined. It is important that this write to %r9, which zeros the
1112
+ // upper half, come before the first access.
1113
+ shll $3,%r9d // convert %r9 to bytes
1114
+ leal (%r9,%r9,2),%r10d // 3*%r9
1115
+ negq %r9
1116
+ movq (%r8),%r8 // *n0
1117
+
1118
+ // #############################################################
1119
+ // Ensure that stack frame doesn't alias with %rdi+3*%r9
1120
+ // modulo 4096, which covers ret[num], am[num] and n[num]
1121
+ // (see bn_exp.c). This is done to allow memory disambiguation
1122
+ // logic do its magic. [Extra 256 bytes is for power mask
1123
+ // calculated from 7th argument, the index.]
1124
+ //
1125
+ leaq -320(%rsp,%r9,2),%r11
1126
+ movq %rsp,%rbp
1127
+ subq %rdi,%r11
1128
+ andq $4095,%r11
1129
+ cmpq %r11,%r10
1130
+ jb L$pwr_sp_alt
1131
+ subq %r11,%rbp // align with %rsi
1132
+ leaq -320(%rbp,%r9,2),%rbp // future alloca(frame+2*num*8+256)
1133
+ jmp L$pwr_sp_done
1134
+
1135
+ .p2align 5
1136
+ L$pwr_sp_alt:
1137
+ leaq 4096-320(,%r9,2),%r10
1138
+ leaq -320(%rbp,%r9,2),%rbp // future alloca(frame+2*num*8+256)
1139
+ subq %r10,%r11
1140
+ movq $0,%r10
1141
+ cmovcq %r10,%r11
1142
+ subq %r11,%rbp
1143
+ L$pwr_sp_done:
1144
+ andq $-64,%rbp
1145
+ movq %rsp,%r11
1146
+ subq %rbp,%r11
1147
+ andq $-4096,%r11
1148
+ leaq (%r11,%rbp,1),%rsp
1149
+ movq (%rsp),%r10
1150
+ cmpq %rbp,%rsp
1151
+ ja L$pwr_page_walk
1152
+ jmp L$pwr_page_walk_done
1153
+
1154
+ L$pwr_page_walk:
1155
+ leaq -4096(%rsp),%rsp
1156
+ movq (%rsp),%r10
1157
+ cmpq %rbp,%rsp
1158
+ ja L$pwr_page_walk
1159
+ L$pwr_page_walk_done:
1160
+
1161
+ movq %r9,%r10
1162
+ negq %r9
1163
+
1164
+ // #############################################################
1165
+ // Stack layout
1166
+ //
1167
+ // +0 saved %r9, used in reduction section
1168
+ // +8 &t[2*%r9], used in reduction section
1169
+ // +32 saved *n0
1170
+ // +40 saved %rsp
1171
+ // +48 t[2*%r9]
1172
+ //
1173
+ movq %r8,32(%rsp)
1174
+ movq %rax,40(%rsp) // save original %rsp
1175
+
1176
+ L$power5_body:
1177
+ movq %rdi,%xmm1 // save %rdi, used in sqr8x
1178
+ movq %rcx,%xmm2 // save %rcx
1179
+ movq %r10,%xmm3 // -%r9, used in sqr8x
1180
+ movq %rdx,%xmm4
1181
+
1182
+ call __bn_sqr8x_internal
1183
+ call __bn_post4x_internal
1184
+ call __bn_sqr8x_internal
1185
+ call __bn_post4x_internal
1186
+ call __bn_sqr8x_internal
1187
+ call __bn_post4x_internal
1188
+ call __bn_sqr8x_internal
1189
+ call __bn_post4x_internal
1190
+ call __bn_sqr8x_internal
1191
+ call __bn_post4x_internal
1192
+
1193
+ movq %xmm2,%rcx
1194
+ movq %xmm4,%rdx
1195
+ movq %rsi,%rdi
1196
+ movq 40(%rsp),%rax
1197
+ leaq 32(%rsp),%r8
1198
+
1199
+ call mul4x_internal
1200
+
1201
+ movq 40(%rsp),%rsi // restore %rsp
1202
+
1203
+ movq $1,%rax
1204
+ movq -48(%rsi),%r15
1205
+
1206
+ movq -40(%rsi),%r14
1207
+
1208
+ movq -32(%rsi),%r13
1209
+
1210
+ movq -24(%rsi),%r12
1211
+
1212
+ movq -16(%rsi),%rbp
1213
+
1214
+ movq -8(%rsi),%rbx
1215
+
1216
+ leaq (%rsi),%rsp
1217
+
1218
+ L$power5_epilogue:
1219
+ ret
1220
+
1221
+
1222
+
1223
+ .globl _bn_sqr8x_internal
1224
+ .private_extern _bn_sqr8x_internal
1225
+ .private_extern _bn_sqr8x_internal
1226
+
1227
+ .p2align 5
1228
+ .alt_entry _bn_sqr8x_internal
1229
+ _bn_sqr8x_internal:
1230
+ .alt_entry __bn_sqr8x_internal
1231
+ __bn_sqr8x_internal:
1232
+
1233
+ _CET_ENDBR
1234
+ // #############################################################
1235
+ // Squaring part:
1236
+ //
1237
+ // a) multiply-n-add everything but a[i]*a[i];
1238
+ // b) shift result of a) by 1 to the left and accumulate
1239
+ // a[i]*a[i] products;
1240
+ //
1241
+ // #############################################################
1242
+ // a[1]a[0]
1243
+ // a[2]a[0]
1244
+ // a[3]a[0]
1245
+ // a[2]a[1]
1246
+ // a[4]a[0]
1247
+ // a[3]a[1]
1248
+ // a[5]a[0]
1249
+ // a[4]a[1]
1250
+ // a[3]a[2]
1251
+ // a[6]a[0]
1252
+ // a[5]a[1]
1253
+ // a[4]a[2]
1254
+ // a[7]a[0]
1255
+ // a[6]a[1]
1256
+ // a[5]a[2]
1257
+ // a[4]a[3]
1258
+ // a[7]a[1]
1259
+ // a[6]a[2]
1260
+ // a[5]a[3]
1261
+ // a[7]a[2]
1262
+ // a[6]a[3]
1263
+ // a[5]a[4]
1264
+ // a[7]a[3]
1265
+ // a[6]a[4]
1266
+ // a[7]a[4]
1267
+ // a[6]a[5]
1268
+ // a[7]a[5]
1269
+ // a[7]a[6]
1270
+ // a[1]a[0]
1271
+ // a[2]a[0]
1272
+ // a[3]a[0]
1273
+ // a[4]a[0]
1274
+ // a[5]a[0]
1275
+ // a[6]a[0]
1276
+ // a[7]a[0]
1277
+ // a[2]a[1]
1278
+ // a[3]a[1]
1279
+ // a[4]a[1]
1280
+ // a[5]a[1]
1281
+ // a[6]a[1]
1282
+ // a[7]a[1]
1283
+ // a[3]a[2]
1284
+ // a[4]a[2]
1285
+ // a[5]a[2]
1286
+ // a[6]a[2]
1287
+ // a[7]a[2]
1288
+ // a[4]a[3]
1289
+ // a[5]a[3]
1290
+ // a[6]a[3]
1291
+ // a[7]a[3]
1292
+ // a[5]a[4]
1293
+ // a[6]a[4]
1294
+ // a[7]a[4]
1295
+ // a[6]a[5]
1296
+ // a[7]a[5]
1297
+ // a[7]a[6]
1298
+ // a[0]a[0]
1299
+ // a[1]a[1]
1300
+ // a[2]a[2]
1301
+ // a[3]a[3]
1302
+ // a[4]a[4]
1303
+ // a[5]a[5]
1304
+ // a[6]a[6]
1305
+ // a[7]a[7]
1306
+
1307
+ leaq 32(%r10),%rbp // %rbp=-(%r9-32)
1308
+ leaq (%rsi,%r9,1),%rsi // end of a[] buffer, (%rsi,%rbp)=&ap[2]
1309
+
1310
+ movq %r9,%rcx // %rcx=%r9
1311
+
1312
+ // comments apply to %r9==8 case
1313
+ movq -32(%rsi,%rbp,1),%r14 // a[0]
1314
+ leaq 48+8(%rsp,%r9,2),%rdi // end of tp[] buffer, &tp[2*%r9]
1315
+ movq -24(%rsi,%rbp,1),%rax // a[1]
1316
+ leaq -32(%rdi,%rbp,1),%rdi // end of tp[] window, &tp[2*%r9-"%rbp"]
1317
+ movq -16(%rsi,%rbp,1),%rbx // a[2]
1318
+ movq %rax,%r15
1319
+
1320
+ mulq %r14 // a[1]*a[0]
1321
+ movq %rax,%r10 // a[1]*a[0]
1322
+ movq %rbx,%rax // a[2]
1323
+ movq %rdx,%r11
1324
+ movq %r10,-24(%rdi,%rbp,1) // t[1]
1325
+
1326
+ mulq %r14 // a[2]*a[0]
1327
+ addq %rax,%r11
1328
+ movq %rbx,%rax
1329
+ adcq $0,%rdx
1330
+ movq %r11,-16(%rdi,%rbp,1) // t[2]
1331
+ movq %rdx,%r10
1332
+
1333
+
1334
+ movq -8(%rsi,%rbp,1),%rbx // a[3]
1335
+ mulq %r15 // a[2]*a[1]
1336
+ movq %rax,%r12 // a[2]*a[1]+t[3]
1337
+ movq %rbx,%rax
1338
+ movq %rdx,%r13
1339
+
1340
+ leaq (%rbp),%rcx
1341
+ mulq %r14 // a[3]*a[0]
1342
+ addq %rax,%r10 // a[3]*a[0]+a[2]*a[1]+t[3]
1343
+ movq %rbx,%rax
1344
+ movq %rdx,%r11
1345
+ adcq $0,%r11
1346
+ addq %r12,%r10
1347
+ adcq $0,%r11
1348
+ movq %r10,-8(%rdi,%rcx,1) // t[3]
1349
+ jmp L$sqr4x_1st
1350
+
1351
+ .p2align 5
1352
+ L$sqr4x_1st:
1353
+ movq (%rsi,%rcx,1),%rbx // a[4]
1354
+ mulq %r15 // a[3]*a[1]
1355
+ addq %rax,%r13 // a[3]*a[1]+t[4]
1356
+ movq %rbx,%rax
1357
+ movq %rdx,%r12
1358
+ adcq $0,%r12
1359
+
1360
+ mulq %r14 // a[4]*a[0]
1361
+ addq %rax,%r11 // a[4]*a[0]+a[3]*a[1]+t[4]
1362
+ movq %rbx,%rax // a[3]
1363
+ movq 8(%rsi,%rcx,1),%rbx // a[5]
1364
+ movq %rdx,%r10
1365
+ adcq $0,%r10
1366
+ addq %r13,%r11
1367
+ adcq $0,%r10
1368
+
1369
+
1370
+ mulq %r15 // a[4]*a[3]
1371
+ addq %rax,%r12 // a[4]*a[3]+t[5]
1372
+ movq %rbx,%rax
1373
+ movq %r11,(%rdi,%rcx,1) // t[4]
1374
+ movq %rdx,%r13
1375
+ adcq $0,%r13
1376
+
1377
+ mulq %r14 // a[5]*a[2]
1378
+ addq %rax,%r10 // a[5]*a[2]+a[4]*a[3]+t[5]
1379
+ movq %rbx,%rax
1380
+ movq 16(%rsi,%rcx,1),%rbx // a[6]
1381
+ movq %rdx,%r11
1382
+ adcq $0,%r11
1383
+ addq %r12,%r10
1384
+ adcq $0,%r11
1385
+
1386
+ mulq %r15 // a[5]*a[3]
1387
+ addq %rax,%r13 // a[5]*a[3]+t[6]
1388
+ movq %rbx,%rax
1389
+ movq %r10,8(%rdi,%rcx,1) // t[5]
1390
+ movq %rdx,%r12
1391
+ adcq $0,%r12
1392
+
1393
+ mulq %r14 // a[6]*a[2]
1394
+ addq %rax,%r11 // a[6]*a[2]+a[5]*a[3]+t[6]
1395
+ movq %rbx,%rax // a[3]
1396
+ movq 24(%rsi,%rcx,1),%rbx // a[7]
1397
+ movq %rdx,%r10
1398
+ adcq $0,%r10
1399
+ addq %r13,%r11
1400
+ adcq $0,%r10
1401
+
1402
+
1403
+ mulq %r15 // a[6]*a[5]
1404
+ addq %rax,%r12 // a[6]*a[5]+t[7]
1405
+ movq %rbx,%rax
1406
+ movq %r11,16(%rdi,%rcx,1) // t[6]
1407
+ movq %rdx,%r13
1408
+ adcq $0,%r13
1409
+ leaq 32(%rcx),%rcx
1410
+
1411
+ mulq %r14 // a[7]*a[4]
1412
+ addq %rax,%r10 // a[7]*a[4]+a[6]*a[5]+t[6]
1413
+ movq %rbx,%rax
1414
+ movq %rdx,%r11
1415
+ adcq $0,%r11
1416
+ addq %r12,%r10
1417
+ adcq $0,%r11
1418
+ movq %r10,-8(%rdi,%rcx,1) // t[7]
1419
+
1420
+ cmpq $0,%rcx
1421
+ jne L$sqr4x_1st
1422
+
1423
+ mulq %r15 // a[7]*a[5]
1424
+ addq %rax,%r13
1425
+ leaq 16(%rbp),%rbp
1426
+ adcq $0,%rdx
1427
+ addq %r11,%r13
1428
+ adcq $0,%rdx
1429
+
1430
+ movq %r13,(%rdi) // t[8]
1431
+ movq %rdx,%r12
1432
+ movq %rdx,8(%rdi) // t[9]
1433
+ jmp L$sqr4x_outer
1434
+
1435
+ .p2align 5
1436
+ L$sqr4x_outer: // comments apply to %r9==6 case
1437
+ movq -32(%rsi,%rbp,1),%r14 // a[0]
1438
+ leaq 48+8(%rsp,%r9,2),%rdi // end of tp[] buffer, &tp[2*%r9]
1439
+ movq -24(%rsi,%rbp,1),%rax // a[1]
1440
+ leaq -32(%rdi,%rbp,1),%rdi // end of tp[] window, &tp[2*%r9-"%rbp"]
1441
+ movq -16(%rsi,%rbp,1),%rbx // a[2]
1442
+ movq %rax,%r15
1443
+
1444
+ mulq %r14 // a[1]*a[0]
1445
+ movq -24(%rdi,%rbp,1),%r10 // t[1]
1446
+ addq %rax,%r10 // a[1]*a[0]+t[1]
1447
+ movq %rbx,%rax // a[2]
1448
+ adcq $0,%rdx
1449
+ movq %r10,-24(%rdi,%rbp,1) // t[1]
1450
+ movq %rdx,%r11
1451
+
1452
+ mulq %r14 // a[2]*a[0]
1453
+ addq %rax,%r11
1454
+ movq %rbx,%rax
1455
+ adcq $0,%rdx
1456
+ addq -16(%rdi,%rbp,1),%r11 // a[2]*a[0]+t[2]
1457
+ movq %rdx,%r10
1458
+ adcq $0,%r10
1459
+ movq %r11,-16(%rdi,%rbp,1) // t[2]
1460
+
1461
+ xorq %r12,%r12
1462
+
1463
+ movq -8(%rsi,%rbp,1),%rbx // a[3]
1464
+ mulq %r15 // a[2]*a[1]
1465
+ addq %rax,%r12 // a[2]*a[1]+t[3]
1466
+ movq %rbx,%rax
1467
+ adcq $0,%rdx
1468
+ addq -8(%rdi,%rbp,1),%r12
1469
+ movq %rdx,%r13
1470
+ adcq $0,%r13
1471
+
1472
+ mulq %r14 // a[3]*a[0]
1473
+ addq %rax,%r10 // a[3]*a[0]+a[2]*a[1]+t[3]
1474
+ movq %rbx,%rax
1475
+ adcq $0,%rdx
1476
+ addq %r12,%r10
1477
+ movq %rdx,%r11
1478
+ adcq $0,%r11
1479
+ movq %r10,-8(%rdi,%rbp,1) // t[3]
1480
+
1481
+ leaq (%rbp),%rcx
1482
+ jmp L$sqr4x_inner
1483
+
1484
+ .p2align 5
1485
+ L$sqr4x_inner:
1486
+ movq (%rsi,%rcx,1),%rbx // a[4]
1487
+ mulq %r15 // a[3]*a[1]
1488
+ addq %rax,%r13 // a[3]*a[1]+t[4]
1489
+ movq %rbx,%rax
1490
+ movq %rdx,%r12
1491
+ adcq $0,%r12
1492
+ addq (%rdi,%rcx,1),%r13
1493
+ adcq $0,%r12
1494
+
1495
+ .byte 0x67
1496
+ mulq %r14 // a[4]*a[0]
1497
+ addq %rax,%r11 // a[4]*a[0]+a[3]*a[1]+t[4]
1498
+ movq %rbx,%rax // a[3]
1499
+ movq 8(%rsi,%rcx,1),%rbx // a[5]
1500
+ movq %rdx,%r10
1501
+ adcq $0,%r10
1502
+ addq %r13,%r11
1503
+ adcq $0,%r10
1504
+
1505
+ mulq %r15 // a[4]*a[3]
1506
+ addq %rax,%r12 // a[4]*a[3]+t[5]
1507
+ movq %r11,(%rdi,%rcx,1) // t[4]
1508
+ movq %rbx,%rax
1509
+ movq %rdx,%r13
1510
+ adcq $0,%r13
1511
+ addq 8(%rdi,%rcx,1),%r12
1512
+ leaq 16(%rcx),%rcx // j++
1513
+ adcq $0,%r13
1514
+
1515
+ mulq %r14 // a[5]*a[2]
1516
+ addq %rax,%r10 // a[5]*a[2]+a[4]*a[3]+t[5]
1517
+ movq %rbx,%rax
1518
+ adcq $0,%rdx
1519
+ addq %r12,%r10
1520
+ movq %rdx,%r11
1521
+ adcq $0,%r11
1522
+ movq %r10,-8(%rdi,%rcx,1) // t[5], "preloaded t[1]" below
1523
+
1524
+ cmpq $0,%rcx
1525
+ jne L$sqr4x_inner
1526
+
1527
+ .byte 0x67
1528
+ mulq %r15 // a[5]*a[3]
1529
+ addq %rax,%r13
1530
+ adcq $0,%rdx
1531
+ addq %r11,%r13
1532
+ adcq $0,%rdx
1533
+
1534
+ movq %r13,(%rdi) // t[6], "preloaded t[2]" below
1535
+ movq %rdx,%r12
1536
+ movq %rdx,8(%rdi) // t[7], "preloaded t[3]" below
1537
+
1538
+ addq $16,%rbp
1539
+ jnz L$sqr4x_outer
1540
+
1541
+ // comments apply to %r9==4 case
1542
+ movq -32(%rsi),%r14 // a[0]
1543
+ leaq 48+8(%rsp,%r9,2),%rdi // end of tp[] buffer, &tp[2*%r9]
1544
+ movq -24(%rsi),%rax // a[1]
1545
+ leaq -32(%rdi,%rbp,1),%rdi // end of tp[] window, &tp[2*%r9-"%rbp"]
1546
+ movq -16(%rsi),%rbx // a[2]
1547
+ movq %rax,%r15
1548
+
1549
+ mulq %r14 // a[1]*a[0]
1550
+ addq %rax,%r10 // a[1]*a[0]+t[1], preloaded t[1]
1551
+ movq %rbx,%rax // a[2]
1552
+ movq %rdx,%r11
1553
+ adcq $0,%r11
1554
+
1555
+ mulq %r14 // a[2]*a[0]
1556
+ addq %rax,%r11
1557
+ movq %rbx,%rax
1558
+ movq %r10,-24(%rdi) // t[1]
1559
+ movq %rdx,%r10
1560
+ adcq $0,%r10
1561
+ addq %r13,%r11 // a[2]*a[0]+t[2], preloaded t[2]
1562
+ movq -8(%rsi),%rbx // a[3]
1563
+ adcq $0,%r10
1564
+
1565
+ mulq %r15 // a[2]*a[1]
1566
+ addq %rax,%r12 // a[2]*a[1]+t[3], preloaded t[3]
1567
+ movq %rbx,%rax
1568
+ movq %r11,-16(%rdi) // t[2]
1569
+ movq %rdx,%r13
1570
+ adcq $0,%r13
1571
+
1572
+ mulq %r14 // a[3]*a[0]
1573
+ addq %rax,%r10 // a[3]*a[0]+a[2]*a[1]+t[3]
1574
+ movq %rbx,%rax
1575
+ movq %rdx,%r11
1576
+ adcq $0,%r11
1577
+ addq %r12,%r10
1578
+ adcq $0,%r11
1579
+ movq %r10,-8(%rdi) // t[3]
1580
+
1581
+ mulq %r15 // a[3]*a[1]
1582
+ addq %rax,%r13
1583
+ movq -16(%rsi),%rax // a[2]
1584
+ adcq $0,%rdx
1585
+ addq %r11,%r13
1586
+ adcq $0,%rdx
1587
+
1588
+ movq %r13,(%rdi) // t[4]
1589
+ movq %rdx,%r12
1590
+ movq %rdx,8(%rdi) // t[5]
1591
+
1592
+ mulq %rbx // a[2]*a[3]
1593
+ addq $16,%rbp
1594
+ xorq %r14,%r14
1595
+ subq %r9,%rbp // %rbp=16-%r9
1596
+ xorq %r15,%r15
1597
+
1598
+ addq %r12,%rax // t[5]
1599
+ adcq $0,%rdx
1600
+ movq %rax,8(%rdi) // t[5]
1601
+ movq %rdx,16(%rdi) // t[6]
1602
+ movq %r15,24(%rdi) // t[7]
1603
+
1604
+ movq -16(%rsi,%rbp,1),%rax // a[0]
1605
+ leaq 48+8(%rsp),%rdi
1606
+ xorq %r10,%r10 // t[0]
1607
+ movq 8(%rdi),%r11 // t[1]
1608
+
1609
+ leaq (%r14,%r10,2),%r12 // t[2*i]<<1 | shift
1610
+ shrq $63,%r10
1611
+ leaq (%rcx,%r11,2),%r13 // t[2*i+1]<<1 |
1612
+ shrq $63,%r11
1613
+ orq %r10,%r13 // | t[2*i]>>63
1614
+ movq 16(%rdi),%r10 // t[2*i+2] # prefetch
1615
+ movq %r11,%r14 // shift=t[2*i+1]>>63
1616
+ mulq %rax // a[i]*a[i]
1617
+ negq %r15 // mov %r15,cf
1618
+ movq 24(%rdi),%r11 // t[2*i+2+1] # prefetch
1619
+ adcq %rax,%r12
1620
+ movq -8(%rsi,%rbp,1),%rax // a[i+1] # prefetch
1621
+ movq %r12,(%rdi)
1622
+ adcq %rdx,%r13
1623
+
1624
+ leaq (%r14,%r10,2),%rbx // t[2*i]<<1 | shift
1625
+ movq %r13,8(%rdi)
1626
+ sbbq %r15,%r15 // mov cf,%r15
1627
+ shrq $63,%r10
1628
+ leaq (%rcx,%r11,2),%r8 // t[2*i+1]<<1 |
1629
+ shrq $63,%r11
1630
+ orq %r10,%r8 // | t[2*i]>>63
1631
+ movq 32(%rdi),%r10 // t[2*i+2] # prefetch
1632
+ movq %r11,%r14 // shift=t[2*i+1]>>63
1633
+ mulq %rax // a[i]*a[i]
1634
+ negq %r15 // mov %r15,cf
1635
+ movq 40(%rdi),%r11 // t[2*i+2+1] # prefetch
1636
+ adcq %rax,%rbx
1637
+ movq 0(%rsi,%rbp,1),%rax // a[i+1] # prefetch
1638
+ movq %rbx,16(%rdi)
1639
+ adcq %rdx,%r8
1640
+ leaq 16(%rbp),%rbp
1641
+ movq %r8,24(%rdi)
1642
+ sbbq %r15,%r15 // mov cf,%r15
1643
+ leaq 64(%rdi),%rdi
1644
+ jmp L$sqr4x_shift_n_add
1645
+
1646
+ .p2align 5
1647
+ L$sqr4x_shift_n_add:
1648
+ leaq (%r14,%r10,2),%r12 // t[2*i]<<1 | shift
1649
+ shrq $63,%r10
1650
+ leaq (%rcx,%r11,2),%r13 // t[2*i+1]<<1 |
1651
+ shrq $63,%r11
1652
+ orq %r10,%r13 // | t[2*i]>>63
1653
+ movq -16(%rdi),%r10 // t[2*i+2] # prefetch
1654
+ movq %r11,%r14 // shift=t[2*i+1]>>63
1655
+ mulq %rax // a[i]*a[i]
1656
+ negq %r15 // mov %r15,cf
1657
+ movq -8(%rdi),%r11 // t[2*i+2+1] # prefetch
1658
+ adcq %rax,%r12
1659
+ movq -8(%rsi,%rbp,1),%rax // a[i+1] # prefetch
1660
+ movq %r12,-32(%rdi)
1661
+ adcq %rdx,%r13
1662
+
1663
+ leaq (%r14,%r10,2),%rbx // t[2*i]<<1 | shift
1664
+ movq %r13,-24(%rdi)
1665
+ sbbq %r15,%r15 // mov cf,%r15
1666
+ shrq $63,%r10
1667
+ leaq (%rcx,%r11,2),%r8 // t[2*i+1]<<1 |
1668
+ shrq $63,%r11
1669
+ orq %r10,%r8 // | t[2*i]>>63
1670
+ movq 0(%rdi),%r10 // t[2*i+2] # prefetch
1671
+ movq %r11,%r14 // shift=t[2*i+1]>>63
1672
+ mulq %rax // a[i]*a[i]
1673
+ negq %r15 // mov %r15,cf
1674
+ movq 8(%rdi),%r11 // t[2*i+2+1] # prefetch
1675
+ adcq %rax,%rbx
1676
+ movq 0(%rsi,%rbp,1),%rax // a[i+1] # prefetch
1677
+ movq %rbx,-16(%rdi)
1678
+ adcq %rdx,%r8
1679
+
1680
+ leaq (%r14,%r10,2),%r12 // t[2*i]<<1 | shift
1681
+ movq %r8,-8(%rdi)
1682
+ sbbq %r15,%r15 // mov cf,%r15
1683
+ shrq $63,%r10
1684
+ leaq (%rcx,%r11,2),%r13 // t[2*i+1]<<1 |
1685
+ shrq $63,%r11
1686
+ orq %r10,%r13 // | t[2*i]>>63
1687
+ movq 16(%rdi),%r10 // t[2*i+2] # prefetch
1688
+ movq %r11,%r14 // shift=t[2*i+1]>>63
1689
+ mulq %rax // a[i]*a[i]
1690
+ negq %r15 // mov %r15,cf
1691
+ movq 24(%rdi),%r11 // t[2*i+2+1] # prefetch
1692
+ adcq %rax,%r12
1693
+ movq 8(%rsi,%rbp,1),%rax // a[i+1] # prefetch
1694
+ movq %r12,0(%rdi)
1695
+ adcq %rdx,%r13
1696
+
1697
+ leaq (%r14,%r10,2),%rbx // t[2*i]<<1 | shift
1698
+ movq %r13,8(%rdi)
1699
+ sbbq %r15,%r15 // mov cf,%r15
1700
+ shrq $63,%r10
1701
+ leaq (%rcx,%r11,2),%r8 // t[2*i+1]<<1 |
1702
+ shrq $63,%r11
1703
+ orq %r10,%r8 // | t[2*i]>>63
1704
+ movq 32(%rdi),%r10 // t[2*i+2] # prefetch
1705
+ movq %r11,%r14 // shift=t[2*i+1]>>63
1706
+ mulq %rax // a[i]*a[i]
1707
+ negq %r15 // mov %r15,cf
1708
+ movq 40(%rdi),%r11 // t[2*i+2+1] # prefetch
1709
+ adcq %rax,%rbx
1710
+ movq 16(%rsi,%rbp,1),%rax // a[i+1] # prefetch
1711
+ movq %rbx,16(%rdi)
1712
+ adcq %rdx,%r8
1713
+ movq %r8,24(%rdi)
1714
+ sbbq %r15,%r15 // mov cf,%r15
1715
+ leaq 64(%rdi),%rdi
1716
+ addq $32,%rbp
1717
+ jnz L$sqr4x_shift_n_add
1718
+
1719
+ leaq (%r14,%r10,2),%r12 // t[2*i]<<1 | shift
1720
+ .byte 0x67
1721
+ shrq $63,%r10
1722
+ leaq (%rcx,%r11,2),%r13 // t[2*i+1]<<1 |
1723
+ shrq $63,%r11
1724
+ orq %r10,%r13 // | t[2*i]>>63
1725
+ movq -16(%rdi),%r10 // t[2*i+2] # prefetch
1726
+ movq %r11,%r14 // shift=t[2*i+1]>>63
1727
+ mulq %rax // a[i]*a[i]
1728
+ negq %r15 // mov %r15,cf
1729
+ movq -8(%rdi),%r11 // t[2*i+2+1] # prefetch
1730
+ adcq %rax,%r12
1731
+ movq -8(%rsi),%rax // a[i+1] # prefetch
1732
+ movq %r12,-32(%rdi)
1733
+ adcq %rdx,%r13
1734
+
1735
+ leaq (%r14,%r10,2),%rbx // t[2*i]<<1|shift
1736
+ movq %r13,-24(%rdi)
1737
+ sbbq %r15,%r15 // mov cf,%r15
1738
+ shrq $63,%r10
1739
+ leaq (%rcx,%r11,2),%r8 // t[2*i+1]<<1 |
1740
+ shrq $63,%r11
1741
+ orq %r10,%r8 // | t[2*i]>>63
1742
+ mulq %rax // a[i]*a[i]
1743
+ negq %r15 // mov %r15,cf
1744
+ adcq %rax,%rbx
1745
+ adcq %rdx,%r8
1746
+ movq %rbx,-16(%rdi)
1747
+ movq %r8,-8(%rdi)
1748
+ movq %xmm2,%rbp
1749
+ .alt_entry __bn_sqr8x_reduction
1750
+ __bn_sqr8x_reduction:
1751
+ xorq %rax,%rax
1752
+ leaq (%r9,%rbp,1),%rcx // end of n[]
1753
+ leaq 48+8(%rsp,%r9,2),%rdx // end of t[] buffer
1754
+ movq %rcx,0+8(%rsp)
1755
+ leaq 48+8(%rsp,%r9,1),%rdi // end of initial t[] window
1756
+ movq %rdx,8+8(%rsp)
1757
+ negq %r9
1758
+ jmp L$8x_reduction_loop
1759
+
1760
+ .p2align 5
1761
+ L$8x_reduction_loop:
1762
+ leaq (%rdi,%r9,1),%rdi // start of current t[] window
1763
+ .byte 0x66
1764
+ movq 0(%rdi),%rbx
1765
+ movq 8(%rdi),%r9
1766
+ movq 16(%rdi),%r10
1767
+ movq 24(%rdi),%r11
1768
+ movq 32(%rdi),%r12
1769
+ movq 40(%rdi),%r13
1770
+ movq 48(%rdi),%r14
1771
+ movq 56(%rdi),%r15
1772
+ movq %rax,(%rdx) // store top-most carry bit
1773
+ leaq 64(%rdi),%rdi
1774
+
1775
+ .byte 0x67
1776
+ movq %rbx,%r8
1777
+ imulq 32+8(%rsp),%rbx // n0*a[0]
1778
+ movq 0(%rbp),%rax // n[0]
1779
+ movl $8,%ecx
1780
+ jmp L$8x_reduce
1781
+
1782
+ .p2align 5
1783
+ L$8x_reduce:
1784
+ mulq %rbx
1785
+ movq 8(%rbp),%rax // n[1]
1786
+ negq %r8
1787
+ movq %rdx,%r8
1788
+ adcq $0,%r8
1789
+
1790
+ mulq %rbx
1791
+ addq %rax,%r9
1792
+ movq 16(%rbp),%rax
1793
+ adcq $0,%rdx
1794
+ addq %r9,%r8
1795
+ movq %rbx,48-8+8(%rsp,%rcx,8) // put aside n0*a[i]
1796
+ movq %rdx,%r9
1797
+ adcq $0,%r9
1798
+
1799
+ mulq %rbx
1800
+ addq %rax,%r10
1801
+ movq 24(%rbp),%rax
1802
+ adcq $0,%rdx
1803
+ addq %r10,%r9
1804
+ movq 32+8(%rsp),%rsi // pull n0, borrow %rsi
1805
+ movq %rdx,%r10
1806
+ adcq $0,%r10
1807
+
1808
+ mulq %rbx
1809
+ addq %rax,%r11
1810
+ movq 32(%rbp),%rax
1811
+ adcq $0,%rdx
1812
+ imulq %r8,%rsi // modulo-scheduled
1813
+ addq %r11,%r10
1814
+ movq %rdx,%r11
1815
+ adcq $0,%r11
1816
+
1817
+ mulq %rbx
1818
+ addq %rax,%r12
1819
+ movq 40(%rbp),%rax
1820
+ adcq $0,%rdx
1821
+ addq %r12,%r11
1822
+ movq %rdx,%r12
1823
+ adcq $0,%r12
1824
+
1825
+ mulq %rbx
1826
+ addq %rax,%r13
1827
+ movq 48(%rbp),%rax
1828
+ adcq $0,%rdx
1829
+ addq %r13,%r12
1830
+ movq %rdx,%r13
1831
+ adcq $0,%r13
1832
+
1833
+ mulq %rbx
1834
+ addq %rax,%r14
1835
+ movq 56(%rbp),%rax
1836
+ adcq $0,%rdx
1837
+ addq %r14,%r13
1838
+ movq %rdx,%r14
1839
+ adcq $0,%r14
1840
+
1841
+ mulq %rbx
1842
+ movq %rsi,%rbx // n0*a[i]
1843
+ addq %rax,%r15
1844
+ movq 0(%rbp),%rax // n[0]
1845
+ adcq $0,%rdx
1846
+ addq %r15,%r14
1847
+ movq %rdx,%r15
1848
+ adcq $0,%r15
1849
+
1850
+ decl %ecx
1851
+ jnz L$8x_reduce
1852
+
1853
+ leaq 64(%rbp),%rbp
1854
+ xorq %rax,%rax
1855
+ movq 8+8(%rsp),%rdx // pull end of t[]
1856
+ cmpq 0+8(%rsp),%rbp // end of n[]?
1857
+ jae L$8x_no_tail
1858
+
1859
+ .byte 0x66
1860
+ addq 0(%rdi),%r8
1861
+ adcq 8(%rdi),%r9
1862
+ adcq 16(%rdi),%r10
1863
+ adcq 24(%rdi),%r11
1864
+ adcq 32(%rdi),%r12
1865
+ adcq 40(%rdi),%r13
1866
+ adcq 48(%rdi),%r14
1867
+ adcq 56(%rdi),%r15
1868
+ sbbq %rsi,%rsi // top carry
1869
+
1870
+ movq 48+56+8(%rsp),%rbx // pull n0*a[0]
1871
+ movl $8,%ecx
1872
+ movq 0(%rbp),%rax
1873
+ jmp L$8x_tail
1874
+
1875
+ .p2align 5
1876
+ L$8x_tail:
1877
+ mulq %rbx
1878
+ addq %rax,%r8
1879
+ movq 8(%rbp),%rax
1880
+ movq %r8,(%rdi) // save result
1881
+ movq %rdx,%r8
1882
+ adcq $0,%r8
1883
+
1884
+ mulq %rbx
1885
+ addq %rax,%r9
1886
+ movq 16(%rbp),%rax
1887
+ adcq $0,%rdx
1888
+ addq %r9,%r8
1889
+ leaq 8(%rdi),%rdi // %rdi++
1890
+ movq %rdx,%r9
1891
+ adcq $0,%r9
1892
+
1893
+ mulq %rbx
1894
+ addq %rax,%r10
1895
+ movq 24(%rbp),%rax
1896
+ adcq $0,%rdx
1897
+ addq %r10,%r9
1898
+ movq %rdx,%r10
1899
+ adcq $0,%r10
1900
+
1901
+ mulq %rbx
1902
+ addq %rax,%r11
1903
+ movq 32(%rbp),%rax
1904
+ adcq $0,%rdx
1905
+ addq %r11,%r10
1906
+ movq %rdx,%r11
1907
+ adcq $0,%r11
1908
+
1909
+ mulq %rbx
1910
+ addq %rax,%r12
1911
+ movq 40(%rbp),%rax
1912
+ adcq $0,%rdx
1913
+ addq %r12,%r11
1914
+ movq %rdx,%r12
1915
+ adcq $0,%r12
1916
+
1917
+ mulq %rbx
1918
+ addq %rax,%r13
1919
+ movq 48(%rbp),%rax
1920
+ adcq $0,%rdx
1921
+ addq %r13,%r12
1922
+ movq %rdx,%r13
1923
+ adcq $0,%r13
1924
+
1925
+ mulq %rbx
1926
+ addq %rax,%r14
1927
+ movq 56(%rbp),%rax
1928
+ adcq $0,%rdx
1929
+ addq %r14,%r13
1930
+ movq %rdx,%r14
1931
+ adcq $0,%r14
1932
+
1933
+ mulq %rbx
1934
+ movq 48-16+8(%rsp,%rcx,8),%rbx // pull n0*a[i]
1935
+ addq %rax,%r15
1936
+ adcq $0,%rdx
1937
+ addq %r15,%r14
1938
+ movq 0(%rbp),%rax // pull n[0]
1939
+ movq %rdx,%r15
1940
+ adcq $0,%r15
1941
+
1942
+ decl %ecx
1943
+ jnz L$8x_tail
1944
+
1945
+ leaq 64(%rbp),%rbp
1946
+ movq 8+8(%rsp),%rdx // pull end of t[]
1947
+ cmpq 0+8(%rsp),%rbp // end of n[]?
1948
+ jae L$8x_tail_done // break out of loop
1949
+
1950
+ movq 48+56+8(%rsp),%rbx // pull n0*a[0]
1951
+ negq %rsi
1952
+ movq 0(%rbp),%rax // pull n[0]
1953
+ adcq 0(%rdi),%r8
1954
+ adcq 8(%rdi),%r9
1955
+ adcq 16(%rdi),%r10
1956
+ adcq 24(%rdi),%r11
1957
+ adcq 32(%rdi),%r12
1958
+ adcq 40(%rdi),%r13
1959
+ adcq 48(%rdi),%r14
1960
+ adcq 56(%rdi),%r15
1961
+ sbbq %rsi,%rsi // top carry
1962
+
1963
+ movl $8,%ecx
1964
+ jmp L$8x_tail
1965
+
1966
+ .p2align 5
1967
+ L$8x_tail_done:
1968
+ xorq %rax,%rax
1969
+ addq (%rdx),%r8 // can this overflow?
1970
+ adcq $0,%r9
1971
+ adcq $0,%r10
1972
+ adcq $0,%r11
1973
+ adcq $0,%r12
1974
+ adcq $0,%r13
1975
+ adcq $0,%r14
1976
+ adcq $0,%r15
1977
+ adcq $0,%rax
1978
+
1979
+ negq %rsi
1980
+ L$8x_no_tail:
1981
+ adcq 0(%rdi),%r8
1982
+ adcq 8(%rdi),%r9
1983
+ adcq 16(%rdi),%r10
1984
+ adcq 24(%rdi),%r11
1985
+ adcq 32(%rdi),%r12
1986
+ adcq 40(%rdi),%r13
1987
+ adcq 48(%rdi),%r14
1988
+ adcq 56(%rdi),%r15
1989
+ adcq $0,%rax // top-most carry
1990
+ movq -8(%rbp),%rcx // np[num-1]
1991
+ xorq %rsi,%rsi
1992
+
1993
+ movq %xmm2,%rbp // restore %rbp
1994
+
1995
+ movq %r8,0(%rdi) // store top 512 bits
1996
+ movq %r9,8(%rdi)
1997
+ movq %xmm3,%r9 // %r9 is %r9, can't be moved upwards
1998
+ movq %r10,16(%rdi)
1999
+ movq %r11,24(%rdi)
2000
+ movq %r12,32(%rdi)
2001
+ movq %r13,40(%rdi)
2002
+ movq %r14,48(%rdi)
2003
+ movq %r15,56(%rdi)
2004
+ leaq 64(%rdi),%rdi
2005
+
2006
+ cmpq %rdx,%rdi // end of t[]?
2007
+ jb L$8x_reduction_loop
2008
+ ret
2009
+
2010
+
2011
+
2012
+ .p2align 5
2013
+ .alt_entry __bn_post4x_internal
2014
+ __bn_post4x_internal:
2015
+
2016
+ movq 0(%rbp),%r12
2017
+ leaq (%rdi,%r9,1),%rbx // %rdi was %rbx above
2018
+ movq %r9,%rcx
2019
+ movq %xmm1,%rdi // restore %rdi
2020
+ negq %rax
2021
+ movq %xmm1,%rsi // prepare for back-to-back call
2022
+ sarq $3+2,%rcx
2023
+ decq %r12 // so that after 'not' we get -n[0]
2024
+ xorq %r10,%r10
2025
+ movq 8(%rbp),%r13
2026
+ movq 16(%rbp),%r14
2027
+ movq 24(%rbp),%r15
2028
+ jmp L$sqr4x_sub_entry
2029
+
2030
+ .p2align 4
2031
+ L$sqr4x_sub:
2032
+ movq 0(%rbp),%r12
2033
+ movq 8(%rbp),%r13
2034
+ movq 16(%rbp),%r14
2035
+ movq 24(%rbp),%r15
2036
+ L$sqr4x_sub_entry:
2037
+ leaq 32(%rbp),%rbp
2038
+ notq %r12
2039
+ notq %r13
2040
+ notq %r14
2041
+ notq %r15
2042
+ andq %rax,%r12
2043
+ andq %rax,%r13
2044
+ andq %rax,%r14
2045
+ andq %rax,%r15
2046
+
2047
+ negq %r10 // mov %r10,%cf
2048
+ adcq 0(%rbx),%r12
2049
+ adcq 8(%rbx),%r13
2050
+ adcq 16(%rbx),%r14
2051
+ adcq 24(%rbx),%r15
2052
+ movq %r12,0(%rdi)
2053
+ leaq 32(%rbx),%rbx
2054
+ movq %r13,8(%rdi)
2055
+ sbbq %r10,%r10 // mov %cf,%r10
2056
+ movq %r14,16(%rdi)
2057
+ movq %r15,24(%rdi)
2058
+ leaq 32(%rdi),%rdi
2059
+
2060
+ incq %rcx // pass %cf
2061
+ jnz L$sqr4x_sub
2062
+
2063
+ movq %r9,%r10 // prepare for back-to-back call
2064
+ negq %r9 // restore %r9
2065
+ ret
2066
+
2067
+
2068
+ .globl _bn_mulx4x_mont_gather5
2069
+ .private_extern _bn_mulx4x_mont_gather5
2070
+
2071
+ .p2align 5
2072
+ .alt_entry _bn_mulx4x_mont_gather5
2073
+ _bn_mulx4x_mont_gather5:
2074
+
2075
+ _CET_ENDBR
2076
+ movq %rsp,%rax
2077
+
2078
+ pushq %rbx
2079
+
2080
+ pushq %rbp
2081
+
2082
+ pushq %r12
2083
+
2084
+ pushq %r13
2085
+
2086
+ pushq %r14
2087
+
2088
+ pushq %r15
2089
+
2090
+ L$mulx4x_prologue:
2091
+
2092
+ // num is declared as an int, a 32-bit parameter, so the upper half is
2093
+ // undefined. It is important that this write to %r9, which zeros the
2094
+ // upper half, predates the first access.
2095
+ shll $3,%r9d // convert %r9 to bytes
2096
+ leaq (%r9,%r9,2),%r10 // 3*%r9 in bytes
2097
+ negq %r9 // -%r9
2098
+ movq (%r8),%r8 // *n0
2099
+
2100
+ // #############################################################
2101
+ // Ensure that stack frame doesn't alias with +3*%r9
2102
+ // modulo 4096, which covers ret[num], am[num] and n[num]
2103
+ // (see bn_exp.c). This is done to allow memory disambiguation
2104
+ // logic do its magic. [Extra [num] is allocated in order
2105
+ // to align with bn_power5's frame, which is cleansed after
2106
+ // completing exponentiation. Extra 256 bytes is for power mask
2107
+ // calculated from 7th argument, the index.]
2108
+ //
2109
+ leaq -320(%rsp,%r9,2),%r11
2110
+ movq %rsp,%rbp
2111
+ subq %rdi,%r11
2112
+ andq $4095,%r11
2113
+ cmpq %r11,%r10
2114
+ jb L$mulx4xsp_alt
2115
+ subq %r11,%rbp // align with
2116
+ leaq -320(%rbp,%r9,2),%rbp // future alloca(frame+2*%r9*8+256)
2117
+ jmp L$mulx4xsp_done
2118
+
2119
+ L$mulx4xsp_alt:
2120
+ leaq 4096-320(,%r9,2),%r10
2121
+ leaq -320(%rbp,%r9,2),%rbp // future alloca(frame+2*%r9*8+256)
2122
+ subq %r10,%r11
2123
+ movq $0,%r10
2124
+ cmovcq %r10,%r11
2125
+ subq %r11,%rbp
2126
+ L$mulx4xsp_done:
2127
+ andq $-64,%rbp // ensure alignment
2128
+ movq %rsp,%r11
2129
+ subq %rbp,%r11
2130
+ andq $-4096,%r11
2131
+ leaq (%r11,%rbp,1),%rsp
2132
+ movq (%rsp),%r10
2133
+ cmpq %rbp,%rsp
2134
+ ja L$mulx4x_page_walk
2135
+ jmp L$mulx4x_page_walk_done
2136
+
2137
+ L$mulx4x_page_walk:
2138
+ leaq -4096(%rsp),%rsp
2139
+ movq (%rsp),%r10
2140
+ cmpq %rbp,%rsp
2141
+ ja L$mulx4x_page_walk
2142
+ L$mulx4x_page_walk_done:
2143
+
2144
+ // #############################################################
2145
+ // Stack layout
2146
+ // +0 -num
2147
+ // +8 off-loaded &b[i]
2148
+ // +16 end of b[num]
2149
+ // +24 inner counter
2150
+ // +32 saved n0
2151
+ // +40 saved %rsp
2152
+ // +48
2153
+ // +56 saved rp
2154
+ // +64 tmp[num+1]
2155
+ //
2156
+ movq %r8,32(%rsp) // save *n0
2157
+ movq %rax,40(%rsp) // save original %rsp
2158
+
2159
+ L$mulx4x_body:
2160
+ call mulx4x_internal
2161
+
2162
+ movq 40(%rsp),%rsi // restore %rsp
2163
+
2164
+ movq $1,%rax
2165
+
2166
+ movq -48(%rsi),%r15
2167
+
2168
+ movq -40(%rsi),%r14
2169
+
2170
+ movq -32(%rsi),%r13
2171
+
2172
+ movq -24(%rsi),%r12
2173
+
2174
+ movq -16(%rsi),%rbp
2175
+
2176
+ movq -8(%rsi),%rbx
2177
+
2178
+ leaq (%rsi),%rsp
2179
+
2180
+ L$mulx4x_epilogue:
2181
+ ret
2182
+
2183
+
2184
+
2185
+
2186
+ .p2align 5
2187
+ .alt_entry mulx4x_internal
2188
+ mulx4x_internal:
2189
+
2190
+ movq %r9,8(%rsp) // save -%r9 (it was in bytes)
2191
+ movq %r9,%r10
2192
+ negq %r9 // restore %r9
2193
+ shlq $5,%r9
2194
+ negq %r10 // restore %r9
2195
+ leaq 128(%rdx,%r9,1),%r13 // end of powers table (+size optimization)
2196
+ shrq $5+5,%r9
2197
+ movd 8(%rax),%xmm5 // load 7th argument
2198
+ subq $1,%r9
2199
+ leaq L$inc(%rip),%rax
2200
+ movq %r13,16+8(%rsp) // end of b[num]
2201
+ movq %r9,24+8(%rsp) // inner counter
2202
+ movq %rdi,56+8(%rsp) // save %rdi
2203
+ movdqa 0(%rax),%xmm0 // 00000001000000010000000000000000
2204
+ movdqa 16(%rax),%xmm1 // 00000002000000020000000200000002
2205
+ leaq 88-112(%rsp,%r10,1),%r10 // place the mask after tp[num+1] (+ICache optimization)
2206
+ leaq 128(%rdx),%rdi // size optimization
2207
+
2208
+ pshufd $0,%xmm5,%xmm5 // broadcast index
2209
+ movdqa %xmm1,%xmm4
2210
+ .byte 0x67
2211
+ movdqa %xmm1,%xmm2
2212
+ .byte 0x67
2213
+ paddd %xmm0,%xmm1
2214
+ pcmpeqd %xmm5,%xmm0 // compare to 1,0
2215
+ movdqa %xmm4,%xmm3
2216
+ paddd %xmm1,%xmm2
2217
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
2218
+ movdqa %xmm0,112(%r10)
2219
+ movdqa %xmm4,%xmm0
2220
+
2221
+ paddd %xmm2,%xmm3
2222
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
2223
+ movdqa %xmm1,128(%r10)
2224
+ movdqa %xmm4,%xmm1
2225
+
2226
+ paddd %xmm3,%xmm0
2227
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
2228
+ movdqa %xmm2,144(%r10)
2229
+ movdqa %xmm4,%xmm2
2230
+
2231
+ paddd %xmm0,%xmm1
2232
+ pcmpeqd %xmm5,%xmm0
2233
+ movdqa %xmm3,160(%r10)
2234
+ movdqa %xmm4,%xmm3
2235
+ paddd %xmm1,%xmm2
2236
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
2237
+ movdqa %xmm0,176(%r10)
2238
+ movdqa %xmm4,%xmm0
2239
+
2240
+ paddd %xmm2,%xmm3
2241
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
2242
+ movdqa %xmm1,192(%r10)
2243
+ movdqa %xmm4,%xmm1
2244
+
2245
+ paddd %xmm3,%xmm0
2246
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
2247
+ movdqa %xmm2,208(%r10)
2248
+ movdqa %xmm4,%xmm2
2249
+
2250
+ paddd %xmm0,%xmm1
2251
+ pcmpeqd %xmm5,%xmm0
2252
+ movdqa %xmm3,224(%r10)
2253
+ movdqa %xmm4,%xmm3
2254
+ paddd %xmm1,%xmm2
2255
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
2256
+ movdqa %xmm0,240(%r10)
2257
+ movdqa %xmm4,%xmm0
2258
+
2259
+ paddd %xmm2,%xmm3
2260
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
2261
+ movdqa %xmm1,256(%r10)
2262
+ movdqa %xmm4,%xmm1
2263
+
2264
+ paddd %xmm3,%xmm0
2265
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
2266
+ movdqa %xmm2,272(%r10)
2267
+ movdqa %xmm4,%xmm2
2268
+
2269
+ paddd %xmm0,%xmm1
2270
+ pcmpeqd %xmm5,%xmm0
2271
+ movdqa %xmm3,288(%r10)
2272
+ movdqa %xmm4,%xmm3
2273
+ .byte 0x67
2274
+ paddd %xmm1,%xmm2
2275
+ pcmpeqd %xmm5,%xmm1
2276
+ movdqa %xmm0,304(%r10)
2277
+
2278
+ paddd %xmm2,%xmm3
2279
+ pcmpeqd %xmm5,%xmm2
2280
+ movdqa %xmm1,320(%r10)
2281
+
2282
+ pcmpeqd %xmm5,%xmm3
2283
+ movdqa %xmm2,336(%r10)
2284
+
2285
+ pand 64(%rdi),%xmm0 // while it's still in register
2286
+ pand 80(%rdi),%xmm1
2287
+ pand 96(%rdi),%xmm2
2288
+ movdqa %xmm3,352(%r10)
2289
+ pand 112(%rdi),%xmm3
2290
+ por %xmm2,%xmm0
2291
+ por %xmm3,%xmm1
2292
+ movdqa -128(%rdi),%xmm4
2293
+ movdqa -112(%rdi),%xmm5
2294
+ movdqa -96(%rdi),%xmm2
2295
+ pand 112(%r10),%xmm4
2296
+ movdqa -80(%rdi),%xmm3
2297
+ pand 128(%r10),%xmm5
2298
+ por %xmm4,%xmm0
2299
+ pand 144(%r10),%xmm2
2300
+ por %xmm5,%xmm1
2301
+ pand 160(%r10),%xmm3
2302
+ por %xmm2,%xmm0
2303
+ por %xmm3,%xmm1
2304
+ movdqa -64(%rdi),%xmm4
2305
+ movdqa -48(%rdi),%xmm5
2306
+ movdqa -32(%rdi),%xmm2
2307
+ pand 176(%r10),%xmm4
2308
+ movdqa -16(%rdi),%xmm3
2309
+ pand 192(%r10),%xmm5
2310
+ por %xmm4,%xmm0
2311
+ pand 208(%r10),%xmm2
2312
+ por %xmm5,%xmm1
2313
+ pand 224(%r10),%xmm3
2314
+ por %xmm2,%xmm0
2315
+ por %xmm3,%xmm1
2316
+ movdqa 0(%rdi),%xmm4
2317
+ movdqa 16(%rdi),%xmm5
2318
+ movdqa 32(%rdi),%xmm2
2319
+ pand 240(%r10),%xmm4
2320
+ movdqa 48(%rdi),%xmm3
2321
+ pand 256(%r10),%xmm5
2322
+ por %xmm4,%xmm0
2323
+ pand 272(%r10),%xmm2
2324
+ por %xmm5,%xmm1
2325
+ pand 288(%r10),%xmm3
2326
+ por %xmm2,%xmm0
2327
+ por %xmm3,%xmm1
2328
+ pxor %xmm1,%xmm0
2329
+ // Combine the upper and lower halves of %xmm0.
2330
+ pshufd $0x4e,%xmm0,%xmm1 // Swap upper and lower halves.
2331
+ por %xmm1,%xmm0
2332
+ leaq 256(%rdi),%rdi
2333
+ movq %xmm0,%rdx // bp[0]
2334
+ leaq 64+32+8(%rsp),%rbx
2335
+
2336
+ movq %rdx,%r9
2337
+ mulxq 0(%rsi),%r8,%rax // a[0]*b[0]
2338
+ mulxq 8(%rsi),%r11,%r12 // a[1]*b[0]
2339
+ addq %rax,%r11
2340
+ mulxq 16(%rsi),%rax,%r13 // ...
2341
+ adcq %rax,%r12
2342
+ adcq $0,%r13
2343
+ mulxq 24(%rsi),%rax,%r14
2344
+
2345
+ movq %r8,%r15
2346
+ imulq 32+8(%rsp),%r8 // "t[0]"*n0
2347
+ xorq %rbp,%rbp // cf=0, of=0
2348
+ movq %r8,%rdx
2349
+
2350
+ movq %rdi,8+8(%rsp) // off-load &b[i]
2351
+
2352
+ leaq 32(%rsi),%rsi
2353
+ adcxq %rax,%r13
2354
+ adcxq %rbp,%r14 // cf=0
2355
+
2356
+ mulxq 0(%rcx),%rax,%r10
2357
+ adcxq %rax,%r15 // discarded
2358
+ adoxq %r11,%r10
2359
+ mulxq 8(%rcx),%rax,%r11
2360
+ adcxq %rax,%r10
2361
+ adoxq %r12,%r11
2362
+ mulxq 16(%rcx),%rax,%r12
2363
+ movq 24+8(%rsp),%rdi // counter value
2364
+ movq %r10,-32(%rbx)
2365
+ adcxq %rax,%r11
2366
+ adoxq %r13,%r12
2367
+ mulxq 24(%rcx),%rax,%r15
2368
+ movq %r9,%rdx
2369
+ movq %r11,-24(%rbx)
2370
+ adcxq %rax,%r12
2371
+ adoxq %rbp,%r15 // of=0
2372
+ leaq 32(%rcx),%rcx
2373
+ movq %r12,-16(%rbx)
2374
+ jmp L$mulx4x_1st
2375
+
2376
+ .p2align 5
2377
+ L$mulx4x_1st:
2378
+ adcxq %rbp,%r15 // cf=0, modulo-scheduled
2379
+ mulxq 0(%rsi),%r10,%rax // a[4]*b[0]
2380
+ adcxq %r14,%r10
2381
+ mulxq 8(%rsi),%r11,%r14 // a[5]*b[0]
2382
+ adcxq %rax,%r11
2383
+ mulxq 16(%rsi),%r12,%rax // ...
2384
+ adcxq %r14,%r12
2385
+ mulxq 24(%rsi),%r13,%r14
2386
+ .byte 0x67,0x67
2387
+ movq %r8,%rdx
2388
+ adcxq %rax,%r13
2389
+ adcxq %rbp,%r14 // cf=0
2390
+ leaq 32(%rsi),%rsi
2391
+ leaq 32(%rbx),%rbx
2392
+
2393
+ adoxq %r15,%r10
2394
+ mulxq 0(%rcx),%rax,%r15
2395
+ adcxq %rax,%r10
2396
+ adoxq %r15,%r11
2397
+ mulxq 8(%rcx),%rax,%r15
2398
+ adcxq %rax,%r11
2399
+ adoxq %r15,%r12
2400
+ mulxq 16(%rcx),%rax,%r15
2401
+ movq %r10,-40(%rbx)
2402
+ adcxq %rax,%r12
2403
+ movq %r11,-32(%rbx)
2404
+ adoxq %r15,%r13
2405
+ mulxq 24(%rcx),%rax,%r15
2406
+ movq %r9,%rdx
2407
+ movq %r12,-24(%rbx)
2408
+ adcxq %rax,%r13
2409
+ adoxq %rbp,%r15
2410
+ leaq 32(%rcx),%rcx
2411
+ movq %r13,-16(%rbx)
2412
+
2413
+ decq %rdi // of=0, pass cf
2414
+ jnz L$mulx4x_1st
2415
+
2416
+ movq 8(%rsp),%rax // load -num
2417
+ adcq %rbp,%r15 // modulo-scheduled
2418
+ leaq (%rsi,%rax,1),%rsi // rewind %rsi
2419
+ addq %r15,%r14
2420
+ movq 8+8(%rsp),%rdi // re-load &b[i]
2421
+ adcq %rbp,%rbp // top-most carry
2422
+ movq %r14,-8(%rbx)
2423
+ jmp L$mulx4x_outer
2424
+
2425
+ .p2align 5
2426
+ L$mulx4x_outer:
2427
+ leaq 16-256(%rbx),%r10 // where 256-byte mask is (+density control)
2428
+ pxor %xmm4,%xmm4
2429
+ .byte 0x67,0x67
2430
+ pxor %xmm5,%xmm5
2431
+ movdqa -128(%rdi),%xmm0
2432
+ movdqa -112(%rdi),%xmm1
2433
+ movdqa -96(%rdi),%xmm2
2434
+ pand 256(%r10),%xmm0
2435
+ movdqa -80(%rdi),%xmm3
2436
+ pand 272(%r10),%xmm1
2437
+ por %xmm0,%xmm4
2438
+ pand 288(%r10),%xmm2
2439
+ por %xmm1,%xmm5
2440
+ pand 304(%r10),%xmm3
2441
+ por %xmm2,%xmm4
2442
+ por %xmm3,%xmm5
2443
+ movdqa -64(%rdi),%xmm0
2444
+ movdqa -48(%rdi),%xmm1
2445
+ movdqa -32(%rdi),%xmm2
2446
+ pand 320(%r10),%xmm0
2447
+ movdqa -16(%rdi),%xmm3
2448
+ pand 336(%r10),%xmm1
2449
+ por %xmm0,%xmm4
2450
+ pand 352(%r10),%xmm2
2451
+ por %xmm1,%xmm5
2452
+ pand 368(%r10),%xmm3
2453
+ por %xmm2,%xmm4
2454
+ por %xmm3,%xmm5
2455
+ movdqa 0(%rdi),%xmm0
2456
+ movdqa 16(%rdi),%xmm1
2457
+ movdqa 32(%rdi),%xmm2
2458
+ pand 384(%r10),%xmm0
2459
+ movdqa 48(%rdi),%xmm3
2460
+ pand 400(%r10),%xmm1
2461
+ por %xmm0,%xmm4
2462
+ pand 416(%r10),%xmm2
2463
+ por %xmm1,%xmm5
2464
+ pand 432(%r10),%xmm3
2465
+ por %xmm2,%xmm4
2466
+ por %xmm3,%xmm5
2467
+ movdqa 64(%rdi),%xmm0
2468
+ movdqa 80(%rdi),%xmm1
2469
+ movdqa 96(%rdi),%xmm2
2470
+ pand 448(%r10),%xmm0
2471
+ movdqa 112(%rdi),%xmm3
2472
+ pand 464(%r10),%xmm1
2473
+ por %xmm0,%xmm4
2474
+ pand 480(%r10),%xmm2
2475
+ por %xmm1,%xmm5
2476
+ pand 496(%r10),%xmm3
2477
+ por %xmm2,%xmm4
2478
+ por %xmm3,%xmm5
2479
+ por %xmm5,%xmm4
2480
+ // Combine the upper and lower halves of %xmm4 as %xmm0.
2481
+ pshufd $0x4e,%xmm4,%xmm0 // Swap upper and lower halves.
2482
+ por %xmm4,%xmm0
2483
+ leaq 256(%rdi),%rdi
2484
+ movq %xmm0,%rdx // m0=bp[i]
2485
+
2486
+ movq %rbp,(%rbx) // save top-most carry
2487
+ leaq 32(%rbx,%rax,1),%rbx // rewind %rbx
2488
+ mulxq 0(%rsi),%r8,%r11 // a[0]*b[i]
2489
+ xorq %rbp,%rbp // cf=0, of=0
2490
+ movq %rdx,%r9
2491
+ mulxq 8(%rsi),%r14,%r12 // a[1]*b[i]
2492
+ adoxq -32(%rbx),%r8 // +t[0]
2493
+ adcxq %r14,%r11
2494
+ mulxq 16(%rsi),%r15,%r13 // ...
2495
+ adoxq -24(%rbx),%r11
2496
+ adcxq %r15,%r12
2497
+ mulxq 24(%rsi),%rdx,%r14
2498
+ adoxq -16(%rbx),%r12
2499
+ adcxq %rdx,%r13
2500
+ leaq (%rcx,%rax,1),%rcx // rewind %rcx
2501
+ leaq 32(%rsi),%rsi
2502
+ adoxq -8(%rbx),%r13
2503
+ adcxq %rbp,%r14
2504
+ adoxq %rbp,%r14
2505
+
2506
+ movq %r8,%r15
2507
+ imulq 32+8(%rsp),%r8 // "t[0]"*n0
2508
+
2509
+ movq %r8,%rdx
2510
+ xorq %rbp,%rbp // cf=0, of=0
2511
+ movq %rdi,8+8(%rsp) // off-load &b[i]
2512
+
2513
+ mulxq 0(%rcx),%rax,%r10
2514
+ adcxq %rax,%r15 // discarded
2515
+ adoxq %r11,%r10
2516
+ mulxq 8(%rcx),%rax,%r11
2517
+ adcxq %rax,%r10
2518
+ adoxq %r12,%r11
2519
+ mulxq 16(%rcx),%rax,%r12
2520
+ adcxq %rax,%r11
2521
+ adoxq %r13,%r12
2522
+ mulxq 24(%rcx),%rax,%r15
2523
+ movq %r9,%rdx
2524
+ movq 24+8(%rsp),%rdi // counter value
2525
+ movq %r10,-32(%rbx)
2526
+ adcxq %rax,%r12
2527
+ movq %r11,-24(%rbx)
2528
+ adoxq %rbp,%r15 // of=0
2529
+ movq %r12,-16(%rbx)
2530
+ leaq 32(%rcx),%rcx
2531
+ jmp L$mulx4x_inner
2532
+
2533
+ .p2align 5
2534
+ L$mulx4x_inner:
2535
+ mulxq 0(%rsi),%r10,%rax // a[4]*b[i]
2536
+ adcxq %rbp,%r15 // cf=0, modulo-scheduled
2537
+ adoxq %r14,%r10
2538
+ mulxq 8(%rsi),%r11,%r14 // a[5]*b[i]
2539
+ adcxq 0(%rbx),%r10
2540
+ adoxq %rax,%r11
2541
+ mulxq 16(%rsi),%r12,%rax // ...
2542
+ adcxq 8(%rbx),%r11
2543
+ adoxq %r14,%r12
2544
+ mulxq 24(%rsi),%r13,%r14
2545
+ movq %r8,%rdx
2546
+ adcxq 16(%rbx),%r12
2547
+ adoxq %rax,%r13
2548
+ adcxq 24(%rbx),%r13
2549
+ adoxq %rbp,%r14 // of=0
2550
+ leaq 32(%rsi),%rsi
2551
+ leaq 32(%rbx),%rbx
2552
+ adcxq %rbp,%r14 // cf=0
2553
+
2554
+ adoxq %r15,%r10
2555
+ mulxq 0(%rcx),%rax,%r15
2556
+ adcxq %rax,%r10
2557
+ adoxq %r15,%r11
2558
+ mulxq 8(%rcx),%rax,%r15
2559
+ adcxq %rax,%r11
2560
+ adoxq %r15,%r12
2561
+ mulxq 16(%rcx),%rax,%r15
2562
+ movq %r10,-40(%rbx)
2563
+ adcxq %rax,%r12
2564
+ adoxq %r15,%r13
2565
+ movq %r11,-32(%rbx)
2566
+ mulxq 24(%rcx),%rax,%r15
2567
+ movq %r9,%rdx
2568
+ leaq 32(%rcx),%rcx
2569
+ movq %r12,-24(%rbx)
2570
+ adcxq %rax,%r13
2571
+ adoxq %rbp,%r15
2572
+ movq %r13,-16(%rbx)
2573
+
2574
+ decq %rdi // of=0, pass cf
2575
+ jnz L$mulx4x_inner
2576
+
2577
+ movq 0+8(%rsp),%rax // load -num
2578
+ adcq %rbp,%r15 // modulo-scheduled
2579
+ subq 0(%rbx),%rdi // pull top-most carry to %cf
2580
+ movq 8+8(%rsp),%rdi // re-load &b[i]
2581
+ movq 16+8(%rsp),%r10
2582
+ adcq %r15,%r14
2583
+ leaq (%rsi,%rax,1),%rsi // rewind %rsi
2584
+ adcq %rbp,%rbp // top-most carry
2585
+ movq %r14,-8(%rbx)
2586
+
2587
+ cmpq %r10,%rdi
2588
+ jb L$mulx4x_outer
2589
+
2590
+ movq -8(%rcx),%r10
2591
+ movq %rbp,%r8
2592
+ movq (%rcx,%rax,1),%r12
2593
+ leaq (%rcx,%rax,1),%rbp // rewind %rcx
2594
+ movq %rax,%rcx
2595
+ leaq (%rbx,%rax,1),%rdi // rewind %rbx
2596
+ xorl %eax,%eax
2597
+ xorq %r15,%r15
2598
+ subq %r14,%r10 // compare top-most words
2599
+ adcq %r15,%r15
2600
+ orq %r15,%r8
2601
+ sarq $3+2,%rcx
2602
+ subq %r8,%rax // %rax=-%r8
2603
+ movq 56+8(%rsp),%rdx // restore rp
2604
+ decq %r12 // so that after 'not' we get -n[0]
2605
+ movq 8(%rbp),%r13
2606
+ xorq %r8,%r8
2607
+ movq 16(%rbp),%r14
2608
+ movq 24(%rbp),%r15
2609
+ jmp L$sqrx4x_sub_entry // common post-condition
2610
+
2611
+
2612
+ .globl _bn_powerx5
2613
+ .private_extern _bn_powerx5
2614
+
2615
+ .p2align 5
2616
+ .alt_entry _bn_powerx5
2617
+ _bn_powerx5:
2618
+
2619
+ _CET_ENDBR
2620
+ movq %rsp,%rax
2621
+
2622
+ pushq %rbx
2623
+
2624
+ pushq %rbp
2625
+
2626
+ pushq %r12
2627
+
2628
+ pushq %r13
2629
+
2630
+ pushq %r14
2631
+
2632
+ pushq %r15
2633
+
2634
+ L$powerx5_prologue:
2635
+
2636
+ // num is declared as an int, a 32-bit parameter, so the upper half is
2637
+ // undefined. It is important that this write to %r9, which zeros the
2638
+ // upper half, predates the first access.
2639
+ shll $3,%r9d // convert %r9 to bytes
2640
+ leaq (%r9,%r9,2),%r10 // 3*%r9 in bytes
2641
+ negq %r9
2642
+ movq (%r8),%r8 // *n0
2643
+
2644
+ // #############################################################
2645
+ // Ensure that stack frame doesn't alias with %rdi+3*%r9
2646
+ // modulo 4096, which covers ret[num], am[num] and n[num]
2647
+ // (see bn_exp.c). This is done to allow memory disambiguation
2648
+ // logic do its magic. [Extra 256 bytes is for power mask
2649
+ // calculated from 7th argument, the index.]
2650
+ //
2651
+ leaq -320(%rsp,%r9,2),%r11
2652
+ movq %rsp,%rbp
2653
+ subq %rdi,%r11
2654
+ andq $4095,%r11
2655
+ cmpq %r11,%r10
2656
+ jb L$pwrx_sp_alt
2657
+ subq %r11,%rbp // align with %rsi
2658
+ leaq -320(%rbp,%r9,2),%rbp // future alloca(frame+2*%r9*8+256)
2659
+ jmp L$pwrx_sp_done
2660
+
2661
+ .p2align 5
2662
+ L$pwrx_sp_alt:
2663
+ leaq 4096-320(,%r9,2),%r10
2664
+ leaq -320(%rbp,%r9,2),%rbp // alloca(frame+2*%r9*8+256)
2665
+ subq %r10,%r11
2666
+ movq $0,%r10
2667
+ cmovcq %r10,%r11
2668
+ subq %r11,%rbp
2669
+ L$pwrx_sp_done:
2670
+ andq $-64,%rbp
2671
+ movq %rsp,%r11
2672
+ subq %rbp,%r11
2673
+ andq $-4096,%r11
2674
+ leaq (%r11,%rbp,1),%rsp
2675
+ movq (%rsp),%r10
2676
+ cmpq %rbp,%rsp
2677
+ ja L$pwrx_page_walk
2678
+ jmp L$pwrx_page_walk_done
2679
+
2680
+ L$pwrx_page_walk:
2681
+ leaq -4096(%rsp),%rsp
2682
+ movq (%rsp),%r10
2683
+ cmpq %rbp,%rsp
2684
+ ja L$pwrx_page_walk
2685
+ L$pwrx_page_walk_done:
2686
+
2687
+ movq %r9,%r10
2688
+ negq %r9
2689
+
2690
+ // #############################################################
2691
+ // Stack layout
2692
+ //
2693
+ // +0 saved %r9, used in reduction section
2694
+ // +8 &t[2*%r9], used in reduction section
2695
+ // +16 intermediate carry bit
2696
+ // +24 top-most carry bit, used in reduction section
2697
+ // +32 saved *n0
2698
+ // +40 saved %rsp
2699
+ // +48 t[2*%r9]
2700
+ //
2701
+ pxor %xmm0,%xmm0
2702
+ movq %rdi,%xmm1 // save %rdi
2703
+ movq %rcx,%xmm2 // save %rcx
2704
+ movq %r10,%xmm3 // -%r9
2705
+ movq %rdx,%xmm4
2706
+ movq %r8,32(%rsp)
2707
+ movq %rax,40(%rsp) // save original %rsp
2708
+
2709
+ L$powerx5_body:
2710
+
2711
+ call __bn_sqrx8x_internal
2712
+ call __bn_postx4x_internal
2713
+ call __bn_sqrx8x_internal
2714
+ call __bn_postx4x_internal
2715
+ call __bn_sqrx8x_internal
2716
+ call __bn_postx4x_internal
2717
+ call __bn_sqrx8x_internal
2718
+ call __bn_postx4x_internal
2719
+ call __bn_sqrx8x_internal
2720
+ call __bn_postx4x_internal
2721
+
2722
+ movq %r10,%r9 // -num
2723
+ movq %rsi,%rdi
2724
+ movq %xmm2,%rcx
2725
+ movq %xmm4,%rdx
2726
+ movq 40(%rsp),%rax
2727
+
2728
+ call mulx4x_internal
2729
+
2730
+ movq 40(%rsp),%rsi // restore %rsp
2731
+
2732
+ movq $1,%rax
2733
+
2734
+ movq -48(%rsi),%r15
2735
+
2736
+ movq -40(%rsi),%r14
2737
+
2738
+ movq -32(%rsi),%r13
2739
+
2740
+ movq -24(%rsi),%r12
2741
+
2742
+ movq -16(%rsi),%rbp
2743
+
2744
+ movq -8(%rsi),%rbx
2745
+
2746
+ leaq (%rsi),%rsp
2747
+
2748
+ L$powerx5_epilogue:
2749
+ ret
2750
+
2751
+
2752
+
2753
+ .globl _bn_sqrx8x_internal
2754
+ .private_extern _bn_sqrx8x_internal
2755
+ .private_extern _bn_sqrx8x_internal
2756
+
2757
+ .p2align 5
2758
+ .alt_entry _bn_sqrx8x_internal
2759
+ _bn_sqrx8x_internal:
2760
+ .alt_entry __bn_sqrx8x_internal
2761
+ __bn_sqrx8x_internal:
2762
+
2763
+ _CET_ENDBR
2764
+ // #################################################################
2765
+ // Squaring part:
2766
+ //
2767
+ // a) multiply-n-add everything but a[i]*a[i];
2768
+ // b) shift result of a) by 1 to the left and accumulate
2769
+ // a[i]*a[i] products;
2770
+ //
2771
+ // #################################################################
2772
+ // a[7]a[7]a[6]a[6]a[5]a[5]a[4]a[4]a[3]a[3]a[2]a[2]a[1]a[1]a[0]a[0]
2773
+ // a[1]a[0]
2774
+ // a[2]a[0]
2775
+ // a[3]a[0]
2776
+ // a[2]a[1]
2777
+ // a[3]a[1]
2778
+ // a[3]a[2]
2779
+ //
2780
+ // a[4]a[0]
2781
+ // a[5]a[0]
2782
+ // a[6]a[0]
2783
+ // a[7]a[0]
2784
+ // a[4]a[1]
2785
+ // a[5]a[1]
2786
+ // a[6]a[1]
2787
+ // a[7]a[1]
2788
+ // a[4]a[2]
2789
+ // a[5]a[2]
2790
+ // a[6]a[2]
2791
+ // a[7]a[2]
2792
+ // a[4]a[3]
2793
+ // a[5]a[3]
2794
+ // a[6]a[3]
2795
+ // a[7]a[3]
2796
+ //
2797
+ // a[5]a[4]
2798
+ // a[6]a[4]
2799
+ // a[7]a[4]
2800
+ // a[6]a[5]
2801
+ // a[7]a[5]
2802
+ // a[7]a[6]
2803
+ // a[7]a[7]a[6]a[6]a[5]a[5]a[4]a[4]a[3]a[3]a[2]a[2]a[1]a[1]a[0]a[0]
2804
+ leaq 48+8(%rsp),%rdi
2805
+ leaq (%rsi,%r9,1),%rbp
2806
+ movq %r9,0+8(%rsp) // save %r9
2807
+ movq %rbp,8+8(%rsp) // save end of %rsi
2808
+ jmp L$sqr8x_zero_start
2809
+
2810
+ .p2align 5
2811
+ .byte 0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00
2812
+ L$sqrx8x_zero:
2813
+ .byte 0x3e
2814
+ movdqa %xmm0,0(%rdi)
2815
+ movdqa %xmm0,16(%rdi)
2816
+ movdqa %xmm0,32(%rdi)
2817
+ movdqa %xmm0,48(%rdi)
2818
+ L$sqr8x_zero_start: // aligned at 32
2819
+ movdqa %xmm0,64(%rdi)
2820
+ movdqa %xmm0,80(%rdi)
2821
+ movdqa %xmm0,96(%rdi)
2822
+ movdqa %xmm0,112(%rdi)
2823
+ leaq 128(%rdi),%rdi
2824
+ subq $64,%r9
2825
+ jnz L$sqrx8x_zero
2826
+
2827
+ movq 0(%rsi),%rdx // a[0], modulo-scheduled
2828
+ // xor %r9,%r9 # t[1], ex-%r9, zero already
2829
+ xorq %r10,%r10
2830
+ xorq %r11,%r11
2831
+ xorq %r12,%r12
2832
+ xorq %r13,%r13
2833
+ xorq %r14,%r14
2834
+ xorq %r15,%r15
2835
+ leaq 48+8(%rsp),%rdi
2836
+ xorq %rbp,%rbp // cf=0, cf=0
2837
+ jmp L$sqrx8x_outer_loop
2838
+
2839
+ .p2align 5
2840
+ L$sqrx8x_outer_loop:
2841
+ mulxq 8(%rsi),%r8,%rax // a[1]*a[0]
2842
+ adcxq %r9,%r8 // a[1]*a[0]+=t[1]
2843
+ adoxq %rax,%r10
2844
+ mulxq 16(%rsi),%r9,%rax // a[2]*a[0]
2845
+ adcxq %r10,%r9
2846
+ adoxq %rax,%r11
2847
+ .byte 0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00 // mulx 3*8(%rsi),%r10,%rax # ...
2848
+ adcxq %r11,%r10
2849
+ adoxq %rax,%r12
2850
+ .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00 // mulx 4*8(%rsi),%r11,%rax
2851
+ adcxq %r12,%r11
2852
+ adoxq %rax,%r13
2853
+ mulxq 40(%rsi),%r12,%rax
2854
+ adcxq %r13,%r12
2855
+ adoxq %rax,%r14
2856
+ mulxq 48(%rsi),%r13,%rax
2857
+ adcxq %r14,%r13
2858
+ adoxq %r15,%rax
2859
+ mulxq 56(%rsi),%r14,%r15
2860
+ movq 8(%rsi),%rdx // a[1]
2861
+ adcxq %rax,%r14
2862
+ adoxq %rbp,%r15
2863
+ adcq 64(%rdi),%r15
2864
+ movq %r8,8(%rdi) // t[1]
2865
+ movq %r9,16(%rdi) // t[2]
2866
+ sbbq %rcx,%rcx // mov %cf,%rcx
2867
+ xorq %rbp,%rbp // cf=0, of=0
2868
+
2869
+
2870
+ mulxq 16(%rsi),%r8,%rbx // a[2]*a[1]
2871
+ mulxq 24(%rsi),%r9,%rax // a[3]*a[1]
2872
+ adcxq %r10,%r8
2873
+ adoxq %rbx,%r9
2874
+ mulxq 32(%rsi),%r10,%rbx // ...
2875
+ adcxq %r11,%r9
2876
+ adoxq %rax,%r10
2877
+ .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00 // mulx 5*8(%rsi),%r11,%rax
2878
+ adcxq %r12,%r10
2879
+ adoxq %rbx,%r11
2880
+ .byte 0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00 // mulx 6*8(%rsi),%r12,%rbx
2881
+ adcxq %r13,%r11
2882
+ adoxq %r14,%r12
2883
+ .byte 0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00 // mulx 7*8(%rsi),%r13,%r14
2884
+ movq 16(%rsi),%rdx // a[2]
2885
+ adcxq %rax,%r12
2886
+ adoxq %rbx,%r13
2887
+ adcxq %r15,%r13
2888
+ adoxq %rbp,%r14 // of=0
2889
+ adcxq %rbp,%r14 // cf=0
2890
+
2891
+ movq %r8,24(%rdi) // t[3]
2892
+ movq %r9,32(%rdi) // t[4]
2893
+
2894
+ mulxq 24(%rsi),%r8,%rbx // a[3]*a[2]
2895
+ mulxq 32(%rsi),%r9,%rax // a[4]*a[2]
2896
+ adcxq %r10,%r8
2897
+ adoxq %rbx,%r9
2898
+ mulxq 40(%rsi),%r10,%rbx // ...
2899
+ adcxq %r11,%r9
2900
+ adoxq %rax,%r10
2901
+ .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00 // mulx 6*8(%rsi),%r11,%rax
2902
+ adcxq %r12,%r10
2903
+ adoxq %r13,%r11
2904
+ .byte 0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00 // mulx 7*8(%rsi),%r12,%r13
2905
+ .byte 0x3e
2906
+ movq 24(%rsi),%rdx // a[3]
2907
+ adcxq %rbx,%r11
2908
+ adoxq %rax,%r12
2909
+ adcxq %r14,%r12
2910
+ movq %r8,40(%rdi) // t[5]
2911
+ movq %r9,48(%rdi) // t[6]
2912
+ mulxq 32(%rsi),%r8,%rax // a[4]*a[3]
2913
+ adoxq %rbp,%r13 // of=0
2914
+ adcxq %rbp,%r13 // cf=0
2915
+
2916
+ mulxq 40(%rsi),%r9,%rbx // a[5]*a[3]
2917
+ adcxq %r10,%r8
2918
+ adoxq %rax,%r9
2919
+ mulxq 48(%rsi),%r10,%rax // ...
2920
+ adcxq %r11,%r9
2921
+ adoxq %r12,%r10
2922
+ mulxq 56(%rsi),%r11,%r12
2923
+ movq 32(%rsi),%rdx // a[4]
2924
+ movq 40(%rsi),%r14 // a[5]
2925
+ adcxq %rbx,%r10
2926
+ adoxq %rax,%r11
2927
+ movq 48(%rsi),%r15 // a[6]
2928
+ adcxq %r13,%r11
2929
+ adoxq %rbp,%r12 // of=0
2930
+ adcxq %rbp,%r12 // cf=0
2931
+
2932
+ movq %r8,56(%rdi) // t[7]
2933
+ movq %r9,64(%rdi) // t[8]
2934
+
2935
+ mulxq %r14,%r9,%rax // a[5]*a[4]
2936
+ movq 56(%rsi),%r8 // a[7]
2937
+ adcxq %r10,%r9
2938
+ mulxq %r15,%r10,%rbx // a[6]*a[4]
2939
+ adoxq %rax,%r10
2940
+ adcxq %r11,%r10
2941
+ mulxq %r8,%r11,%rax // a[7]*a[4]
2942
+ movq %r14,%rdx // a[5]
2943
+ adoxq %rbx,%r11
2944
+ adcxq %r12,%r11
2945
+ // adox %rbp,%rax # of=0
2946
+ adcxq %rbp,%rax // cf=0
2947
+
2948
+ mulxq %r15,%r14,%rbx // a[6]*a[5]
2949
+ mulxq %r8,%r12,%r13 // a[7]*a[5]
2950
+ movq %r15,%rdx // a[6]
2951
+ leaq 64(%rsi),%rsi
2952
+ adcxq %r14,%r11
2953
+ adoxq %rbx,%r12
2954
+ adcxq %rax,%r12
2955
+ adoxq %rbp,%r13
2956
+
2957
+ .byte 0x67,0x67
2958
+ mulxq %r8,%r8,%r14 // a[7]*a[6]
2959
+ adcxq %r8,%r13
2960
+ adcxq %rbp,%r14
2961
+
2962
+ cmpq 8+8(%rsp),%rsi
2963
+ je L$sqrx8x_outer_break
2964
+
2965
+ negq %rcx // mov %rcx,%cf
2966
+ movq $-8,%rcx
2967
+ movq %rbp,%r15
2968
+ movq 64(%rdi),%r8
2969
+ adcxq 72(%rdi),%r9 // +=t[9]
2970
+ adcxq 80(%rdi),%r10 // ...
2971
+ adcxq 88(%rdi),%r11
2972
+ adcq 96(%rdi),%r12
2973
+ adcq 104(%rdi),%r13
2974
+ adcq 112(%rdi),%r14
2975
+ adcq 120(%rdi),%r15
2976
+ leaq (%rsi),%rbp
2977
+ leaq 128(%rdi),%rdi
2978
+ sbbq %rax,%rax // mov %cf,%rcx
2979
+
2980
+ movq -64(%rsi),%rdx // a[0]
2981
+ movq %rax,16+8(%rsp) // offload %rcx
2982
+ movq %rdi,24+8(%rsp)
2983
+
2984
+ // lea 8*8(%rdi),%rdi # see 2*8*8(%rdi) above
2985
+ xorl %eax,%eax // cf=0, of=0
2986
+ jmp L$sqrx8x_loop
2987
+
2988
+ .p2align 5
2989
+ L$sqrx8x_loop:
2990
+ movq %r8,%rbx
2991
+ mulxq 0(%rbp),%rax,%r8 // a[8]*a[i]
2992
+ adcxq %rax,%rbx // +=t[8]
2993
+ adoxq %r9,%r8
2994
+
2995
+ mulxq 8(%rbp),%rax,%r9 // ...
2996
+ adcxq %rax,%r8
2997
+ adoxq %r10,%r9
2998
+
2999
+ mulxq 16(%rbp),%rax,%r10
3000
+ adcxq %rax,%r9
3001
+ adoxq %r11,%r10
3002
+
3003
+ mulxq 24(%rbp),%rax,%r11
3004
+ adcxq %rax,%r10
3005
+ adoxq %r12,%r11
3006
+
3007
+ .byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 // mulx 4*8(%rbp),%rax,%r12
3008
+ adcxq %rax,%r11
3009
+ adoxq %r13,%r12
3010
+
3011
+ mulxq 40(%rbp),%rax,%r13
3012
+ adcxq %rax,%r12
3013
+ adoxq %r14,%r13
3014
+
3015
+ mulxq 48(%rbp),%rax,%r14
3016
+ movq %rbx,(%rdi,%rcx,8) // store t[8+i]
3017
+ movl $0,%ebx
3018
+ adcxq %rax,%r13
3019
+ adoxq %r15,%r14
3020
+
3021
+ .byte 0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00 // mulx 7*8(%rbp),%rax,%r15
3022
+ movq 8(%rsi,%rcx,8),%rdx // a[i]
3023
+ adcxq %rax,%r14
3024
+ adoxq %rbx,%r15 // %rbx is 0, of=0
3025
+ adcxq %rbx,%r15 // cf=0
3026
+
3027
+ .byte 0x67
3028
+ incq %rcx // of=0
3029
+ jnz L$sqrx8x_loop
3030
+
3031
+ leaq 64(%rbp),%rbp
3032
+ movq $-8,%rcx
3033
+ cmpq 8+8(%rsp),%rbp // done?
3034
+ je L$sqrx8x_break
3035
+
3036
+ subq 16+8(%rsp),%rbx // mov 16(%rsp),%cf
3037
+ .byte 0x66
3038
+ movq -64(%rsi),%rdx
3039
+ adcxq 0(%rdi),%r8
3040
+ adcxq 8(%rdi),%r9
3041
+ adcq 16(%rdi),%r10
3042
+ adcq 24(%rdi),%r11
3043
+ adcq 32(%rdi),%r12
3044
+ adcq 40(%rdi),%r13
3045
+ adcq 48(%rdi),%r14
3046
+ adcq 56(%rdi),%r15
3047
+ leaq 64(%rdi),%rdi
3048
+ .byte 0x67
3049
+ sbbq %rax,%rax // mov %cf,%rax
3050
+ xorl %ebx,%ebx // cf=0, of=0
3051
+ movq %rax,16+8(%rsp) // offload carry
3052
+ jmp L$sqrx8x_loop
3053
+
3054
+ .p2align 5
3055
+ L$sqrx8x_break:
3056
+ xorq %rbp,%rbp
3057
+ subq 16+8(%rsp),%rbx // mov 16(%rsp),%cf
3058
+ adcxq %rbp,%r8
3059
+ movq 24+8(%rsp),%rcx // initial %rdi, borrow %rcx
3060
+ adcxq %rbp,%r9
3061
+ movq 0(%rsi),%rdx // a[8], modulo-scheduled
3062
+ adcq $0,%r10
3063
+ movq %r8,0(%rdi)
3064
+ adcq $0,%r11
3065
+ adcq $0,%r12
3066
+ adcq $0,%r13
3067
+ adcq $0,%r14
3068
+ adcq $0,%r15
3069
+ cmpq %rcx,%rdi // cf=0, of=0
3070
+ je L$sqrx8x_outer_loop
3071
+
3072
+ movq %r9,8(%rdi)
3073
+ movq 8(%rcx),%r9
3074
+ movq %r10,16(%rdi)
3075
+ movq 16(%rcx),%r10
3076
+ movq %r11,24(%rdi)
3077
+ movq 24(%rcx),%r11
3078
+ movq %r12,32(%rdi)
3079
+ movq 32(%rcx),%r12
3080
+ movq %r13,40(%rdi)
3081
+ movq 40(%rcx),%r13
3082
+ movq %r14,48(%rdi)
3083
+ movq 48(%rcx),%r14
3084
+ movq %r15,56(%rdi)
3085
+ movq 56(%rcx),%r15
3086
+ movq %rcx,%rdi
3087
+ jmp L$sqrx8x_outer_loop
3088
+
3089
+ .p2align 5
3090
+ L$sqrx8x_outer_break:
3091
+ movq %r9,72(%rdi) // t[9]
3092
+ movq %xmm3,%rcx // -%r9
3093
+ movq %r10,80(%rdi) // ...
3094
+ movq %r11,88(%rdi)
3095
+ movq %r12,96(%rdi)
3096
+ movq %r13,104(%rdi)
3097
+ movq %r14,112(%rdi)
3098
+ leaq 48+8(%rsp),%rdi
3099
+ movq (%rsi,%rcx,1),%rdx // a[0]
3100
+
3101
+ movq 8(%rdi),%r11 // t[1]
3102
+ xorq %r10,%r10 // t[0], of=0, cf=0
3103
+ movq 0+8(%rsp),%r9 // restore %r9
3104
+ adoxq %r11,%r11
3105
+ movq 16(%rdi),%r12 // t[2] # prefetch
3106
+ movq 24(%rdi),%r13 // t[3] # prefetch
3107
+ // jmp .Lsqrx4x_shift_n_add # happens to be aligned
3108
+
3109
+ .p2align 5
3110
+ L$sqrx4x_shift_n_add:
3111
+ mulxq %rdx,%rax,%rbx
3112
+ adoxq %r12,%r12
3113
+ adcxq %r10,%rax
3114
+ .byte 0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00 // mov 8(%rsi,%rcx),%rdx # a[i+1] # prefetch
3115
+ .byte 0x4c,0x8b,0x97,0x20,0x00,0x00,0x00 // mov 32(%rdi),%r10 # t[2*i+4] # prefetch
3116
+ adoxq %r13,%r13
3117
+ adcxq %r11,%rbx
3118
+ movq 40(%rdi),%r11 // t[2*i+4+1] # prefetch
3119
+ movq %rax,0(%rdi)
3120
+ movq %rbx,8(%rdi)
3121
+
3122
+ mulxq %rdx,%rax,%rbx
3123
+ adoxq %r10,%r10
3124
+ adcxq %r12,%rax
3125
+ movq 16(%rsi,%rcx,1),%rdx // a[i+2] # prefetch
3126
+ movq 48(%rdi),%r12 // t[2*i+6] # prefetch
3127
+ adoxq %r11,%r11
3128
+ adcxq %r13,%rbx
3129
+ movq 56(%rdi),%r13 // t[2*i+6+1] # prefetch
3130
+ movq %rax,16(%rdi)
3131
+ movq %rbx,24(%rdi)
3132
+
3133
+ mulxq %rdx,%rax,%rbx
3134
+ adoxq %r12,%r12
3135
+ adcxq %r10,%rax
3136
+ movq 24(%rsi,%rcx,1),%rdx // a[i+3] # prefetch
3137
+ leaq 32(%rcx),%rcx
3138
+ movq 64(%rdi),%r10 // t[2*i+8] # prefetch
3139
+ adoxq %r13,%r13
3140
+ adcxq %r11,%rbx
3141
+ movq 72(%rdi),%r11 // t[2*i+8+1] # prefetch
3142
+ movq %rax,32(%rdi)
3143
+ movq %rbx,40(%rdi)
3144
+
3145
+ mulxq %rdx,%rax,%rbx
3146
+ adoxq %r10,%r10
3147
+ adcxq %r12,%rax
3148
+ jrcxz L$sqrx4x_shift_n_add_break
3149
+ .byte 0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00 // mov 0(%rsi,%rcx),%rdx # a[i+4] # prefetch
3150
+ adoxq %r11,%r11
3151
+ adcxq %r13,%rbx
3152
+ movq 80(%rdi),%r12 // t[2*i+10] # prefetch
3153
+ movq 88(%rdi),%r13 // t[2*i+10+1] # prefetch
3154
+ movq %rax,48(%rdi)
3155
+ movq %rbx,56(%rdi)
3156
+ leaq 64(%rdi),%rdi
3157
+ nop
3158
+ jmp L$sqrx4x_shift_n_add
3159
+
3160
+ .p2align 5
3161
+ L$sqrx4x_shift_n_add_break:
3162
+ adcxq %r13,%rbx
3163
+ movq %rax,48(%rdi)
3164
+ movq %rbx,56(%rdi)
3165
+ leaq 64(%rdi),%rdi // end of t[] buffer
3166
+ movq %xmm2,%rbp
3167
+ .alt_entry __bn_sqrx8x_reduction
3168
+ __bn_sqrx8x_reduction:
3169
+ xorl %eax,%eax // initial top-most carry bit
3170
+ movq 32+8(%rsp),%rbx // n0
3171
+ movq 48+8(%rsp),%rdx // "%r8", 8*0(%rdi)
3172
+ leaq -64(%rbp,%r9,1),%rcx // end of n[]
3173
+ // lea 48+8(%rsp,%r9,2),%rdi # end of t[] buffer
3174
+ movq %rcx,0+8(%rsp) // save end of n[]
3175
+ movq %rdi,8+8(%rsp) // save end of t[]
3176
+
3177
+ leaq 48+8(%rsp),%rdi // initial t[] window
3178
+ jmp L$sqrx8x_reduction_loop
3179
+
3180
+ .p2align 5
3181
+ L$sqrx8x_reduction_loop:
3182
+ movq 8(%rdi),%r9
3183
+ movq 16(%rdi),%r10
3184
+ movq 24(%rdi),%r11
3185
+ movq 32(%rdi),%r12
3186
+ movq %rdx,%r8
3187
+ imulq %rbx,%rdx // n0*a[i]
3188
+ movq 40(%rdi),%r13
3189
+ movq 48(%rdi),%r14
3190
+ movq 56(%rdi),%r15
3191
+ movq %rax,24+8(%rsp) // store top-most carry bit
3192
+
3193
+ leaq 64(%rdi),%rdi
3194
+ xorq %rsi,%rsi // cf=0,of=0
3195
+ movq $-8,%rcx
3196
+ jmp L$sqrx8x_reduce
3197
+
3198
+ .p2align 5
3199
+ L$sqrx8x_reduce:
3200
+ movq %r8,%rbx
3201
+ mulxq 0(%rbp),%rax,%r8 // n[0]
3202
+ adcxq %rbx,%rax // discarded
3203
+ adoxq %r9,%r8
3204
+
3205
+ mulxq 8(%rbp),%rbx,%r9 // n[1]
3206
+ adcxq %rbx,%r8
3207
+ adoxq %r10,%r9
3208
+
3209
+ mulxq 16(%rbp),%rbx,%r10
3210
+ adcxq %rbx,%r9
3211
+ adoxq %r11,%r10
3212
+
3213
+ mulxq 24(%rbp),%rbx,%r11
3214
+ adcxq %rbx,%r10
3215
+ adoxq %r12,%r11
3216
+
3217
+ .byte 0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00 // mulx 8*4(%rbp),%rbx,%r12
3218
+ movq %rdx,%rax
3219
+ movq %r8,%rdx
3220
+ adcxq %rbx,%r11
3221
+ adoxq %r13,%r12
3222
+
3223
+ mulxq 32+8(%rsp),%rbx,%rdx // %rdx discarded
3224
+ movq %rax,%rdx
3225
+ movq %rax,64+48+8(%rsp,%rcx,8) // put aside n0*a[i]
3226
+
3227
+ mulxq 40(%rbp),%rax,%r13
3228
+ adcxq %rax,%r12
3229
+ adoxq %r14,%r13
3230
+
3231
+ mulxq 48(%rbp),%rax,%r14
3232
+ adcxq %rax,%r13
3233
+ adoxq %r15,%r14
3234
+
3235
+ mulxq 56(%rbp),%rax,%r15
3236
+ movq %rbx,%rdx
3237
+ adcxq %rax,%r14
3238
+ adoxq %rsi,%r15 // %rsi is 0
3239
+ adcxq %rsi,%r15 // cf=0
3240
+
3241
+ .byte 0x67,0x67,0x67
3242
+ incq %rcx // of=0
3243
+ jnz L$sqrx8x_reduce
3244
+
3245
+ movq %rsi,%rax // xor %rax,%rax
3246
+ cmpq 0+8(%rsp),%rbp // end of n[]?
3247
+ jae L$sqrx8x_no_tail
3248
+
3249
+ movq 48+8(%rsp),%rdx // pull n0*a[0]
3250
+ addq 0(%rdi),%r8
3251
+ leaq 64(%rbp),%rbp
3252
+ movq $-8,%rcx
3253
+ adcxq 8(%rdi),%r9
3254
+ adcxq 16(%rdi),%r10
3255
+ adcq 24(%rdi),%r11
3256
+ adcq 32(%rdi),%r12
3257
+ adcq 40(%rdi),%r13
3258
+ adcq 48(%rdi),%r14
3259
+ adcq 56(%rdi),%r15
3260
+ leaq 64(%rdi),%rdi
3261
+ sbbq %rax,%rax // top carry
3262
+
3263
+ xorq %rsi,%rsi // of=0, cf=0
3264
+ movq %rax,16+8(%rsp)
3265
+ jmp L$sqrx8x_tail
3266
+
3267
+ .p2align 5
3268
+ L$sqrx8x_tail:
3269
+ movq %r8,%rbx
3270
+ mulxq 0(%rbp),%rax,%r8
3271
+ adcxq %rax,%rbx
3272
+ adoxq %r9,%r8
3273
+
3274
+ mulxq 8(%rbp),%rax,%r9
3275
+ adcxq %rax,%r8
3276
+ adoxq %r10,%r9
3277
+
3278
+ mulxq 16(%rbp),%rax,%r10
3279
+ adcxq %rax,%r9
3280
+ adoxq %r11,%r10
3281
+
3282
+ mulxq 24(%rbp),%rax,%r11
3283
+ adcxq %rax,%r10
3284
+ adoxq %r12,%r11
3285
+
3286
+ .byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 // mulx 8*4(%rbp),%rax,%r12
3287
+ adcxq %rax,%r11
3288
+ adoxq %r13,%r12
3289
+
3290
+ mulxq 40(%rbp),%rax,%r13
3291
+ adcxq %rax,%r12
3292
+ adoxq %r14,%r13
3293
+
3294
+ mulxq 48(%rbp),%rax,%r14
3295
+ adcxq %rax,%r13
3296
+ adoxq %r15,%r14
3297
+
3298
+ mulxq 56(%rbp),%rax,%r15
3299
+ movq 72+48+8(%rsp,%rcx,8),%rdx // pull n0*a[i]
3300
+ adcxq %rax,%r14
3301
+ adoxq %rsi,%r15
3302
+ movq %rbx,(%rdi,%rcx,8) // save result
3303
+ movq %r8,%rbx
3304
+ adcxq %rsi,%r15 // cf=0
3305
+
3306
+ incq %rcx // of=0
3307
+ jnz L$sqrx8x_tail
3308
+
3309
+ cmpq 0+8(%rsp),%rbp // end of n[]?
3310
+ jae L$sqrx8x_tail_done // break out of loop
3311
+
3312
+ subq 16+8(%rsp),%rsi // mov 16(%rsp),%cf
3313
+ movq 48+8(%rsp),%rdx // pull n0*a[0]
3314
+ leaq 64(%rbp),%rbp
3315
+ adcq 0(%rdi),%r8
3316
+ adcq 8(%rdi),%r9
3317
+ adcq 16(%rdi),%r10
3318
+ adcq 24(%rdi),%r11
3319
+ adcq 32(%rdi),%r12
3320
+ adcq 40(%rdi),%r13
3321
+ adcq 48(%rdi),%r14
3322
+ adcq 56(%rdi),%r15
3323
+ leaq 64(%rdi),%rdi
3324
+ sbbq %rax,%rax
3325
+ subq $8,%rcx // mov $-8,%rcx
3326
+
3327
+ xorq %rsi,%rsi // of=0, cf=0
3328
+ movq %rax,16+8(%rsp)
3329
+ jmp L$sqrx8x_tail
3330
+
3331
+ .p2align 5
3332
+ L$sqrx8x_tail_done:
3333
+ xorq %rax,%rax
3334
+ addq 24+8(%rsp),%r8 // can this overflow?
3335
+ adcq $0,%r9
3336
+ adcq $0,%r10
3337
+ adcq $0,%r11
3338
+ adcq $0,%r12
3339
+ adcq $0,%r13
3340
+ adcq $0,%r14
3341
+ adcq $0,%r15
3342
+ adcq $0,%rax
3343
+
3344
+ subq 16+8(%rsp),%rsi // mov 16(%rsp),%cf
3345
+ L$sqrx8x_no_tail: // %cf is 0 if jumped here
3346
+ adcq 0(%rdi),%r8
3347
+ movq %xmm3,%rcx
3348
+ adcq 8(%rdi),%r9
3349
+ movq 56(%rbp),%rsi
3350
+ movq %xmm2,%rbp // restore %rbp
3351
+ adcq 16(%rdi),%r10
3352
+ adcq 24(%rdi),%r11
3353
+ adcq 32(%rdi),%r12
3354
+ adcq 40(%rdi),%r13
3355
+ adcq 48(%rdi),%r14
3356
+ adcq 56(%rdi),%r15
3357
+ adcq $0,%rax // top-most carry
3358
+
3359
+ movq 32+8(%rsp),%rbx // n0
3360
+ movq 64(%rdi,%rcx,1),%rdx // modulo-scheduled "%r8"
3361
+
3362
+ movq %r8,0(%rdi) // store top 512 bits
3363
+ leaq 64(%rdi),%r8 // borrow %r8
3364
+ movq %r9,8(%rdi)
3365
+ movq %r10,16(%rdi)
3366
+ movq %r11,24(%rdi)
3367
+ movq %r12,32(%rdi)
3368
+ movq %r13,40(%rdi)
3369
+ movq %r14,48(%rdi)
3370
+ movq %r15,56(%rdi)
3371
+
3372
+ leaq 64(%rdi,%rcx,1),%rdi // start of current t[] window
3373
+ cmpq 8+8(%rsp),%r8 // end of t[]?
3374
+ jb L$sqrx8x_reduction_loop
3375
+ ret
3376
+
3377
+
3378
+ .p2align 5
3379
+
3380
+ .alt_entry __bn_postx4x_internal
3381
+ __bn_postx4x_internal:
3382
+
3383
+ movq 0(%rbp),%r12
3384
+ movq %rcx,%r10 // -%r9
3385
+ movq %rcx,%r9 // -%r9
3386
+ negq %rax
3387
+ sarq $3+2,%rcx
3388
+ // lea 48+8(%rsp,%r9),%rdi
3389
+ movq %xmm1,%rdx // restore %rdx
3390
+ movq %xmm1,%rsi // prepare for back-to-back call
3391
+ decq %r12 // so that after 'not' we get -n[0]
3392
+ movq 8(%rbp),%r13
3393
+ xorq %r8,%r8
3394
+ movq 16(%rbp),%r14
3395
+ movq 24(%rbp),%r15
3396
+ jmp L$sqrx4x_sub_entry
3397
+
3398
+ .p2align 4
3399
+ L$sqrx4x_sub:
3400
+ movq 0(%rbp),%r12
3401
+ movq 8(%rbp),%r13
3402
+ movq 16(%rbp),%r14
3403
+ movq 24(%rbp),%r15
3404
+ L$sqrx4x_sub_entry:
3405
+ andnq %rax,%r12,%r12
3406
+ leaq 32(%rbp),%rbp
3407
+ andnq %rax,%r13,%r13
3408
+ andnq %rax,%r14,%r14
3409
+ andnq %rax,%r15,%r15
3410
+
3411
+ negq %r8 // mov %r8,%cf
3412
+ adcq 0(%rdi),%r12
3413
+ adcq 8(%rdi),%r13
3414
+ adcq 16(%rdi),%r14
3415
+ adcq 24(%rdi),%r15
3416
+ movq %r12,0(%rdx)
3417
+ leaq 32(%rdi),%rdi
3418
+ movq %r13,8(%rdx)
3419
+ sbbq %r8,%r8 // mov %cf,%r8
3420
+ movq %r14,16(%rdx)
3421
+ movq %r15,24(%rdx)
3422
+ leaq 32(%rdx),%rdx
3423
+
3424
+ incq %rcx
3425
+ jnz L$sqrx4x_sub
3426
+
3427
+ negq %r9 // restore %r9
3428
+
3429
+ ret
3430
+
3431
+
3432
+ .globl _bn_scatter5
3433
+ .private_extern _bn_scatter5
3434
+
3435
+ .p2align 4
3436
+ .alt_entry _bn_scatter5
3437
+ _bn_scatter5:
3438
+
3439
+ _CET_ENDBR
3440
+ cmpl $0,%esi
3441
+ jz L$scatter_epilogue
3442
+
3443
+ // %rdx stores 32 entries, t0 through t31. Each entry has %esi words.
3444
+ // They are interleaved in memory as follows:
3445
+ //
3446
+ // t0[0] t1[0] t2[0] ... t31[0]
3447
+ // t0[1] t1[1] t2[1] ... t31[1]
3448
+ // ...
3449
+ // t0[%esi-1] t1[%esi-1] t2[%esi-1] ... t31[%esi-1]
3450
+
3451
+ leaq (%rdx,%rcx,8),%rdx
3452
+ L$scatter:
3453
+ movq (%rdi),%rax
3454
+ leaq 8(%rdi),%rdi
3455
+ movq %rax,(%rdx)
3456
+ leaq 256(%rdx),%rdx
3457
+ subl $1,%esi
3458
+ jnz L$scatter
3459
+ L$scatter_epilogue:
3460
+ ret
3461
+
3462
+
3463
+
3464
+ .globl _bn_gather5
3465
+ .private_extern _bn_gather5
3466
+
3467
+ .p2align 5
3468
+ .alt_entry _bn_gather5
3469
+ _bn_gather5:
3470
+
3471
+ L$SEH_begin_bn_gather5: // Win64 thing, but harmless in other cases
3472
+ _CET_ENDBR
3473
+ // I can't trust assembler to use specific encoding:-(
3474
+ .byte 0x4c,0x8d,0x14,0x24 // lea (%rsp),%r10
3475
+
3476
+ .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 // sub $0x108,%rsp
3477
+ leaq L$inc(%rip),%rax
3478
+ andq $-16,%rsp // shouldn't be formally required
3479
+
3480
+ movd %ecx,%xmm5
3481
+ movdqa 0(%rax),%xmm0 // 00000001000000010000000000000000
3482
+ movdqa 16(%rax),%xmm1 // 00000002000000020000000200000002
3483
+ leaq 128(%rdx),%r11 // size optimization
3484
+ leaq 128(%rsp),%rax // size optimization
3485
+
3486
+ pshufd $0,%xmm5,%xmm5 // broadcast %ecx
3487
+ movdqa %xmm1,%xmm4
3488
+ movdqa %xmm1,%xmm2
3489
+ paddd %xmm0,%xmm1
3490
+ pcmpeqd %xmm5,%xmm0 // compare to 1,0
3491
+ movdqa %xmm4,%xmm3
3492
+
3493
+ paddd %xmm1,%xmm2
3494
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
3495
+ movdqa %xmm0,-128(%rax)
3496
+ movdqa %xmm4,%xmm0
3497
+
3498
+ paddd %xmm2,%xmm3
3499
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
3500
+ movdqa %xmm1,-112(%rax)
3501
+ movdqa %xmm4,%xmm1
3502
+
3503
+ paddd %xmm3,%xmm0
3504
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
3505
+ movdqa %xmm2,-96(%rax)
3506
+ movdqa %xmm4,%xmm2
3507
+ paddd %xmm0,%xmm1
3508
+ pcmpeqd %xmm5,%xmm0 // compare to 1,0
3509
+ movdqa %xmm3,-80(%rax)
3510
+ movdqa %xmm4,%xmm3
3511
+
3512
+ paddd %xmm1,%xmm2
3513
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
3514
+ movdqa %xmm0,-64(%rax)
3515
+ movdqa %xmm4,%xmm0
3516
+
3517
+ paddd %xmm2,%xmm3
3518
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
3519
+ movdqa %xmm1,-48(%rax)
3520
+ movdqa %xmm4,%xmm1
3521
+
3522
+ paddd %xmm3,%xmm0
3523
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
3524
+ movdqa %xmm2,-32(%rax)
3525
+ movdqa %xmm4,%xmm2
3526
+ paddd %xmm0,%xmm1
3527
+ pcmpeqd %xmm5,%xmm0 // compare to 1,0
3528
+ movdqa %xmm3,-16(%rax)
3529
+ movdqa %xmm4,%xmm3
3530
+
3531
+ paddd %xmm1,%xmm2
3532
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
3533
+ movdqa %xmm0,0(%rax)
3534
+ movdqa %xmm4,%xmm0
3535
+
3536
+ paddd %xmm2,%xmm3
3537
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
3538
+ movdqa %xmm1,16(%rax)
3539
+ movdqa %xmm4,%xmm1
3540
+
3541
+ paddd %xmm3,%xmm0
3542
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
3543
+ movdqa %xmm2,32(%rax)
3544
+ movdqa %xmm4,%xmm2
3545
+ paddd %xmm0,%xmm1
3546
+ pcmpeqd %xmm5,%xmm0 // compare to 1,0
3547
+ movdqa %xmm3,48(%rax)
3548
+ movdqa %xmm4,%xmm3
3549
+
3550
+ paddd %xmm1,%xmm2
3551
+ pcmpeqd %xmm5,%xmm1 // compare to 3,2
3552
+ movdqa %xmm0,64(%rax)
3553
+ movdqa %xmm4,%xmm0
3554
+
3555
+ paddd %xmm2,%xmm3
3556
+ pcmpeqd %xmm5,%xmm2 // compare to 5,4
3557
+ movdqa %xmm1,80(%rax)
3558
+ movdqa %xmm4,%xmm1
3559
+
3560
+ paddd %xmm3,%xmm0
3561
+ pcmpeqd %xmm5,%xmm3 // compare to 7,6
3562
+ movdqa %xmm2,96(%rax)
3563
+ movdqa %xmm4,%xmm2
3564
+ movdqa %xmm3,112(%rax)
3565
+ jmp L$gather
3566
+
3567
+ .p2align 5
3568
+ L$gather:
3569
+ pxor %xmm4,%xmm4
3570
+ pxor %xmm5,%xmm5
3571
+ movdqa -128(%r11),%xmm0
3572
+ movdqa -112(%r11),%xmm1
3573
+ movdqa -96(%r11),%xmm2
3574
+ pand -128(%rax),%xmm0
3575
+ movdqa -80(%r11),%xmm3
3576
+ pand -112(%rax),%xmm1
3577
+ por %xmm0,%xmm4
3578
+ pand -96(%rax),%xmm2
3579
+ por %xmm1,%xmm5
3580
+ pand -80(%rax),%xmm3
3581
+ por %xmm2,%xmm4
3582
+ por %xmm3,%xmm5
3583
+ movdqa -64(%r11),%xmm0
3584
+ movdqa -48(%r11),%xmm1
3585
+ movdqa -32(%r11),%xmm2
3586
+ pand -64(%rax),%xmm0
3587
+ movdqa -16(%r11),%xmm3
3588
+ pand -48(%rax),%xmm1
3589
+ por %xmm0,%xmm4
3590
+ pand -32(%rax),%xmm2
3591
+ por %xmm1,%xmm5
3592
+ pand -16(%rax),%xmm3
3593
+ por %xmm2,%xmm4
3594
+ por %xmm3,%xmm5
3595
+ movdqa 0(%r11),%xmm0
3596
+ movdqa 16(%r11),%xmm1
3597
+ movdqa 32(%r11),%xmm2
3598
+ pand 0(%rax),%xmm0
3599
+ movdqa 48(%r11),%xmm3
3600
+ pand 16(%rax),%xmm1
3601
+ por %xmm0,%xmm4
3602
+ pand 32(%rax),%xmm2
3603
+ por %xmm1,%xmm5
3604
+ pand 48(%rax),%xmm3
3605
+ por %xmm2,%xmm4
3606
+ por %xmm3,%xmm5
3607
+ movdqa 64(%r11),%xmm0
3608
+ movdqa 80(%r11),%xmm1
3609
+ movdqa 96(%r11),%xmm2
3610
+ pand 64(%rax),%xmm0
3611
+ movdqa 112(%r11),%xmm3
3612
+ pand 80(%rax),%xmm1
3613
+ por %xmm0,%xmm4
3614
+ pand 96(%rax),%xmm2
3615
+ por %xmm1,%xmm5
3616
+ pand 112(%rax),%xmm3
3617
+ por %xmm2,%xmm4
3618
+ por %xmm3,%xmm5
3619
+ por %xmm5,%xmm4
3620
+ leaq 256(%r11),%r11
3621
+ // Combine the upper and lower halves of %xmm0.
3622
+ pshufd $0x4e,%xmm4,%xmm0 // Swap upper and lower halves.
3623
+ por %xmm4,%xmm0
3624
+ movq %xmm0,(%rdi) // m0=bp[0]
3625
+ leaq 8(%rdi),%rdi
3626
+ subl $1,%esi
3627
+ jnz L$gather
3628
+
3629
+ leaq (%r10),%rsp
3630
+
3631
+ ret
3632
+ L$SEH_end_bn_gather5:
3633
+
3634
+
3635
+ .section __DATA,__const
3636
+
3637
+ .p2align 6
3638
+ mont5_increments:
3639
+ L$inc:
3640
+ .long 0,0, 1,1
3641
+ .long 2,2, 2,2
3642
+ .byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115,99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
3643
+ .text
3644
+ #endif