visaljs 0.0.2 → 0.0.4

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