ring-native 0.0.0

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 (261) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/Gemfile +3 -0
  4. data/README.md +22 -0
  5. data/Rakefile +1 -0
  6. data/ext/ring/extconf.rb +29 -0
  7. data/lib/ring/native.rb +8 -0
  8. data/lib/ring/native/version.rb +5 -0
  9. data/ring-native.gemspec +25 -0
  10. data/vendor/ring/BUILDING.md +40 -0
  11. data/vendor/ring/Cargo.toml +43 -0
  12. data/vendor/ring/LICENSE +185 -0
  13. data/vendor/ring/Makefile +35 -0
  14. data/vendor/ring/PORTING.md +163 -0
  15. data/vendor/ring/README.md +113 -0
  16. data/vendor/ring/STYLE.md +197 -0
  17. data/vendor/ring/appveyor.yml +27 -0
  18. data/vendor/ring/build.rs +108 -0
  19. data/vendor/ring/crypto/aes/aes.c +1142 -0
  20. data/vendor/ring/crypto/aes/aes_test.Windows.vcxproj +25 -0
  21. data/vendor/ring/crypto/aes/aes_test.cc +93 -0
  22. data/vendor/ring/crypto/aes/asm/aes-586.pl +2368 -0
  23. data/vendor/ring/crypto/aes/asm/aes-armv4.pl +1249 -0
  24. data/vendor/ring/crypto/aes/asm/aes-x86_64.pl +2246 -0
  25. data/vendor/ring/crypto/aes/asm/aesni-x86.pl +1318 -0
  26. data/vendor/ring/crypto/aes/asm/aesni-x86_64.pl +2084 -0
  27. data/vendor/ring/crypto/aes/asm/aesv8-armx.pl +675 -0
  28. data/vendor/ring/crypto/aes/asm/bsaes-armv7.pl +1364 -0
  29. data/vendor/ring/crypto/aes/asm/bsaes-x86_64.pl +1565 -0
  30. data/vendor/ring/crypto/aes/asm/vpaes-x86.pl +841 -0
  31. data/vendor/ring/crypto/aes/asm/vpaes-x86_64.pl +1116 -0
  32. data/vendor/ring/crypto/aes/internal.h +87 -0
  33. data/vendor/ring/crypto/aes/mode_wrappers.c +61 -0
  34. data/vendor/ring/crypto/bn/add.c +394 -0
  35. data/vendor/ring/crypto/bn/asm/armv4-mont.pl +694 -0
  36. data/vendor/ring/crypto/bn/asm/armv8-mont.pl +1503 -0
  37. data/vendor/ring/crypto/bn/asm/bn-586.pl +774 -0
  38. data/vendor/ring/crypto/bn/asm/co-586.pl +287 -0
  39. data/vendor/ring/crypto/bn/asm/rsaz-avx2.pl +1882 -0
  40. data/vendor/ring/crypto/bn/asm/x86-mont.pl +592 -0
  41. data/vendor/ring/crypto/bn/asm/x86_64-gcc.c +599 -0
  42. data/vendor/ring/crypto/bn/asm/x86_64-mont.pl +1393 -0
  43. data/vendor/ring/crypto/bn/asm/x86_64-mont5.pl +3507 -0
  44. data/vendor/ring/crypto/bn/bn.c +352 -0
  45. data/vendor/ring/crypto/bn/bn_asn1.c +74 -0
  46. data/vendor/ring/crypto/bn/bn_test.Windows.vcxproj +25 -0
  47. data/vendor/ring/crypto/bn/bn_test.cc +1696 -0
  48. data/vendor/ring/crypto/bn/cmp.c +200 -0
  49. data/vendor/ring/crypto/bn/convert.c +433 -0
  50. data/vendor/ring/crypto/bn/ctx.c +311 -0
  51. data/vendor/ring/crypto/bn/div.c +594 -0
  52. data/vendor/ring/crypto/bn/exponentiation.c +1335 -0
  53. data/vendor/ring/crypto/bn/gcd.c +711 -0
  54. data/vendor/ring/crypto/bn/generic.c +1019 -0
  55. data/vendor/ring/crypto/bn/internal.h +316 -0
  56. data/vendor/ring/crypto/bn/montgomery.c +516 -0
  57. data/vendor/ring/crypto/bn/mul.c +888 -0
  58. data/vendor/ring/crypto/bn/prime.c +829 -0
  59. data/vendor/ring/crypto/bn/random.c +334 -0
  60. data/vendor/ring/crypto/bn/rsaz_exp.c +262 -0
  61. data/vendor/ring/crypto/bn/rsaz_exp.h +53 -0
  62. data/vendor/ring/crypto/bn/shift.c +276 -0
  63. data/vendor/ring/crypto/bytestring/bytestring_test.Windows.vcxproj +25 -0
  64. data/vendor/ring/crypto/bytestring/bytestring_test.cc +421 -0
  65. data/vendor/ring/crypto/bytestring/cbb.c +399 -0
  66. data/vendor/ring/crypto/bytestring/cbs.c +227 -0
  67. data/vendor/ring/crypto/bytestring/internal.h +46 -0
  68. data/vendor/ring/crypto/chacha/chacha_generic.c +140 -0
  69. data/vendor/ring/crypto/chacha/chacha_vec.c +323 -0
  70. data/vendor/ring/crypto/chacha/chacha_vec_arm.S +1447 -0
  71. data/vendor/ring/crypto/chacha/chacha_vec_arm_generate.go +153 -0
  72. data/vendor/ring/crypto/cipher/cipher_test.Windows.vcxproj +25 -0
  73. data/vendor/ring/crypto/cipher/e_aes.c +390 -0
  74. data/vendor/ring/crypto/cipher/e_chacha20poly1305.c +208 -0
  75. data/vendor/ring/crypto/cipher/internal.h +173 -0
  76. data/vendor/ring/crypto/cipher/test/aes_128_gcm_tests.txt +543 -0
  77. data/vendor/ring/crypto/cipher/test/aes_128_key_wrap_tests.txt +9 -0
  78. data/vendor/ring/crypto/cipher/test/aes_256_gcm_tests.txt +475 -0
  79. data/vendor/ring/crypto/cipher/test/aes_256_key_wrap_tests.txt +23 -0
  80. data/vendor/ring/crypto/cipher/test/chacha20_poly1305_old_tests.txt +422 -0
  81. data/vendor/ring/crypto/cipher/test/chacha20_poly1305_tests.txt +484 -0
  82. data/vendor/ring/crypto/cipher/test/cipher_test.txt +100 -0
  83. data/vendor/ring/crypto/constant_time_test.Windows.vcxproj +25 -0
  84. data/vendor/ring/crypto/constant_time_test.c +304 -0
  85. data/vendor/ring/crypto/cpu-arm-asm.S +32 -0
  86. data/vendor/ring/crypto/cpu-arm.c +199 -0
  87. data/vendor/ring/crypto/cpu-intel.c +261 -0
  88. data/vendor/ring/crypto/crypto.c +151 -0
  89. data/vendor/ring/crypto/curve25519/asm/x25519-arm.S +2118 -0
  90. data/vendor/ring/crypto/curve25519/curve25519.c +4888 -0
  91. data/vendor/ring/crypto/curve25519/x25519_test.cc +128 -0
  92. data/vendor/ring/crypto/digest/md32_common.h +181 -0
  93. data/vendor/ring/crypto/ec/asm/p256-x86_64-asm.pl +2725 -0
  94. data/vendor/ring/crypto/ec/ec.c +193 -0
  95. data/vendor/ring/crypto/ec/ec_curves.c +61 -0
  96. data/vendor/ring/crypto/ec/ec_key.c +228 -0
  97. data/vendor/ring/crypto/ec/ec_montgomery.c +114 -0
  98. data/vendor/ring/crypto/ec/example_mul.Windows.vcxproj +25 -0
  99. data/vendor/ring/crypto/ec/internal.h +243 -0
  100. data/vendor/ring/crypto/ec/oct.c +253 -0
  101. data/vendor/ring/crypto/ec/p256-64.c +1794 -0
  102. data/vendor/ring/crypto/ec/p256-x86_64-table.h +9548 -0
  103. data/vendor/ring/crypto/ec/p256-x86_64.c +509 -0
  104. data/vendor/ring/crypto/ec/simple.c +1007 -0
  105. data/vendor/ring/crypto/ec/util-64.c +183 -0
  106. data/vendor/ring/crypto/ec/wnaf.c +508 -0
  107. data/vendor/ring/crypto/ecdh/ecdh.c +155 -0
  108. data/vendor/ring/crypto/ecdsa/ecdsa.c +304 -0
  109. data/vendor/ring/crypto/ecdsa/ecdsa_asn1.c +193 -0
  110. data/vendor/ring/crypto/ecdsa/ecdsa_test.Windows.vcxproj +25 -0
  111. data/vendor/ring/crypto/ecdsa/ecdsa_test.cc +327 -0
  112. data/vendor/ring/crypto/header_removed.h +17 -0
  113. data/vendor/ring/crypto/internal.h +495 -0
  114. data/vendor/ring/crypto/libring.Windows.vcxproj +101 -0
  115. data/vendor/ring/crypto/mem.c +98 -0
  116. data/vendor/ring/crypto/modes/asm/aesni-gcm-x86_64.pl +1045 -0
  117. data/vendor/ring/crypto/modes/asm/ghash-armv4.pl +517 -0
  118. data/vendor/ring/crypto/modes/asm/ghash-x86.pl +1393 -0
  119. data/vendor/ring/crypto/modes/asm/ghash-x86_64.pl +1741 -0
  120. data/vendor/ring/crypto/modes/asm/ghashv8-armx.pl +422 -0
  121. data/vendor/ring/crypto/modes/ctr.c +226 -0
  122. data/vendor/ring/crypto/modes/gcm.c +1206 -0
  123. data/vendor/ring/crypto/modes/gcm_test.Windows.vcxproj +25 -0
  124. data/vendor/ring/crypto/modes/gcm_test.c +348 -0
  125. data/vendor/ring/crypto/modes/internal.h +299 -0
  126. data/vendor/ring/crypto/perlasm/arm-xlate.pl +170 -0
  127. data/vendor/ring/crypto/perlasm/readme +100 -0
  128. data/vendor/ring/crypto/perlasm/x86_64-xlate.pl +1164 -0
  129. data/vendor/ring/crypto/perlasm/x86asm.pl +292 -0
  130. data/vendor/ring/crypto/perlasm/x86gas.pl +263 -0
  131. data/vendor/ring/crypto/perlasm/x86masm.pl +200 -0
  132. data/vendor/ring/crypto/perlasm/x86nasm.pl +187 -0
  133. data/vendor/ring/crypto/poly1305/poly1305.c +331 -0
  134. data/vendor/ring/crypto/poly1305/poly1305_arm.c +301 -0
  135. data/vendor/ring/crypto/poly1305/poly1305_arm_asm.S +2015 -0
  136. data/vendor/ring/crypto/poly1305/poly1305_test.Windows.vcxproj +25 -0
  137. data/vendor/ring/crypto/poly1305/poly1305_test.cc +80 -0
  138. data/vendor/ring/crypto/poly1305/poly1305_test.txt +52 -0
  139. data/vendor/ring/crypto/poly1305/poly1305_vec.c +892 -0
  140. data/vendor/ring/crypto/rand/asm/rdrand-x86_64.pl +75 -0
  141. data/vendor/ring/crypto/rand/internal.h +32 -0
  142. data/vendor/ring/crypto/rand/rand.c +189 -0
  143. data/vendor/ring/crypto/rand/urandom.c +219 -0
  144. data/vendor/ring/crypto/rand/windows.c +56 -0
  145. data/vendor/ring/crypto/refcount_c11.c +66 -0
  146. data/vendor/ring/crypto/refcount_lock.c +53 -0
  147. data/vendor/ring/crypto/refcount_test.Windows.vcxproj +25 -0
  148. data/vendor/ring/crypto/refcount_test.c +58 -0
  149. data/vendor/ring/crypto/rsa/blinding.c +462 -0
  150. data/vendor/ring/crypto/rsa/internal.h +108 -0
  151. data/vendor/ring/crypto/rsa/padding.c +300 -0
  152. data/vendor/ring/crypto/rsa/rsa.c +450 -0
  153. data/vendor/ring/crypto/rsa/rsa_asn1.c +261 -0
  154. data/vendor/ring/crypto/rsa/rsa_impl.c +944 -0
  155. data/vendor/ring/crypto/rsa/rsa_test.Windows.vcxproj +25 -0
  156. data/vendor/ring/crypto/rsa/rsa_test.cc +437 -0
  157. data/vendor/ring/crypto/sha/asm/sha-armv8.pl +436 -0
  158. data/vendor/ring/crypto/sha/asm/sha-x86_64.pl +2390 -0
  159. data/vendor/ring/crypto/sha/asm/sha256-586.pl +1275 -0
  160. data/vendor/ring/crypto/sha/asm/sha256-armv4.pl +735 -0
  161. data/vendor/ring/crypto/sha/asm/sha256-armv8.pl +14 -0
  162. data/vendor/ring/crypto/sha/asm/sha256-x86_64.pl +14 -0
  163. data/vendor/ring/crypto/sha/asm/sha512-586.pl +911 -0
  164. data/vendor/ring/crypto/sha/asm/sha512-armv4.pl +666 -0
  165. data/vendor/ring/crypto/sha/asm/sha512-armv8.pl +14 -0
  166. data/vendor/ring/crypto/sha/asm/sha512-x86_64.pl +14 -0
  167. data/vendor/ring/crypto/sha/sha1.c +271 -0
  168. data/vendor/ring/crypto/sha/sha256.c +204 -0
  169. data/vendor/ring/crypto/sha/sha512.c +355 -0
  170. data/vendor/ring/crypto/test/file_test.cc +326 -0
  171. data/vendor/ring/crypto/test/file_test.h +181 -0
  172. data/vendor/ring/crypto/test/malloc.cc +150 -0
  173. data/vendor/ring/crypto/test/scoped_types.h +95 -0
  174. data/vendor/ring/crypto/test/test.Windows.vcxproj +35 -0
  175. data/vendor/ring/crypto/test/test_util.cc +46 -0
  176. data/vendor/ring/crypto/test/test_util.h +41 -0
  177. data/vendor/ring/crypto/thread_none.c +55 -0
  178. data/vendor/ring/crypto/thread_pthread.c +165 -0
  179. data/vendor/ring/crypto/thread_test.Windows.vcxproj +25 -0
  180. data/vendor/ring/crypto/thread_test.c +200 -0
  181. data/vendor/ring/crypto/thread_win.c +282 -0
  182. data/vendor/ring/examples/checkdigest.rs +103 -0
  183. data/vendor/ring/include/openssl/aes.h +121 -0
  184. data/vendor/ring/include/openssl/arm_arch.h +129 -0
  185. data/vendor/ring/include/openssl/base.h +156 -0
  186. data/vendor/ring/include/openssl/bn.h +794 -0
  187. data/vendor/ring/include/openssl/buffer.h +18 -0
  188. data/vendor/ring/include/openssl/bytestring.h +235 -0
  189. data/vendor/ring/include/openssl/chacha.h +37 -0
  190. data/vendor/ring/include/openssl/cmac.h +76 -0
  191. data/vendor/ring/include/openssl/cpu.h +184 -0
  192. data/vendor/ring/include/openssl/crypto.h +43 -0
  193. data/vendor/ring/include/openssl/curve25519.h +88 -0
  194. data/vendor/ring/include/openssl/ec.h +225 -0
  195. data/vendor/ring/include/openssl/ec_key.h +129 -0
  196. data/vendor/ring/include/openssl/ecdh.h +110 -0
  197. data/vendor/ring/include/openssl/ecdsa.h +156 -0
  198. data/vendor/ring/include/openssl/err.h +201 -0
  199. data/vendor/ring/include/openssl/mem.h +101 -0
  200. data/vendor/ring/include/openssl/obj_mac.h +71 -0
  201. data/vendor/ring/include/openssl/opensslfeatures.h +68 -0
  202. data/vendor/ring/include/openssl/opensslv.h +18 -0
  203. data/vendor/ring/include/openssl/ossl_typ.h +18 -0
  204. data/vendor/ring/include/openssl/poly1305.h +51 -0
  205. data/vendor/ring/include/openssl/rand.h +70 -0
  206. data/vendor/ring/include/openssl/rsa.h +399 -0
  207. data/vendor/ring/include/openssl/thread.h +133 -0
  208. data/vendor/ring/include/openssl/type_check.h +71 -0
  209. data/vendor/ring/mk/Common.props +63 -0
  210. data/vendor/ring/mk/Windows.props +42 -0
  211. data/vendor/ring/mk/WindowsTest.props +18 -0
  212. data/vendor/ring/mk/appveyor.bat +62 -0
  213. data/vendor/ring/mk/bottom_of_makefile.mk +54 -0
  214. data/vendor/ring/mk/ring.mk +266 -0
  215. data/vendor/ring/mk/top_of_makefile.mk +214 -0
  216. data/vendor/ring/mk/travis.sh +40 -0
  217. data/vendor/ring/mk/update-travis-yml.py +229 -0
  218. data/vendor/ring/ring.sln +153 -0
  219. data/vendor/ring/src/aead.rs +682 -0
  220. data/vendor/ring/src/agreement.rs +248 -0
  221. data/vendor/ring/src/c.rs +129 -0
  222. data/vendor/ring/src/constant_time.rs +37 -0
  223. data/vendor/ring/src/der.rs +96 -0
  224. data/vendor/ring/src/digest.rs +690 -0
  225. data/vendor/ring/src/digest_tests.txt +57 -0
  226. data/vendor/ring/src/ecc.rs +28 -0
  227. data/vendor/ring/src/ecc_build.rs +279 -0
  228. data/vendor/ring/src/ecc_curves.rs +117 -0
  229. data/vendor/ring/src/ed25519_tests.txt +2579 -0
  230. data/vendor/ring/src/exe_tests.rs +46 -0
  231. data/vendor/ring/src/ffi.rs +29 -0
  232. data/vendor/ring/src/file_test.rs +187 -0
  233. data/vendor/ring/src/hkdf.rs +153 -0
  234. data/vendor/ring/src/hkdf_tests.txt +59 -0
  235. data/vendor/ring/src/hmac.rs +414 -0
  236. data/vendor/ring/src/hmac_tests.txt +97 -0
  237. data/vendor/ring/src/input.rs +312 -0
  238. data/vendor/ring/src/lib.rs +41 -0
  239. data/vendor/ring/src/pbkdf2.rs +265 -0
  240. data/vendor/ring/src/pbkdf2_tests.txt +113 -0
  241. data/vendor/ring/src/polyfill.rs +57 -0
  242. data/vendor/ring/src/rand.rs +28 -0
  243. data/vendor/ring/src/signature.rs +314 -0
  244. data/vendor/ring/third-party/NIST/README.md +9 -0
  245. data/vendor/ring/third-party/NIST/SHAVS/SHA1LongMsg.rsp +263 -0
  246. data/vendor/ring/third-party/NIST/SHAVS/SHA1Monte.rsp +309 -0
  247. data/vendor/ring/third-party/NIST/SHAVS/SHA1ShortMsg.rsp +267 -0
  248. data/vendor/ring/third-party/NIST/SHAVS/SHA224LongMsg.rsp +263 -0
  249. data/vendor/ring/third-party/NIST/SHAVS/SHA224Monte.rsp +309 -0
  250. data/vendor/ring/third-party/NIST/SHAVS/SHA224ShortMsg.rsp +267 -0
  251. data/vendor/ring/third-party/NIST/SHAVS/SHA256LongMsg.rsp +263 -0
  252. data/vendor/ring/third-party/NIST/SHAVS/SHA256Monte.rsp +309 -0
  253. data/vendor/ring/third-party/NIST/SHAVS/SHA256ShortMsg.rsp +267 -0
  254. data/vendor/ring/third-party/NIST/SHAVS/SHA384LongMsg.rsp +519 -0
  255. data/vendor/ring/third-party/NIST/SHAVS/SHA384Monte.rsp +309 -0
  256. data/vendor/ring/third-party/NIST/SHAVS/SHA384ShortMsg.rsp +523 -0
  257. data/vendor/ring/third-party/NIST/SHAVS/SHA512LongMsg.rsp +519 -0
  258. data/vendor/ring/third-party/NIST/SHAVS/SHA512Monte.rsp +309 -0
  259. data/vendor/ring/third-party/NIST/SHAVS/SHA512ShortMsg.rsp +523 -0
  260. data/vendor/ring/third-party/NIST/sha256sums.txt +1 -0
  261. metadata +333 -0
@@ -0,0 +1,151 @@
1
+ /* Copyright (c) 2014, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #include <openssl/crypto.h>
16
+
17
+ #include <stdint.h>
18
+
19
+ #include <openssl/cpu.h>
20
+
21
+ #include "internal.h"
22
+
23
+
24
+ #if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_STATIC_ARMCAP) && \
25
+ (defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
26
+ defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64))
27
+ /* x86, x86_64 and the ARMs need to record the result of a cpuid call for the
28
+ * asm to work correctly, unless compiled without asm code. */
29
+ #define NEED_CPUID
30
+
31
+ #else
32
+
33
+ /* Otherwise, don't emit a static initialiser. */
34
+
35
+ #if !defined(BORINGSSL_NO_STATIC_INITIALIZER)
36
+ #define BORINGSSL_NO_STATIC_INITIALIZER
37
+ #endif
38
+
39
+ #endif /* !OPENSSL_NO_ASM && (OPENSSL_X86 || OPENSSL_X86_64 ||
40
+ OPENSSL_ARM || OPENSSL_AARCH64) */
41
+
42
+
43
+ /* The capability variables are defined in this file in order to work around a
44
+ * linker bug. When linking with a .a, if no symbols in a .o are referenced
45
+ * then the .o is discarded, even if it has constructor functions.
46
+ *
47
+ * This still means that any binaries that don't include some functionality
48
+ * that tests the capability values will still skip the constructor but, so
49
+ * far, the init constructor function only sets the capability variables. */
50
+
51
+ #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
52
+ /* This value must be explicitly initialised to zero in order to work around a
53
+ * bug in libtool or the linker on OS X.
54
+ *
55
+ * If not initialised then it becomes a "common symbol". When put into an
56
+ * archive, linking on OS X will fail to resolve common symbols. By
57
+ * initialising it to zero, it becomes a "data symbol", which isn't so
58
+ * affected. */
59
+ uint32_t OPENSSL_ia32cap_P[4] = {0};
60
+ #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
61
+
62
+ #include <openssl/arm_arch.h>
63
+
64
+ #if defined(OPENSSL_STATIC_ARMCAP)
65
+
66
+ uint32_t OPENSSL_armcap_P =
67
+ #if defined(OPENSSL_STATIC_ARMCAP_NEON) || defined(__ARM_NEON__)
68
+ ARMV7_NEON | ARMV7_NEON_FUNCTIONAL |
69
+ #endif
70
+ #if defined(OPENSSL_STATIC_ARMCAP_AES)
71
+ ARMV8_AES |
72
+ #endif
73
+ #if defined(OPENSSL_STATIC_ARMCAP_SHA1)
74
+ ARMV8_SHA1 |
75
+ #endif
76
+ #if defined(OPENSSL_STATIC_ARMCAP_SHA256)
77
+ ARMV8_SHA256 |
78
+ #endif
79
+ #if defined(OPENSSL_STATIC_ARMCAP_PMULL)
80
+ ARMV8_PMULL |
81
+ #endif
82
+ 0;
83
+
84
+ #elif defined(__ARM_NEON__)
85
+ uint32_t OPENSSL_armcap_P = ARMV7_NEON | ARMV7_NEON_FUNCTIONAL;
86
+ #else
87
+ uint32_t OPENSSL_armcap_P = ARMV7_NEON_FUNCTIONAL;
88
+ #endif
89
+
90
+ #endif
91
+
92
+
93
+ #if defined(OPENSSL_WINDOWS) && !defined(BORINGSSL_NO_STATIC_INITIALIZER)
94
+ #define OPENSSL_CDECL __cdecl
95
+ #else
96
+ #define OPENSSL_CDECL
97
+ #endif
98
+
99
+ #if defined(BORINGSSL_NO_STATIC_INITIALIZER)
100
+ static CRYPTO_once_t once = CRYPTO_ONCE_INIT;
101
+ #elif defined(OPENSSL_WINDOWS)
102
+ #pragma section(".CRT$XCU", read)
103
+ static void __cdecl do_library_init(void);
104
+ __declspec(allocate(".CRT$XCU")) void(*library_init_constructor)(void) =
105
+ do_library_init;
106
+ #else
107
+ static void do_library_init(void) __attribute__ ((constructor));
108
+ #endif
109
+
110
+ /* do_library_init is the actual initialization function. If
111
+ * BORINGSSL_NO_STATIC_INITIALIZER isn't defined, this is set as a static
112
+ * initializer. Otherwise, it is called by CRYPTO_library_init. */
113
+ static void OPENSSL_CDECL do_library_init(void) {
114
+ /* WARNING: this function may only configure the capability variables. See the
115
+ * note above about the linker bug. */
116
+ #if defined(NEED_CPUID)
117
+ OPENSSL_cpuid_setup();
118
+ #endif
119
+ }
120
+
121
+ void CRYPTO_library_init(void) {
122
+ /* TODO(davidben): It would be tidier if this build knob could be replaced
123
+ * with an internal lazy-init mechanism that would handle things correctly
124
+ * in-library. https://crbug.com/542879 */
125
+ #if defined(BORINGSSL_NO_STATIC_INITIALIZER)
126
+ CRYPTO_once(&once, do_library_init);
127
+ #endif
128
+ }
129
+
130
+ /* These functions allow tests in other languages to verify that their
131
+ * understanding of the C types matches the C compiler's understanding. */
132
+
133
+ #define DEFINE_METRICS_FUNCTIONS(ty) \
134
+ OPENSSL_EXPORT ty ring_##ty##_align(void) { return alignof(ty); } \
135
+ OPENSSL_EXPORT ty ring_##ty##_size(void) { return sizeof(ty); }
136
+
137
+ DEFINE_METRICS_FUNCTIONS(int8_t)
138
+ DEFINE_METRICS_FUNCTIONS(uint8_t)
139
+
140
+ DEFINE_METRICS_FUNCTIONS(int16_t)
141
+ DEFINE_METRICS_FUNCTIONS(uint16_t)
142
+
143
+ DEFINE_METRICS_FUNCTIONS(int32_t)
144
+ DEFINE_METRICS_FUNCTIONS(uint32_t)
145
+
146
+ DEFINE_METRICS_FUNCTIONS(int64_t)
147
+ DEFINE_METRICS_FUNCTIONS(uint64_t)
148
+
149
+ DEFINE_METRICS_FUNCTIONS(int)
150
+
151
+ DEFINE_METRICS_FUNCTIONS(size_t)
@@ -0,0 +1,2118 @@
1
+ /* Copyright (c) 2015, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ /* This file is taken from crypto_scalarmult/curve25519/neon2/scalarmult.s in
16
+ * SUPERCOP 20141124 (http://bench.cr.yp.to/supercop.html). That code is public
17
+ * domain licensed but the standard ISC license is included above to keep
18
+ * licensing simple. */
19
+
20
+ .fpu neon
21
+ .text
22
+ .align 4
23
+
24
+ .global x25519_NEON
25
+ .hidden x25519_NEON
26
+ .type x25519_NEON, %function
27
+ x25519_NEON:
28
+ vpush {q4,q5,q6,q7}
29
+ mov r12,sp
30
+ sub sp,sp,#736
31
+ and sp,sp,#0xffffffe0
32
+ strd r4,[sp,#0]
33
+ strd r6,[sp,#8]
34
+ strd r8,[sp,#16]
35
+ strd r10,[sp,#24]
36
+ str r12,[sp,#480]
37
+ str r14,[sp,#484]
38
+ mov r0,r0
39
+ mov r1,r1
40
+ mov r2,r2
41
+ add r3,sp,#32
42
+ ldr r4,=0
43
+ ldr r5,=254
44
+ vmov.i32 q0,#1
45
+ vshr.u64 q1,q0,#7
46
+ vshr.u64 q0,q0,#8
47
+ vmov.i32 d4,#19
48
+ vmov.i32 d5,#38
49
+ add r6,sp,#512
50
+ vst1.8 {d2-d3},[r6,: 128]
51
+ add r6,sp,#528
52
+ vst1.8 {d0-d1},[r6,: 128]
53
+ add r6,sp,#544
54
+ vst1.8 {d4-d5},[r6,: 128]
55
+ add r6,r3,#0
56
+ vmov.i32 q2,#0
57
+ vst1.8 {d4-d5},[r6,: 128]!
58
+ vst1.8 {d4-d5},[r6,: 128]!
59
+ vst1.8 d4,[r6,: 64]
60
+ add r6,r3,#0
61
+ ldr r7,=960
62
+ sub r7,r7,#2
63
+ neg r7,r7
64
+ sub r7,r7,r7,LSL #7
65
+ str r7,[r6]
66
+ add r6,sp,#704
67
+ vld1.8 {d4-d5},[r1]!
68
+ vld1.8 {d6-d7},[r1]
69
+ vst1.8 {d4-d5},[r6,: 128]!
70
+ vst1.8 {d6-d7},[r6,: 128]
71
+ sub r1,r6,#16
72
+ ldrb r6,[r1]
73
+ and r6,r6,#248
74
+ strb r6,[r1]
75
+ ldrb r6,[r1,#31]
76
+ and r6,r6,#127
77
+ orr r6,r6,#64
78
+ strb r6,[r1,#31]
79
+ vmov.i64 q2,#0xffffffff
80
+ vshr.u64 q3,q2,#7
81
+ vshr.u64 q2,q2,#6
82
+ vld1.8 {d8},[r2]
83
+ vld1.8 {d10},[r2]
84
+ add r2,r2,#6
85
+ vld1.8 {d12},[r2]
86
+ vld1.8 {d14},[r2]
87
+ add r2,r2,#6
88
+ vld1.8 {d16},[r2]
89
+ add r2,r2,#4
90
+ vld1.8 {d18},[r2]
91
+ vld1.8 {d20},[r2]
92
+ add r2,r2,#6
93
+ vld1.8 {d22},[r2]
94
+ add r2,r2,#2
95
+ vld1.8 {d24},[r2]
96
+ vld1.8 {d26},[r2]
97
+ vshr.u64 q5,q5,#26
98
+ vshr.u64 q6,q6,#3
99
+ vshr.u64 q7,q7,#29
100
+ vshr.u64 q8,q8,#6
101
+ vshr.u64 q10,q10,#25
102
+ vshr.u64 q11,q11,#3
103
+ vshr.u64 q12,q12,#12
104
+ vshr.u64 q13,q13,#38
105
+ vand q4,q4,q2
106
+ vand q6,q6,q2
107
+ vand q8,q8,q2
108
+ vand q10,q10,q2
109
+ vand q2,q12,q2
110
+ vand q5,q5,q3
111
+ vand q7,q7,q3
112
+ vand q9,q9,q3
113
+ vand q11,q11,q3
114
+ vand q3,q13,q3
115
+ add r2,r3,#48
116
+ vadd.i64 q12,q4,q1
117
+ vadd.i64 q13,q10,q1
118
+ vshr.s64 q12,q12,#26
119
+ vshr.s64 q13,q13,#26
120
+ vadd.i64 q5,q5,q12
121
+ vshl.i64 q12,q12,#26
122
+ vadd.i64 q14,q5,q0
123
+ vadd.i64 q11,q11,q13
124
+ vshl.i64 q13,q13,#26
125
+ vadd.i64 q15,q11,q0
126
+ vsub.i64 q4,q4,q12
127
+ vshr.s64 q12,q14,#25
128
+ vsub.i64 q10,q10,q13
129
+ vshr.s64 q13,q15,#25
130
+ vadd.i64 q6,q6,q12
131
+ vshl.i64 q12,q12,#25
132
+ vadd.i64 q14,q6,q1
133
+ vadd.i64 q2,q2,q13
134
+ vsub.i64 q5,q5,q12
135
+ vshr.s64 q12,q14,#26
136
+ vshl.i64 q13,q13,#25
137
+ vadd.i64 q14,q2,q1
138
+ vadd.i64 q7,q7,q12
139
+ vshl.i64 q12,q12,#26
140
+ vadd.i64 q15,q7,q0
141
+ vsub.i64 q11,q11,q13
142
+ vshr.s64 q13,q14,#26
143
+ vsub.i64 q6,q6,q12
144
+ vshr.s64 q12,q15,#25
145
+ vadd.i64 q3,q3,q13
146
+ vshl.i64 q13,q13,#26
147
+ vadd.i64 q14,q3,q0
148
+ vadd.i64 q8,q8,q12
149
+ vshl.i64 q12,q12,#25
150
+ vadd.i64 q15,q8,q1
151
+ add r2,r2,#8
152
+ vsub.i64 q2,q2,q13
153
+ vshr.s64 q13,q14,#25
154
+ vsub.i64 q7,q7,q12
155
+ vshr.s64 q12,q15,#26
156
+ vadd.i64 q14,q13,q13
157
+ vadd.i64 q9,q9,q12
158
+ vtrn.32 d12,d14
159
+ vshl.i64 q12,q12,#26
160
+ vtrn.32 d13,d15
161
+ vadd.i64 q0,q9,q0
162
+ vadd.i64 q4,q4,q14
163
+ vst1.8 d12,[r2,: 64]!
164
+ vshl.i64 q6,q13,#4
165
+ vsub.i64 q7,q8,q12
166
+ vshr.s64 q0,q0,#25
167
+ vadd.i64 q4,q4,q6
168
+ vadd.i64 q6,q10,q0
169
+ vshl.i64 q0,q0,#25
170
+ vadd.i64 q8,q6,q1
171
+ vadd.i64 q4,q4,q13
172
+ vshl.i64 q10,q13,#25
173
+ vadd.i64 q1,q4,q1
174
+ vsub.i64 q0,q9,q0
175
+ vshr.s64 q8,q8,#26
176
+ vsub.i64 q3,q3,q10
177
+ vtrn.32 d14,d0
178
+ vshr.s64 q1,q1,#26
179
+ vtrn.32 d15,d1
180
+ vadd.i64 q0,q11,q8
181
+ vst1.8 d14,[r2,: 64]
182
+ vshl.i64 q7,q8,#26
183
+ vadd.i64 q5,q5,q1
184
+ vtrn.32 d4,d6
185
+ vshl.i64 q1,q1,#26
186
+ vtrn.32 d5,d7
187
+ vsub.i64 q3,q6,q7
188
+ add r2,r2,#16
189
+ vsub.i64 q1,q4,q1
190
+ vst1.8 d4,[r2,: 64]
191
+ vtrn.32 d6,d0
192
+ vtrn.32 d7,d1
193
+ sub r2,r2,#8
194
+ vtrn.32 d2,d10
195
+ vtrn.32 d3,d11
196
+ vst1.8 d6,[r2,: 64]
197
+ sub r2,r2,#24
198
+ vst1.8 d2,[r2,: 64]
199
+ add r2,r3,#96
200
+ vmov.i32 q0,#0
201
+ vmov.i64 d2,#0xff
202
+ vmov.i64 d3,#0
203
+ vshr.u32 q1,q1,#7
204
+ vst1.8 {d2-d3},[r2,: 128]!
205
+ vst1.8 {d0-d1},[r2,: 128]!
206
+ vst1.8 d0,[r2,: 64]
207
+ add r2,r3,#144
208
+ vmov.i32 q0,#0
209
+ vst1.8 {d0-d1},[r2,: 128]!
210
+ vst1.8 {d0-d1},[r2,: 128]!
211
+ vst1.8 d0,[r2,: 64]
212
+ add r2,r3,#240
213
+ vmov.i32 q0,#0
214
+ vmov.i64 d2,#0xff
215
+ vmov.i64 d3,#0
216
+ vshr.u32 q1,q1,#7
217
+ vst1.8 {d2-d3},[r2,: 128]!
218
+ vst1.8 {d0-d1},[r2,: 128]!
219
+ vst1.8 d0,[r2,: 64]
220
+ add r2,r3,#48
221
+ add r6,r3,#192
222
+ vld1.8 {d0-d1},[r2,: 128]!
223
+ vld1.8 {d2-d3},[r2,: 128]!
224
+ vld1.8 {d4},[r2,: 64]
225
+ vst1.8 {d0-d1},[r6,: 128]!
226
+ vst1.8 {d2-d3},[r6,: 128]!
227
+ vst1.8 d4,[r6,: 64]
228
+ ._mainloop:
229
+ mov r2,r5,LSR #3
230
+ and r6,r5,#7
231
+ ldrb r2,[r1,r2]
232
+ mov r2,r2,LSR r6
233
+ and r2,r2,#1
234
+ str r5,[sp,#488]
235
+ eor r4,r4,r2
236
+ str r2,[sp,#492]
237
+ neg r2,r4
238
+ add r4,r3,#96
239
+ add r5,r3,#192
240
+ add r6,r3,#144
241
+ vld1.8 {d8-d9},[r4,: 128]!
242
+ add r7,r3,#240
243
+ vld1.8 {d10-d11},[r5,: 128]!
244
+ veor q6,q4,q5
245
+ vld1.8 {d14-d15},[r6,: 128]!
246
+ vdup.i32 q8,r2
247
+ vld1.8 {d18-d19},[r7,: 128]!
248
+ veor q10,q7,q9
249
+ vld1.8 {d22-d23},[r4,: 128]!
250
+ vand q6,q6,q8
251
+ vld1.8 {d24-d25},[r5,: 128]!
252
+ vand q10,q10,q8
253
+ vld1.8 {d26-d27},[r6,: 128]!
254
+ veor q4,q4,q6
255
+ vld1.8 {d28-d29},[r7,: 128]!
256
+ veor q5,q5,q6
257
+ vld1.8 {d0},[r4,: 64]
258
+ veor q6,q7,q10
259
+ vld1.8 {d2},[r5,: 64]
260
+ veor q7,q9,q10
261
+ vld1.8 {d4},[r6,: 64]
262
+ veor q9,q11,q12
263
+ vld1.8 {d6},[r7,: 64]
264
+ veor q10,q0,q1
265
+ sub r2,r4,#32
266
+ vand q9,q9,q8
267
+ sub r4,r5,#32
268
+ vand q10,q10,q8
269
+ sub r5,r6,#32
270
+ veor q11,q11,q9
271
+ sub r6,r7,#32
272
+ veor q0,q0,q10
273
+ veor q9,q12,q9
274
+ veor q1,q1,q10
275
+ veor q10,q13,q14
276
+ veor q12,q2,q3
277
+ vand q10,q10,q8
278
+ vand q8,q12,q8
279
+ veor q12,q13,q10
280
+ veor q2,q2,q8
281
+ veor q10,q14,q10
282
+ veor q3,q3,q8
283
+ vadd.i32 q8,q4,q6
284
+ vsub.i32 q4,q4,q6
285
+ vst1.8 {d16-d17},[r2,: 128]!
286
+ vadd.i32 q6,q11,q12
287
+ vst1.8 {d8-d9},[r5,: 128]!
288
+ vsub.i32 q4,q11,q12
289
+ vst1.8 {d12-d13},[r2,: 128]!
290
+ vadd.i32 q6,q0,q2
291
+ vst1.8 {d8-d9},[r5,: 128]!
292
+ vsub.i32 q0,q0,q2
293
+ vst1.8 d12,[r2,: 64]
294
+ vadd.i32 q2,q5,q7
295
+ vst1.8 d0,[r5,: 64]
296
+ vsub.i32 q0,q5,q7
297
+ vst1.8 {d4-d5},[r4,: 128]!
298
+ vadd.i32 q2,q9,q10
299
+ vst1.8 {d0-d1},[r6,: 128]!
300
+ vsub.i32 q0,q9,q10
301
+ vst1.8 {d4-d5},[r4,: 128]!
302
+ vadd.i32 q2,q1,q3
303
+ vst1.8 {d0-d1},[r6,: 128]!
304
+ vsub.i32 q0,q1,q3
305
+ vst1.8 d4,[r4,: 64]
306
+ vst1.8 d0,[r6,: 64]
307
+ add r2,sp,#544
308
+ add r4,r3,#96
309
+ add r5,r3,#144
310
+ vld1.8 {d0-d1},[r2,: 128]
311
+ vld1.8 {d2-d3},[r4,: 128]!
312
+ vld1.8 {d4-d5},[r5,: 128]!
313
+ vzip.i32 q1,q2
314
+ vld1.8 {d6-d7},[r4,: 128]!
315
+ vld1.8 {d8-d9},[r5,: 128]!
316
+ vshl.i32 q5,q1,#1
317
+ vzip.i32 q3,q4
318
+ vshl.i32 q6,q2,#1
319
+ vld1.8 {d14},[r4,: 64]
320
+ vshl.i32 q8,q3,#1
321
+ vld1.8 {d15},[r5,: 64]
322
+ vshl.i32 q9,q4,#1
323
+ vmul.i32 d21,d7,d1
324
+ vtrn.32 d14,d15
325
+ vmul.i32 q11,q4,q0
326
+ vmul.i32 q0,q7,q0
327
+ vmull.s32 q12,d2,d2
328
+ vmlal.s32 q12,d11,d1
329
+ vmlal.s32 q12,d12,d0
330
+ vmlal.s32 q12,d13,d23
331
+ vmlal.s32 q12,d16,d22
332
+ vmlal.s32 q12,d7,d21
333
+ vmull.s32 q10,d2,d11
334
+ vmlal.s32 q10,d4,d1
335
+ vmlal.s32 q10,d13,d0
336
+ vmlal.s32 q10,d6,d23
337
+ vmlal.s32 q10,d17,d22
338
+ vmull.s32 q13,d10,d4
339
+ vmlal.s32 q13,d11,d3
340
+ vmlal.s32 q13,d13,d1
341
+ vmlal.s32 q13,d16,d0
342
+ vmlal.s32 q13,d17,d23
343
+ vmlal.s32 q13,d8,d22
344
+ vmull.s32 q1,d10,d5
345
+ vmlal.s32 q1,d11,d4
346
+ vmlal.s32 q1,d6,d1
347
+ vmlal.s32 q1,d17,d0
348
+ vmlal.s32 q1,d8,d23
349
+ vmull.s32 q14,d10,d6
350
+ vmlal.s32 q14,d11,d13
351
+ vmlal.s32 q14,d4,d4
352
+ vmlal.s32 q14,d17,d1
353
+ vmlal.s32 q14,d18,d0
354
+ vmlal.s32 q14,d9,d23
355
+ vmull.s32 q11,d10,d7
356
+ vmlal.s32 q11,d11,d6
357
+ vmlal.s32 q11,d12,d5
358
+ vmlal.s32 q11,d8,d1
359
+ vmlal.s32 q11,d19,d0
360
+ vmull.s32 q15,d10,d8
361
+ vmlal.s32 q15,d11,d17
362
+ vmlal.s32 q15,d12,d6
363
+ vmlal.s32 q15,d13,d5
364
+ vmlal.s32 q15,d19,d1
365
+ vmlal.s32 q15,d14,d0
366
+ vmull.s32 q2,d10,d9
367
+ vmlal.s32 q2,d11,d8
368
+ vmlal.s32 q2,d12,d7
369
+ vmlal.s32 q2,d13,d6
370
+ vmlal.s32 q2,d14,d1
371
+ vmull.s32 q0,d15,d1
372
+ vmlal.s32 q0,d10,d14
373
+ vmlal.s32 q0,d11,d19
374
+ vmlal.s32 q0,d12,d8
375
+ vmlal.s32 q0,d13,d17
376
+ vmlal.s32 q0,d6,d6
377
+ add r2,sp,#512
378
+ vld1.8 {d18-d19},[r2,: 128]
379
+ vmull.s32 q3,d16,d7
380
+ vmlal.s32 q3,d10,d15
381
+ vmlal.s32 q3,d11,d14
382
+ vmlal.s32 q3,d12,d9
383
+ vmlal.s32 q3,d13,d8
384
+ add r2,sp,#528
385
+ vld1.8 {d8-d9},[r2,: 128]
386
+ vadd.i64 q5,q12,q9
387
+ vadd.i64 q6,q15,q9
388
+ vshr.s64 q5,q5,#26
389
+ vshr.s64 q6,q6,#26
390
+ vadd.i64 q7,q10,q5
391
+ vshl.i64 q5,q5,#26
392
+ vadd.i64 q8,q7,q4
393
+ vadd.i64 q2,q2,q6
394
+ vshl.i64 q6,q6,#26
395
+ vadd.i64 q10,q2,q4
396
+ vsub.i64 q5,q12,q5
397
+ vshr.s64 q8,q8,#25
398
+ vsub.i64 q6,q15,q6
399
+ vshr.s64 q10,q10,#25
400
+ vadd.i64 q12,q13,q8
401
+ vshl.i64 q8,q8,#25
402
+ vadd.i64 q13,q12,q9
403
+ vadd.i64 q0,q0,q10
404
+ vsub.i64 q7,q7,q8
405
+ vshr.s64 q8,q13,#26
406
+ vshl.i64 q10,q10,#25
407
+ vadd.i64 q13,q0,q9
408
+ vadd.i64 q1,q1,q8
409
+ vshl.i64 q8,q8,#26
410
+ vadd.i64 q15,q1,q4
411
+ vsub.i64 q2,q2,q10
412
+ vshr.s64 q10,q13,#26
413
+ vsub.i64 q8,q12,q8
414
+ vshr.s64 q12,q15,#25
415
+ vadd.i64 q3,q3,q10
416
+ vshl.i64 q10,q10,#26
417
+ vadd.i64 q13,q3,q4
418
+ vadd.i64 q14,q14,q12
419
+ add r2,r3,#288
420
+ vshl.i64 q12,q12,#25
421
+ add r4,r3,#336
422
+ vadd.i64 q15,q14,q9
423
+ add r2,r2,#8
424
+ vsub.i64 q0,q0,q10
425
+ add r4,r4,#8
426
+ vshr.s64 q10,q13,#25
427
+ vsub.i64 q1,q1,q12
428
+ vshr.s64 q12,q15,#26
429
+ vadd.i64 q13,q10,q10
430
+ vadd.i64 q11,q11,q12
431
+ vtrn.32 d16,d2
432
+ vshl.i64 q12,q12,#26
433
+ vtrn.32 d17,d3
434
+ vadd.i64 q1,q11,q4
435
+ vadd.i64 q4,q5,q13
436
+ vst1.8 d16,[r2,: 64]!
437
+ vshl.i64 q5,q10,#4
438
+ vst1.8 d17,[r4,: 64]!
439
+ vsub.i64 q8,q14,q12
440
+ vshr.s64 q1,q1,#25
441
+ vadd.i64 q4,q4,q5
442
+ vadd.i64 q5,q6,q1
443
+ vshl.i64 q1,q1,#25
444
+ vadd.i64 q6,q5,q9
445
+ vadd.i64 q4,q4,q10
446
+ vshl.i64 q10,q10,#25
447
+ vadd.i64 q9,q4,q9
448
+ vsub.i64 q1,q11,q1
449
+ vshr.s64 q6,q6,#26
450
+ vsub.i64 q3,q3,q10
451
+ vtrn.32 d16,d2
452
+ vshr.s64 q9,q9,#26
453
+ vtrn.32 d17,d3
454
+ vadd.i64 q1,q2,q6
455
+ vst1.8 d16,[r2,: 64]
456
+ vshl.i64 q2,q6,#26
457
+ vst1.8 d17,[r4,: 64]
458
+ vadd.i64 q6,q7,q9
459
+ vtrn.32 d0,d6
460
+ vshl.i64 q7,q9,#26
461
+ vtrn.32 d1,d7
462
+ vsub.i64 q2,q5,q2
463
+ add r2,r2,#16
464
+ vsub.i64 q3,q4,q7
465
+ vst1.8 d0,[r2,: 64]
466
+ add r4,r4,#16
467
+ vst1.8 d1,[r4,: 64]
468
+ vtrn.32 d4,d2
469
+ vtrn.32 d5,d3
470
+ sub r2,r2,#8
471
+ sub r4,r4,#8
472
+ vtrn.32 d6,d12
473
+ vtrn.32 d7,d13
474
+ vst1.8 d4,[r2,: 64]
475
+ vst1.8 d5,[r4,: 64]
476
+ sub r2,r2,#24
477
+ sub r4,r4,#24
478
+ vst1.8 d6,[r2,: 64]
479
+ vst1.8 d7,[r4,: 64]
480
+ add r2,r3,#240
481
+ add r4,r3,#96
482
+ vld1.8 {d0-d1},[r4,: 128]!
483
+ vld1.8 {d2-d3},[r4,: 128]!
484
+ vld1.8 {d4},[r4,: 64]
485
+ add r4,r3,#144
486
+ vld1.8 {d6-d7},[r4,: 128]!
487
+ vtrn.32 q0,q3
488
+ vld1.8 {d8-d9},[r4,: 128]!
489
+ vshl.i32 q5,q0,#4
490
+ vtrn.32 q1,q4
491
+ vshl.i32 q6,q3,#4
492
+ vadd.i32 q5,q5,q0
493
+ vadd.i32 q6,q6,q3
494
+ vshl.i32 q7,q1,#4
495
+ vld1.8 {d5},[r4,: 64]
496
+ vshl.i32 q8,q4,#4
497
+ vtrn.32 d4,d5
498
+ vadd.i32 q7,q7,q1
499
+ vadd.i32 q8,q8,q4
500
+ vld1.8 {d18-d19},[r2,: 128]!
501
+ vshl.i32 q10,q2,#4
502
+ vld1.8 {d22-d23},[r2,: 128]!
503
+ vadd.i32 q10,q10,q2
504
+ vld1.8 {d24},[r2,: 64]
505
+ vadd.i32 q5,q5,q0
506
+ add r2,r3,#192
507
+ vld1.8 {d26-d27},[r2,: 128]!
508
+ vadd.i32 q6,q6,q3
509
+ vld1.8 {d28-d29},[r2,: 128]!
510
+ vadd.i32 q8,q8,q4
511
+ vld1.8 {d25},[r2,: 64]
512
+ vadd.i32 q10,q10,q2
513
+ vtrn.32 q9,q13
514
+ vadd.i32 q7,q7,q1
515
+ vadd.i32 q5,q5,q0
516
+ vtrn.32 q11,q14
517
+ vadd.i32 q6,q6,q3
518
+ add r2,sp,#560
519
+ vadd.i32 q10,q10,q2
520
+ vtrn.32 d24,d25
521
+ vst1.8 {d12-d13},[r2,: 128]
522
+ vshl.i32 q6,q13,#1
523
+ add r2,sp,#576
524
+ vst1.8 {d20-d21},[r2,: 128]
525
+ vshl.i32 q10,q14,#1
526
+ add r2,sp,#592
527
+ vst1.8 {d12-d13},[r2,: 128]
528
+ vshl.i32 q15,q12,#1
529
+ vadd.i32 q8,q8,q4
530
+ vext.32 d10,d31,d30,#0
531
+ vadd.i32 q7,q7,q1
532
+ add r2,sp,#608
533
+ vst1.8 {d16-d17},[r2,: 128]
534
+ vmull.s32 q8,d18,d5
535
+ vmlal.s32 q8,d26,d4
536
+ vmlal.s32 q8,d19,d9
537
+ vmlal.s32 q8,d27,d3
538
+ vmlal.s32 q8,d22,d8
539
+ vmlal.s32 q8,d28,d2
540
+ vmlal.s32 q8,d23,d7
541
+ vmlal.s32 q8,d29,d1
542
+ vmlal.s32 q8,d24,d6
543
+ vmlal.s32 q8,d25,d0
544
+ add r2,sp,#624
545
+ vst1.8 {d14-d15},[r2,: 128]
546
+ vmull.s32 q2,d18,d4
547
+ vmlal.s32 q2,d12,d9
548
+ vmlal.s32 q2,d13,d8
549
+ vmlal.s32 q2,d19,d3
550
+ vmlal.s32 q2,d22,d2
551
+ vmlal.s32 q2,d23,d1
552
+ vmlal.s32 q2,d24,d0
553
+ add r2,sp,#640
554
+ vst1.8 {d20-d21},[r2,: 128]
555
+ vmull.s32 q7,d18,d9
556
+ vmlal.s32 q7,d26,d3
557
+ vmlal.s32 q7,d19,d8
558
+ vmlal.s32 q7,d27,d2
559
+ vmlal.s32 q7,d22,d7
560
+ vmlal.s32 q7,d28,d1
561
+ vmlal.s32 q7,d23,d6
562
+ vmlal.s32 q7,d29,d0
563
+ add r2,sp,#656
564
+ vst1.8 {d10-d11},[r2,: 128]
565
+ vmull.s32 q5,d18,d3
566
+ vmlal.s32 q5,d19,d2
567
+ vmlal.s32 q5,d22,d1
568
+ vmlal.s32 q5,d23,d0
569
+ vmlal.s32 q5,d12,d8
570
+ add r2,sp,#672
571
+ vst1.8 {d16-d17},[r2,: 128]
572
+ vmull.s32 q4,d18,d8
573
+ vmlal.s32 q4,d26,d2
574
+ vmlal.s32 q4,d19,d7
575
+ vmlal.s32 q4,d27,d1
576
+ vmlal.s32 q4,d22,d6
577
+ vmlal.s32 q4,d28,d0
578
+ vmull.s32 q8,d18,d7
579
+ vmlal.s32 q8,d26,d1
580
+ vmlal.s32 q8,d19,d6
581
+ vmlal.s32 q8,d27,d0
582
+ add r2,sp,#576
583
+ vld1.8 {d20-d21},[r2,: 128]
584
+ vmlal.s32 q7,d24,d21
585
+ vmlal.s32 q7,d25,d20
586
+ vmlal.s32 q4,d23,d21
587
+ vmlal.s32 q4,d29,d20
588
+ vmlal.s32 q8,d22,d21
589
+ vmlal.s32 q8,d28,d20
590
+ vmlal.s32 q5,d24,d20
591
+ add r2,sp,#576
592
+ vst1.8 {d14-d15},[r2,: 128]
593
+ vmull.s32 q7,d18,d6
594
+ vmlal.s32 q7,d26,d0
595
+ add r2,sp,#656
596
+ vld1.8 {d30-d31},[r2,: 128]
597
+ vmlal.s32 q2,d30,d21
598
+ vmlal.s32 q7,d19,d21
599
+ vmlal.s32 q7,d27,d20
600
+ add r2,sp,#624
601
+ vld1.8 {d26-d27},[r2,: 128]
602
+ vmlal.s32 q4,d25,d27
603
+ vmlal.s32 q8,d29,d27
604
+ vmlal.s32 q8,d25,d26
605
+ vmlal.s32 q7,d28,d27
606
+ vmlal.s32 q7,d29,d26
607
+ add r2,sp,#608
608
+ vld1.8 {d28-d29},[r2,: 128]
609
+ vmlal.s32 q4,d24,d29
610
+ vmlal.s32 q8,d23,d29
611
+ vmlal.s32 q8,d24,d28
612
+ vmlal.s32 q7,d22,d29
613
+ vmlal.s32 q7,d23,d28
614
+ add r2,sp,#608
615
+ vst1.8 {d8-d9},[r2,: 128]
616
+ add r2,sp,#560
617
+ vld1.8 {d8-d9},[r2,: 128]
618
+ vmlal.s32 q7,d24,d9
619
+ vmlal.s32 q7,d25,d31
620
+ vmull.s32 q1,d18,d2
621
+ vmlal.s32 q1,d19,d1
622
+ vmlal.s32 q1,d22,d0
623
+ vmlal.s32 q1,d24,d27
624
+ vmlal.s32 q1,d23,d20
625
+ vmlal.s32 q1,d12,d7
626
+ vmlal.s32 q1,d13,d6
627
+ vmull.s32 q6,d18,d1
628
+ vmlal.s32 q6,d19,d0
629
+ vmlal.s32 q6,d23,d27
630
+ vmlal.s32 q6,d22,d20
631
+ vmlal.s32 q6,d24,d26
632
+ vmull.s32 q0,d18,d0
633
+ vmlal.s32 q0,d22,d27
634
+ vmlal.s32 q0,d23,d26
635
+ vmlal.s32 q0,d24,d31
636
+ vmlal.s32 q0,d19,d20
637
+ add r2,sp,#640
638
+ vld1.8 {d18-d19},[r2,: 128]
639
+ vmlal.s32 q2,d18,d7
640
+ vmlal.s32 q2,d19,d6
641
+ vmlal.s32 q5,d18,d6
642
+ vmlal.s32 q5,d19,d21
643
+ vmlal.s32 q1,d18,d21
644
+ vmlal.s32 q1,d19,d29
645
+ vmlal.s32 q0,d18,d28
646
+ vmlal.s32 q0,d19,d9
647
+ vmlal.s32 q6,d18,d29
648
+ vmlal.s32 q6,d19,d28
649
+ add r2,sp,#592
650
+ vld1.8 {d18-d19},[r2,: 128]
651
+ add r2,sp,#512
652
+ vld1.8 {d22-d23},[r2,: 128]
653
+ vmlal.s32 q5,d19,d7
654
+ vmlal.s32 q0,d18,d21
655
+ vmlal.s32 q0,d19,d29
656
+ vmlal.s32 q6,d18,d6
657
+ add r2,sp,#528
658
+ vld1.8 {d6-d7},[r2,: 128]
659
+ vmlal.s32 q6,d19,d21
660
+ add r2,sp,#576
661
+ vld1.8 {d18-d19},[r2,: 128]
662
+ vmlal.s32 q0,d30,d8
663
+ add r2,sp,#672
664
+ vld1.8 {d20-d21},[r2,: 128]
665
+ vmlal.s32 q5,d30,d29
666
+ add r2,sp,#608
667
+ vld1.8 {d24-d25},[r2,: 128]
668
+ vmlal.s32 q1,d30,d28
669
+ vadd.i64 q13,q0,q11
670
+ vadd.i64 q14,q5,q11
671
+ vmlal.s32 q6,d30,d9
672
+ vshr.s64 q4,q13,#26
673
+ vshr.s64 q13,q14,#26
674
+ vadd.i64 q7,q7,q4
675
+ vshl.i64 q4,q4,#26
676
+ vadd.i64 q14,q7,q3
677
+ vadd.i64 q9,q9,q13
678
+ vshl.i64 q13,q13,#26
679
+ vadd.i64 q15,q9,q3
680
+ vsub.i64 q0,q0,q4
681
+ vshr.s64 q4,q14,#25
682
+ vsub.i64 q5,q5,q13
683
+ vshr.s64 q13,q15,#25
684
+ vadd.i64 q6,q6,q4
685
+ vshl.i64 q4,q4,#25
686
+ vadd.i64 q14,q6,q11
687
+ vadd.i64 q2,q2,q13
688
+ vsub.i64 q4,q7,q4
689
+ vshr.s64 q7,q14,#26
690
+ vshl.i64 q13,q13,#25
691
+ vadd.i64 q14,q2,q11
692
+ vadd.i64 q8,q8,q7
693
+ vshl.i64 q7,q7,#26
694
+ vadd.i64 q15,q8,q3
695
+ vsub.i64 q9,q9,q13
696
+ vshr.s64 q13,q14,#26
697
+ vsub.i64 q6,q6,q7
698
+ vshr.s64 q7,q15,#25
699
+ vadd.i64 q10,q10,q13
700
+ vshl.i64 q13,q13,#26
701
+ vadd.i64 q14,q10,q3
702
+ vadd.i64 q1,q1,q7
703
+ add r2,r3,#144
704
+ vshl.i64 q7,q7,#25
705
+ add r4,r3,#96
706
+ vadd.i64 q15,q1,q11
707
+ add r2,r2,#8
708
+ vsub.i64 q2,q2,q13
709
+ add r4,r4,#8
710
+ vshr.s64 q13,q14,#25
711
+ vsub.i64 q7,q8,q7
712
+ vshr.s64 q8,q15,#26
713
+ vadd.i64 q14,q13,q13
714
+ vadd.i64 q12,q12,q8
715
+ vtrn.32 d12,d14
716
+ vshl.i64 q8,q8,#26
717
+ vtrn.32 d13,d15
718
+ vadd.i64 q3,q12,q3
719
+ vadd.i64 q0,q0,q14
720
+ vst1.8 d12,[r2,: 64]!
721
+ vshl.i64 q7,q13,#4
722
+ vst1.8 d13,[r4,: 64]!
723
+ vsub.i64 q1,q1,q8
724
+ vshr.s64 q3,q3,#25
725
+ vadd.i64 q0,q0,q7
726
+ vadd.i64 q5,q5,q3
727
+ vshl.i64 q3,q3,#25
728
+ vadd.i64 q6,q5,q11
729
+ vadd.i64 q0,q0,q13
730
+ vshl.i64 q7,q13,#25
731
+ vadd.i64 q8,q0,q11
732
+ vsub.i64 q3,q12,q3
733
+ vshr.s64 q6,q6,#26
734
+ vsub.i64 q7,q10,q7
735
+ vtrn.32 d2,d6
736
+ vshr.s64 q8,q8,#26
737
+ vtrn.32 d3,d7
738
+ vadd.i64 q3,q9,q6
739
+ vst1.8 d2,[r2,: 64]
740
+ vshl.i64 q6,q6,#26
741
+ vst1.8 d3,[r4,: 64]
742
+ vadd.i64 q1,q4,q8
743
+ vtrn.32 d4,d14
744
+ vshl.i64 q4,q8,#26
745
+ vtrn.32 d5,d15
746
+ vsub.i64 q5,q5,q6
747
+ add r2,r2,#16
748
+ vsub.i64 q0,q0,q4
749
+ vst1.8 d4,[r2,: 64]
750
+ add r4,r4,#16
751
+ vst1.8 d5,[r4,: 64]
752
+ vtrn.32 d10,d6
753
+ vtrn.32 d11,d7
754
+ sub r2,r2,#8
755
+ sub r4,r4,#8
756
+ vtrn.32 d0,d2
757
+ vtrn.32 d1,d3
758
+ vst1.8 d10,[r2,: 64]
759
+ vst1.8 d11,[r4,: 64]
760
+ sub r2,r2,#24
761
+ sub r4,r4,#24
762
+ vst1.8 d0,[r2,: 64]
763
+ vst1.8 d1,[r4,: 64]
764
+ add r2,r3,#288
765
+ add r4,r3,#336
766
+ vld1.8 {d0-d1},[r2,: 128]!
767
+ vld1.8 {d2-d3},[r4,: 128]!
768
+ vsub.i32 q0,q0,q1
769
+ vld1.8 {d2-d3},[r2,: 128]!
770
+ vld1.8 {d4-d5},[r4,: 128]!
771
+ vsub.i32 q1,q1,q2
772
+ add r5,r3,#240
773
+ vld1.8 {d4},[r2,: 64]
774
+ vld1.8 {d6},[r4,: 64]
775
+ vsub.i32 q2,q2,q3
776
+ vst1.8 {d0-d1},[r5,: 128]!
777
+ vst1.8 {d2-d3},[r5,: 128]!
778
+ vst1.8 d4,[r5,: 64]
779
+ add r2,r3,#144
780
+ add r4,r3,#96
781
+ add r5,r3,#144
782
+ add r6,r3,#192
783
+ vld1.8 {d0-d1},[r2,: 128]!
784
+ vld1.8 {d2-d3},[r4,: 128]!
785
+ vsub.i32 q2,q0,q1
786
+ vadd.i32 q0,q0,q1
787
+ vld1.8 {d2-d3},[r2,: 128]!
788
+ vld1.8 {d6-d7},[r4,: 128]!
789
+ vsub.i32 q4,q1,q3
790
+ vadd.i32 q1,q1,q3
791
+ vld1.8 {d6},[r2,: 64]
792
+ vld1.8 {d10},[r4,: 64]
793
+ vsub.i32 q6,q3,q5
794
+ vadd.i32 q3,q3,q5
795
+ vst1.8 {d4-d5},[r5,: 128]!
796
+ vst1.8 {d0-d1},[r6,: 128]!
797
+ vst1.8 {d8-d9},[r5,: 128]!
798
+ vst1.8 {d2-d3},[r6,: 128]!
799
+ vst1.8 d12,[r5,: 64]
800
+ vst1.8 d6,[r6,: 64]
801
+ add r2,r3,#0
802
+ add r4,r3,#240
803
+ vld1.8 {d0-d1},[r4,: 128]!
804
+ vld1.8 {d2-d3},[r4,: 128]!
805
+ vld1.8 {d4},[r4,: 64]
806
+ add r4,r3,#336
807
+ vld1.8 {d6-d7},[r4,: 128]!
808
+ vtrn.32 q0,q3
809
+ vld1.8 {d8-d9},[r4,: 128]!
810
+ vshl.i32 q5,q0,#4
811
+ vtrn.32 q1,q4
812
+ vshl.i32 q6,q3,#4
813
+ vadd.i32 q5,q5,q0
814
+ vadd.i32 q6,q6,q3
815
+ vshl.i32 q7,q1,#4
816
+ vld1.8 {d5},[r4,: 64]
817
+ vshl.i32 q8,q4,#4
818
+ vtrn.32 d4,d5
819
+ vadd.i32 q7,q7,q1
820
+ vadd.i32 q8,q8,q4
821
+ vld1.8 {d18-d19},[r2,: 128]!
822
+ vshl.i32 q10,q2,#4
823
+ vld1.8 {d22-d23},[r2,: 128]!
824
+ vadd.i32 q10,q10,q2
825
+ vld1.8 {d24},[r2,: 64]
826
+ vadd.i32 q5,q5,q0
827
+ add r2,r3,#288
828
+ vld1.8 {d26-d27},[r2,: 128]!
829
+ vadd.i32 q6,q6,q3
830
+ vld1.8 {d28-d29},[r2,: 128]!
831
+ vadd.i32 q8,q8,q4
832
+ vld1.8 {d25},[r2,: 64]
833
+ vadd.i32 q10,q10,q2
834
+ vtrn.32 q9,q13
835
+ vadd.i32 q7,q7,q1
836
+ vadd.i32 q5,q5,q0
837
+ vtrn.32 q11,q14
838
+ vadd.i32 q6,q6,q3
839
+ add r2,sp,#560
840
+ vadd.i32 q10,q10,q2
841
+ vtrn.32 d24,d25
842
+ vst1.8 {d12-d13},[r2,: 128]
843
+ vshl.i32 q6,q13,#1
844
+ add r2,sp,#576
845
+ vst1.8 {d20-d21},[r2,: 128]
846
+ vshl.i32 q10,q14,#1
847
+ add r2,sp,#592
848
+ vst1.8 {d12-d13},[r2,: 128]
849
+ vshl.i32 q15,q12,#1
850
+ vadd.i32 q8,q8,q4
851
+ vext.32 d10,d31,d30,#0
852
+ vadd.i32 q7,q7,q1
853
+ add r2,sp,#608
854
+ vst1.8 {d16-d17},[r2,: 128]
855
+ vmull.s32 q8,d18,d5
856
+ vmlal.s32 q8,d26,d4
857
+ vmlal.s32 q8,d19,d9
858
+ vmlal.s32 q8,d27,d3
859
+ vmlal.s32 q8,d22,d8
860
+ vmlal.s32 q8,d28,d2
861
+ vmlal.s32 q8,d23,d7
862
+ vmlal.s32 q8,d29,d1
863
+ vmlal.s32 q8,d24,d6
864
+ vmlal.s32 q8,d25,d0
865
+ add r2,sp,#624
866
+ vst1.8 {d14-d15},[r2,: 128]
867
+ vmull.s32 q2,d18,d4
868
+ vmlal.s32 q2,d12,d9
869
+ vmlal.s32 q2,d13,d8
870
+ vmlal.s32 q2,d19,d3
871
+ vmlal.s32 q2,d22,d2
872
+ vmlal.s32 q2,d23,d1
873
+ vmlal.s32 q2,d24,d0
874
+ add r2,sp,#640
875
+ vst1.8 {d20-d21},[r2,: 128]
876
+ vmull.s32 q7,d18,d9
877
+ vmlal.s32 q7,d26,d3
878
+ vmlal.s32 q7,d19,d8
879
+ vmlal.s32 q7,d27,d2
880
+ vmlal.s32 q7,d22,d7
881
+ vmlal.s32 q7,d28,d1
882
+ vmlal.s32 q7,d23,d6
883
+ vmlal.s32 q7,d29,d0
884
+ add r2,sp,#656
885
+ vst1.8 {d10-d11},[r2,: 128]
886
+ vmull.s32 q5,d18,d3
887
+ vmlal.s32 q5,d19,d2
888
+ vmlal.s32 q5,d22,d1
889
+ vmlal.s32 q5,d23,d0
890
+ vmlal.s32 q5,d12,d8
891
+ add r2,sp,#672
892
+ vst1.8 {d16-d17},[r2,: 128]
893
+ vmull.s32 q4,d18,d8
894
+ vmlal.s32 q4,d26,d2
895
+ vmlal.s32 q4,d19,d7
896
+ vmlal.s32 q4,d27,d1
897
+ vmlal.s32 q4,d22,d6
898
+ vmlal.s32 q4,d28,d0
899
+ vmull.s32 q8,d18,d7
900
+ vmlal.s32 q8,d26,d1
901
+ vmlal.s32 q8,d19,d6
902
+ vmlal.s32 q8,d27,d0
903
+ add r2,sp,#576
904
+ vld1.8 {d20-d21},[r2,: 128]
905
+ vmlal.s32 q7,d24,d21
906
+ vmlal.s32 q7,d25,d20
907
+ vmlal.s32 q4,d23,d21
908
+ vmlal.s32 q4,d29,d20
909
+ vmlal.s32 q8,d22,d21
910
+ vmlal.s32 q8,d28,d20
911
+ vmlal.s32 q5,d24,d20
912
+ add r2,sp,#576
913
+ vst1.8 {d14-d15},[r2,: 128]
914
+ vmull.s32 q7,d18,d6
915
+ vmlal.s32 q7,d26,d0
916
+ add r2,sp,#656
917
+ vld1.8 {d30-d31},[r2,: 128]
918
+ vmlal.s32 q2,d30,d21
919
+ vmlal.s32 q7,d19,d21
920
+ vmlal.s32 q7,d27,d20
921
+ add r2,sp,#624
922
+ vld1.8 {d26-d27},[r2,: 128]
923
+ vmlal.s32 q4,d25,d27
924
+ vmlal.s32 q8,d29,d27
925
+ vmlal.s32 q8,d25,d26
926
+ vmlal.s32 q7,d28,d27
927
+ vmlal.s32 q7,d29,d26
928
+ add r2,sp,#608
929
+ vld1.8 {d28-d29},[r2,: 128]
930
+ vmlal.s32 q4,d24,d29
931
+ vmlal.s32 q8,d23,d29
932
+ vmlal.s32 q8,d24,d28
933
+ vmlal.s32 q7,d22,d29
934
+ vmlal.s32 q7,d23,d28
935
+ add r2,sp,#608
936
+ vst1.8 {d8-d9},[r2,: 128]
937
+ add r2,sp,#560
938
+ vld1.8 {d8-d9},[r2,: 128]
939
+ vmlal.s32 q7,d24,d9
940
+ vmlal.s32 q7,d25,d31
941
+ vmull.s32 q1,d18,d2
942
+ vmlal.s32 q1,d19,d1
943
+ vmlal.s32 q1,d22,d0
944
+ vmlal.s32 q1,d24,d27
945
+ vmlal.s32 q1,d23,d20
946
+ vmlal.s32 q1,d12,d7
947
+ vmlal.s32 q1,d13,d6
948
+ vmull.s32 q6,d18,d1
949
+ vmlal.s32 q6,d19,d0
950
+ vmlal.s32 q6,d23,d27
951
+ vmlal.s32 q6,d22,d20
952
+ vmlal.s32 q6,d24,d26
953
+ vmull.s32 q0,d18,d0
954
+ vmlal.s32 q0,d22,d27
955
+ vmlal.s32 q0,d23,d26
956
+ vmlal.s32 q0,d24,d31
957
+ vmlal.s32 q0,d19,d20
958
+ add r2,sp,#640
959
+ vld1.8 {d18-d19},[r2,: 128]
960
+ vmlal.s32 q2,d18,d7
961
+ vmlal.s32 q2,d19,d6
962
+ vmlal.s32 q5,d18,d6
963
+ vmlal.s32 q5,d19,d21
964
+ vmlal.s32 q1,d18,d21
965
+ vmlal.s32 q1,d19,d29
966
+ vmlal.s32 q0,d18,d28
967
+ vmlal.s32 q0,d19,d9
968
+ vmlal.s32 q6,d18,d29
969
+ vmlal.s32 q6,d19,d28
970
+ add r2,sp,#592
971
+ vld1.8 {d18-d19},[r2,: 128]
972
+ add r2,sp,#512
973
+ vld1.8 {d22-d23},[r2,: 128]
974
+ vmlal.s32 q5,d19,d7
975
+ vmlal.s32 q0,d18,d21
976
+ vmlal.s32 q0,d19,d29
977
+ vmlal.s32 q6,d18,d6
978
+ add r2,sp,#528
979
+ vld1.8 {d6-d7},[r2,: 128]
980
+ vmlal.s32 q6,d19,d21
981
+ add r2,sp,#576
982
+ vld1.8 {d18-d19},[r2,: 128]
983
+ vmlal.s32 q0,d30,d8
984
+ add r2,sp,#672
985
+ vld1.8 {d20-d21},[r2,: 128]
986
+ vmlal.s32 q5,d30,d29
987
+ add r2,sp,#608
988
+ vld1.8 {d24-d25},[r2,: 128]
989
+ vmlal.s32 q1,d30,d28
990
+ vadd.i64 q13,q0,q11
991
+ vadd.i64 q14,q5,q11
992
+ vmlal.s32 q6,d30,d9
993
+ vshr.s64 q4,q13,#26
994
+ vshr.s64 q13,q14,#26
995
+ vadd.i64 q7,q7,q4
996
+ vshl.i64 q4,q4,#26
997
+ vadd.i64 q14,q7,q3
998
+ vadd.i64 q9,q9,q13
999
+ vshl.i64 q13,q13,#26
1000
+ vadd.i64 q15,q9,q3
1001
+ vsub.i64 q0,q0,q4
1002
+ vshr.s64 q4,q14,#25
1003
+ vsub.i64 q5,q5,q13
1004
+ vshr.s64 q13,q15,#25
1005
+ vadd.i64 q6,q6,q4
1006
+ vshl.i64 q4,q4,#25
1007
+ vadd.i64 q14,q6,q11
1008
+ vadd.i64 q2,q2,q13
1009
+ vsub.i64 q4,q7,q4
1010
+ vshr.s64 q7,q14,#26
1011
+ vshl.i64 q13,q13,#25
1012
+ vadd.i64 q14,q2,q11
1013
+ vadd.i64 q8,q8,q7
1014
+ vshl.i64 q7,q7,#26
1015
+ vadd.i64 q15,q8,q3
1016
+ vsub.i64 q9,q9,q13
1017
+ vshr.s64 q13,q14,#26
1018
+ vsub.i64 q6,q6,q7
1019
+ vshr.s64 q7,q15,#25
1020
+ vadd.i64 q10,q10,q13
1021
+ vshl.i64 q13,q13,#26
1022
+ vadd.i64 q14,q10,q3
1023
+ vadd.i64 q1,q1,q7
1024
+ add r2,r3,#288
1025
+ vshl.i64 q7,q7,#25
1026
+ add r4,r3,#96
1027
+ vadd.i64 q15,q1,q11
1028
+ add r2,r2,#8
1029
+ vsub.i64 q2,q2,q13
1030
+ add r4,r4,#8
1031
+ vshr.s64 q13,q14,#25
1032
+ vsub.i64 q7,q8,q7
1033
+ vshr.s64 q8,q15,#26
1034
+ vadd.i64 q14,q13,q13
1035
+ vadd.i64 q12,q12,q8
1036
+ vtrn.32 d12,d14
1037
+ vshl.i64 q8,q8,#26
1038
+ vtrn.32 d13,d15
1039
+ vadd.i64 q3,q12,q3
1040
+ vadd.i64 q0,q0,q14
1041
+ vst1.8 d12,[r2,: 64]!
1042
+ vshl.i64 q7,q13,#4
1043
+ vst1.8 d13,[r4,: 64]!
1044
+ vsub.i64 q1,q1,q8
1045
+ vshr.s64 q3,q3,#25
1046
+ vadd.i64 q0,q0,q7
1047
+ vadd.i64 q5,q5,q3
1048
+ vshl.i64 q3,q3,#25
1049
+ vadd.i64 q6,q5,q11
1050
+ vadd.i64 q0,q0,q13
1051
+ vshl.i64 q7,q13,#25
1052
+ vadd.i64 q8,q0,q11
1053
+ vsub.i64 q3,q12,q3
1054
+ vshr.s64 q6,q6,#26
1055
+ vsub.i64 q7,q10,q7
1056
+ vtrn.32 d2,d6
1057
+ vshr.s64 q8,q8,#26
1058
+ vtrn.32 d3,d7
1059
+ vadd.i64 q3,q9,q6
1060
+ vst1.8 d2,[r2,: 64]
1061
+ vshl.i64 q6,q6,#26
1062
+ vst1.8 d3,[r4,: 64]
1063
+ vadd.i64 q1,q4,q8
1064
+ vtrn.32 d4,d14
1065
+ vshl.i64 q4,q8,#26
1066
+ vtrn.32 d5,d15
1067
+ vsub.i64 q5,q5,q6
1068
+ add r2,r2,#16
1069
+ vsub.i64 q0,q0,q4
1070
+ vst1.8 d4,[r2,: 64]
1071
+ add r4,r4,#16
1072
+ vst1.8 d5,[r4,: 64]
1073
+ vtrn.32 d10,d6
1074
+ vtrn.32 d11,d7
1075
+ sub r2,r2,#8
1076
+ sub r4,r4,#8
1077
+ vtrn.32 d0,d2
1078
+ vtrn.32 d1,d3
1079
+ vst1.8 d10,[r2,: 64]
1080
+ vst1.8 d11,[r4,: 64]
1081
+ sub r2,r2,#24
1082
+ sub r4,r4,#24
1083
+ vst1.8 d0,[r2,: 64]
1084
+ vst1.8 d1,[r4,: 64]
1085
+ add r2,sp,#544
1086
+ add r4,r3,#144
1087
+ add r5,r3,#192
1088
+ vld1.8 {d0-d1},[r2,: 128]
1089
+ vld1.8 {d2-d3},[r4,: 128]!
1090
+ vld1.8 {d4-d5},[r5,: 128]!
1091
+ vzip.i32 q1,q2
1092
+ vld1.8 {d6-d7},[r4,: 128]!
1093
+ vld1.8 {d8-d9},[r5,: 128]!
1094
+ vshl.i32 q5,q1,#1
1095
+ vzip.i32 q3,q4
1096
+ vshl.i32 q6,q2,#1
1097
+ vld1.8 {d14},[r4,: 64]
1098
+ vshl.i32 q8,q3,#1
1099
+ vld1.8 {d15},[r5,: 64]
1100
+ vshl.i32 q9,q4,#1
1101
+ vmul.i32 d21,d7,d1
1102
+ vtrn.32 d14,d15
1103
+ vmul.i32 q11,q4,q0
1104
+ vmul.i32 q0,q7,q0
1105
+ vmull.s32 q12,d2,d2
1106
+ vmlal.s32 q12,d11,d1
1107
+ vmlal.s32 q12,d12,d0
1108
+ vmlal.s32 q12,d13,d23
1109
+ vmlal.s32 q12,d16,d22
1110
+ vmlal.s32 q12,d7,d21
1111
+ vmull.s32 q10,d2,d11
1112
+ vmlal.s32 q10,d4,d1
1113
+ vmlal.s32 q10,d13,d0
1114
+ vmlal.s32 q10,d6,d23
1115
+ vmlal.s32 q10,d17,d22
1116
+ vmull.s32 q13,d10,d4
1117
+ vmlal.s32 q13,d11,d3
1118
+ vmlal.s32 q13,d13,d1
1119
+ vmlal.s32 q13,d16,d0
1120
+ vmlal.s32 q13,d17,d23
1121
+ vmlal.s32 q13,d8,d22
1122
+ vmull.s32 q1,d10,d5
1123
+ vmlal.s32 q1,d11,d4
1124
+ vmlal.s32 q1,d6,d1
1125
+ vmlal.s32 q1,d17,d0
1126
+ vmlal.s32 q1,d8,d23
1127
+ vmull.s32 q14,d10,d6
1128
+ vmlal.s32 q14,d11,d13
1129
+ vmlal.s32 q14,d4,d4
1130
+ vmlal.s32 q14,d17,d1
1131
+ vmlal.s32 q14,d18,d0
1132
+ vmlal.s32 q14,d9,d23
1133
+ vmull.s32 q11,d10,d7
1134
+ vmlal.s32 q11,d11,d6
1135
+ vmlal.s32 q11,d12,d5
1136
+ vmlal.s32 q11,d8,d1
1137
+ vmlal.s32 q11,d19,d0
1138
+ vmull.s32 q15,d10,d8
1139
+ vmlal.s32 q15,d11,d17
1140
+ vmlal.s32 q15,d12,d6
1141
+ vmlal.s32 q15,d13,d5
1142
+ vmlal.s32 q15,d19,d1
1143
+ vmlal.s32 q15,d14,d0
1144
+ vmull.s32 q2,d10,d9
1145
+ vmlal.s32 q2,d11,d8
1146
+ vmlal.s32 q2,d12,d7
1147
+ vmlal.s32 q2,d13,d6
1148
+ vmlal.s32 q2,d14,d1
1149
+ vmull.s32 q0,d15,d1
1150
+ vmlal.s32 q0,d10,d14
1151
+ vmlal.s32 q0,d11,d19
1152
+ vmlal.s32 q0,d12,d8
1153
+ vmlal.s32 q0,d13,d17
1154
+ vmlal.s32 q0,d6,d6
1155
+ add r2,sp,#512
1156
+ vld1.8 {d18-d19},[r2,: 128]
1157
+ vmull.s32 q3,d16,d7
1158
+ vmlal.s32 q3,d10,d15
1159
+ vmlal.s32 q3,d11,d14
1160
+ vmlal.s32 q3,d12,d9
1161
+ vmlal.s32 q3,d13,d8
1162
+ add r2,sp,#528
1163
+ vld1.8 {d8-d9},[r2,: 128]
1164
+ vadd.i64 q5,q12,q9
1165
+ vadd.i64 q6,q15,q9
1166
+ vshr.s64 q5,q5,#26
1167
+ vshr.s64 q6,q6,#26
1168
+ vadd.i64 q7,q10,q5
1169
+ vshl.i64 q5,q5,#26
1170
+ vadd.i64 q8,q7,q4
1171
+ vadd.i64 q2,q2,q6
1172
+ vshl.i64 q6,q6,#26
1173
+ vadd.i64 q10,q2,q4
1174
+ vsub.i64 q5,q12,q5
1175
+ vshr.s64 q8,q8,#25
1176
+ vsub.i64 q6,q15,q6
1177
+ vshr.s64 q10,q10,#25
1178
+ vadd.i64 q12,q13,q8
1179
+ vshl.i64 q8,q8,#25
1180
+ vadd.i64 q13,q12,q9
1181
+ vadd.i64 q0,q0,q10
1182
+ vsub.i64 q7,q7,q8
1183
+ vshr.s64 q8,q13,#26
1184
+ vshl.i64 q10,q10,#25
1185
+ vadd.i64 q13,q0,q9
1186
+ vadd.i64 q1,q1,q8
1187
+ vshl.i64 q8,q8,#26
1188
+ vadd.i64 q15,q1,q4
1189
+ vsub.i64 q2,q2,q10
1190
+ vshr.s64 q10,q13,#26
1191
+ vsub.i64 q8,q12,q8
1192
+ vshr.s64 q12,q15,#25
1193
+ vadd.i64 q3,q3,q10
1194
+ vshl.i64 q10,q10,#26
1195
+ vadd.i64 q13,q3,q4
1196
+ vadd.i64 q14,q14,q12
1197
+ add r2,r3,#144
1198
+ vshl.i64 q12,q12,#25
1199
+ add r4,r3,#192
1200
+ vadd.i64 q15,q14,q9
1201
+ add r2,r2,#8
1202
+ vsub.i64 q0,q0,q10
1203
+ add r4,r4,#8
1204
+ vshr.s64 q10,q13,#25
1205
+ vsub.i64 q1,q1,q12
1206
+ vshr.s64 q12,q15,#26
1207
+ vadd.i64 q13,q10,q10
1208
+ vadd.i64 q11,q11,q12
1209
+ vtrn.32 d16,d2
1210
+ vshl.i64 q12,q12,#26
1211
+ vtrn.32 d17,d3
1212
+ vadd.i64 q1,q11,q4
1213
+ vadd.i64 q4,q5,q13
1214
+ vst1.8 d16,[r2,: 64]!
1215
+ vshl.i64 q5,q10,#4
1216
+ vst1.8 d17,[r4,: 64]!
1217
+ vsub.i64 q8,q14,q12
1218
+ vshr.s64 q1,q1,#25
1219
+ vadd.i64 q4,q4,q5
1220
+ vadd.i64 q5,q6,q1
1221
+ vshl.i64 q1,q1,#25
1222
+ vadd.i64 q6,q5,q9
1223
+ vadd.i64 q4,q4,q10
1224
+ vshl.i64 q10,q10,#25
1225
+ vadd.i64 q9,q4,q9
1226
+ vsub.i64 q1,q11,q1
1227
+ vshr.s64 q6,q6,#26
1228
+ vsub.i64 q3,q3,q10
1229
+ vtrn.32 d16,d2
1230
+ vshr.s64 q9,q9,#26
1231
+ vtrn.32 d17,d3
1232
+ vadd.i64 q1,q2,q6
1233
+ vst1.8 d16,[r2,: 64]
1234
+ vshl.i64 q2,q6,#26
1235
+ vst1.8 d17,[r4,: 64]
1236
+ vadd.i64 q6,q7,q9
1237
+ vtrn.32 d0,d6
1238
+ vshl.i64 q7,q9,#26
1239
+ vtrn.32 d1,d7
1240
+ vsub.i64 q2,q5,q2
1241
+ add r2,r2,#16
1242
+ vsub.i64 q3,q4,q7
1243
+ vst1.8 d0,[r2,: 64]
1244
+ add r4,r4,#16
1245
+ vst1.8 d1,[r4,: 64]
1246
+ vtrn.32 d4,d2
1247
+ vtrn.32 d5,d3
1248
+ sub r2,r2,#8
1249
+ sub r4,r4,#8
1250
+ vtrn.32 d6,d12
1251
+ vtrn.32 d7,d13
1252
+ vst1.8 d4,[r2,: 64]
1253
+ vst1.8 d5,[r4,: 64]
1254
+ sub r2,r2,#24
1255
+ sub r4,r4,#24
1256
+ vst1.8 d6,[r2,: 64]
1257
+ vst1.8 d7,[r4,: 64]
1258
+ add r2,r3,#336
1259
+ add r4,r3,#288
1260
+ vld1.8 {d0-d1},[r2,: 128]!
1261
+ vld1.8 {d2-d3},[r4,: 128]!
1262
+ vadd.i32 q0,q0,q1
1263
+ vld1.8 {d2-d3},[r2,: 128]!
1264
+ vld1.8 {d4-d5},[r4,: 128]!
1265
+ vadd.i32 q1,q1,q2
1266
+ add r5,r3,#288
1267
+ vld1.8 {d4},[r2,: 64]
1268
+ vld1.8 {d6},[r4,: 64]
1269
+ vadd.i32 q2,q2,q3
1270
+ vst1.8 {d0-d1},[r5,: 128]!
1271
+ vst1.8 {d2-d3},[r5,: 128]!
1272
+ vst1.8 d4,[r5,: 64]
1273
+ add r2,r3,#48
1274
+ add r4,r3,#144
1275
+ vld1.8 {d0-d1},[r4,: 128]!
1276
+ vld1.8 {d2-d3},[r4,: 128]!
1277
+ vld1.8 {d4},[r4,: 64]
1278
+ add r4,r3,#288
1279
+ vld1.8 {d6-d7},[r4,: 128]!
1280
+ vtrn.32 q0,q3
1281
+ vld1.8 {d8-d9},[r4,: 128]!
1282
+ vshl.i32 q5,q0,#4
1283
+ vtrn.32 q1,q4
1284
+ vshl.i32 q6,q3,#4
1285
+ vadd.i32 q5,q5,q0
1286
+ vadd.i32 q6,q6,q3
1287
+ vshl.i32 q7,q1,#4
1288
+ vld1.8 {d5},[r4,: 64]
1289
+ vshl.i32 q8,q4,#4
1290
+ vtrn.32 d4,d5
1291
+ vadd.i32 q7,q7,q1
1292
+ vadd.i32 q8,q8,q4
1293
+ vld1.8 {d18-d19},[r2,: 128]!
1294
+ vshl.i32 q10,q2,#4
1295
+ vld1.8 {d22-d23},[r2,: 128]!
1296
+ vadd.i32 q10,q10,q2
1297
+ vld1.8 {d24},[r2,: 64]
1298
+ vadd.i32 q5,q5,q0
1299
+ add r2,r3,#240
1300
+ vld1.8 {d26-d27},[r2,: 128]!
1301
+ vadd.i32 q6,q6,q3
1302
+ vld1.8 {d28-d29},[r2,: 128]!
1303
+ vadd.i32 q8,q8,q4
1304
+ vld1.8 {d25},[r2,: 64]
1305
+ vadd.i32 q10,q10,q2
1306
+ vtrn.32 q9,q13
1307
+ vadd.i32 q7,q7,q1
1308
+ vadd.i32 q5,q5,q0
1309
+ vtrn.32 q11,q14
1310
+ vadd.i32 q6,q6,q3
1311
+ add r2,sp,#560
1312
+ vadd.i32 q10,q10,q2
1313
+ vtrn.32 d24,d25
1314
+ vst1.8 {d12-d13},[r2,: 128]
1315
+ vshl.i32 q6,q13,#1
1316
+ add r2,sp,#576
1317
+ vst1.8 {d20-d21},[r2,: 128]
1318
+ vshl.i32 q10,q14,#1
1319
+ add r2,sp,#592
1320
+ vst1.8 {d12-d13},[r2,: 128]
1321
+ vshl.i32 q15,q12,#1
1322
+ vadd.i32 q8,q8,q4
1323
+ vext.32 d10,d31,d30,#0
1324
+ vadd.i32 q7,q7,q1
1325
+ add r2,sp,#608
1326
+ vst1.8 {d16-d17},[r2,: 128]
1327
+ vmull.s32 q8,d18,d5
1328
+ vmlal.s32 q8,d26,d4
1329
+ vmlal.s32 q8,d19,d9
1330
+ vmlal.s32 q8,d27,d3
1331
+ vmlal.s32 q8,d22,d8
1332
+ vmlal.s32 q8,d28,d2
1333
+ vmlal.s32 q8,d23,d7
1334
+ vmlal.s32 q8,d29,d1
1335
+ vmlal.s32 q8,d24,d6
1336
+ vmlal.s32 q8,d25,d0
1337
+ add r2,sp,#624
1338
+ vst1.8 {d14-d15},[r2,: 128]
1339
+ vmull.s32 q2,d18,d4
1340
+ vmlal.s32 q2,d12,d9
1341
+ vmlal.s32 q2,d13,d8
1342
+ vmlal.s32 q2,d19,d3
1343
+ vmlal.s32 q2,d22,d2
1344
+ vmlal.s32 q2,d23,d1
1345
+ vmlal.s32 q2,d24,d0
1346
+ add r2,sp,#640
1347
+ vst1.8 {d20-d21},[r2,: 128]
1348
+ vmull.s32 q7,d18,d9
1349
+ vmlal.s32 q7,d26,d3
1350
+ vmlal.s32 q7,d19,d8
1351
+ vmlal.s32 q7,d27,d2
1352
+ vmlal.s32 q7,d22,d7
1353
+ vmlal.s32 q7,d28,d1
1354
+ vmlal.s32 q7,d23,d6
1355
+ vmlal.s32 q7,d29,d0
1356
+ add r2,sp,#656
1357
+ vst1.8 {d10-d11},[r2,: 128]
1358
+ vmull.s32 q5,d18,d3
1359
+ vmlal.s32 q5,d19,d2
1360
+ vmlal.s32 q5,d22,d1
1361
+ vmlal.s32 q5,d23,d0
1362
+ vmlal.s32 q5,d12,d8
1363
+ add r2,sp,#672
1364
+ vst1.8 {d16-d17},[r2,: 128]
1365
+ vmull.s32 q4,d18,d8
1366
+ vmlal.s32 q4,d26,d2
1367
+ vmlal.s32 q4,d19,d7
1368
+ vmlal.s32 q4,d27,d1
1369
+ vmlal.s32 q4,d22,d6
1370
+ vmlal.s32 q4,d28,d0
1371
+ vmull.s32 q8,d18,d7
1372
+ vmlal.s32 q8,d26,d1
1373
+ vmlal.s32 q8,d19,d6
1374
+ vmlal.s32 q8,d27,d0
1375
+ add r2,sp,#576
1376
+ vld1.8 {d20-d21},[r2,: 128]
1377
+ vmlal.s32 q7,d24,d21
1378
+ vmlal.s32 q7,d25,d20
1379
+ vmlal.s32 q4,d23,d21
1380
+ vmlal.s32 q4,d29,d20
1381
+ vmlal.s32 q8,d22,d21
1382
+ vmlal.s32 q8,d28,d20
1383
+ vmlal.s32 q5,d24,d20
1384
+ add r2,sp,#576
1385
+ vst1.8 {d14-d15},[r2,: 128]
1386
+ vmull.s32 q7,d18,d6
1387
+ vmlal.s32 q7,d26,d0
1388
+ add r2,sp,#656
1389
+ vld1.8 {d30-d31},[r2,: 128]
1390
+ vmlal.s32 q2,d30,d21
1391
+ vmlal.s32 q7,d19,d21
1392
+ vmlal.s32 q7,d27,d20
1393
+ add r2,sp,#624
1394
+ vld1.8 {d26-d27},[r2,: 128]
1395
+ vmlal.s32 q4,d25,d27
1396
+ vmlal.s32 q8,d29,d27
1397
+ vmlal.s32 q8,d25,d26
1398
+ vmlal.s32 q7,d28,d27
1399
+ vmlal.s32 q7,d29,d26
1400
+ add r2,sp,#608
1401
+ vld1.8 {d28-d29},[r2,: 128]
1402
+ vmlal.s32 q4,d24,d29
1403
+ vmlal.s32 q8,d23,d29
1404
+ vmlal.s32 q8,d24,d28
1405
+ vmlal.s32 q7,d22,d29
1406
+ vmlal.s32 q7,d23,d28
1407
+ add r2,sp,#608
1408
+ vst1.8 {d8-d9},[r2,: 128]
1409
+ add r2,sp,#560
1410
+ vld1.8 {d8-d9},[r2,: 128]
1411
+ vmlal.s32 q7,d24,d9
1412
+ vmlal.s32 q7,d25,d31
1413
+ vmull.s32 q1,d18,d2
1414
+ vmlal.s32 q1,d19,d1
1415
+ vmlal.s32 q1,d22,d0
1416
+ vmlal.s32 q1,d24,d27
1417
+ vmlal.s32 q1,d23,d20
1418
+ vmlal.s32 q1,d12,d7
1419
+ vmlal.s32 q1,d13,d6
1420
+ vmull.s32 q6,d18,d1
1421
+ vmlal.s32 q6,d19,d0
1422
+ vmlal.s32 q6,d23,d27
1423
+ vmlal.s32 q6,d22,d20
1424
+ vmlal.s32 q6,d24,d26
1425
+ vmull.s32 q0,d18,d0
1426
+ vmlal.s32 q0,d22,d27
1427
+ vmlal.s32 q0,d23,d26
1428
+ vmlal.s32 q0,d24,d31
1429
+ vmlal.s32 q0,d19,d20
1430
+ add r2,sp,#640
1431
+ vld1.8 {d18-d19},[r2,: 128]
1432
+ vmlal.s32 q2,d18,d7
1433
+ vmlal.s32 q2,d19,d6
1434
+ vmlal.s32 q5,d18,d6
1435
+ vmlal.s32 q5,d19,d21
1436
+ vmlal.s32 q1,d18,d21
1437
+ vmlal.s32 q1,d19,d29
1438
+ vmlal.s32 q0,d18,d28
1439
+ vmlal.s32 q0,d19,d9
1440
+ vmlal.s32 q6,d18,d29
1441
+ vmlal.s32 q6,d19,d28
1442
+ add r2,sp,#592
1443
+ vld1.8 {d18-d19},[r2,: 128]
1444
+ add r2,sp,#512
1445
+ vld1.8 {d22-d23},[r2,: 128]
1446
+ vmlal.s32 q5,d19,d7
1447
+ vmlal.s32 q0,d18,d21
1448
+ vmlal.s32 q0,d19,d29
1449
+ vmlal.s32 q6,d18,d6
1450
+ add r2,sp,#528
1451
+ vld1.8 {d6-d7},[r2,: 128]
1452
+ vmlal.s32 q6,d19,d21
1453
+ add r2,sp,#576
1454
+ vld1.8 {d18-d19},[r2,: 128]
1455
+ vmlal.s32 q0,d30,d8
1456
+ add r2,sp,#672
1457
+ vld1.8 {d20-d21},[r2,: 128]
1458
+ vmlal.s32 q5,d30,d29
1459
+ add r2,sp,#608
1460
+ vld1.8 {d24-d25},[r2,: 128]
1461
+ vmlal.s32 q1,d30,d28
1462
+ vadd.i64 q13,q0,q11
1463
+ vadd.i64 q14,q5,q11
1464
+ vmlal.s32 q6,d30,d9
1465
+ vshr.s64 q4,q13,#26
1466
+ vshr.s64 q13,q14,#26
1467
+ vadd.i64 q7,q7,q4
1468
+ vshl.i64 q4,q4,#26
1469
+ vadd.i64 q14,q7,q3
1470
+ vadd.i64 q9,q9,q13
1471
+ vshl.i64 q13,q13,#26
1472
+ vadd.i64 q15,q9,q3
1473
+ vsub.i64 q0,q0,q4
1474
+ vshr.s64 q4,q14,#25
1475
+ vsub.i64 q5,q5,q13
1476
+ vshr.s64 q13,q15,#25
1477
+ vadd.i64 q6,q6,q4
1478
+ vshl.i64 q4,q4,#25
1479
+ vadd.i64 q14,q6,q11
1480
+ vadd.i64 q2,q2,q13
1481
+ vsub.i64 q4,q7,q4
1482
+ vshr.s64 q7,q14,#26
1483
+ vshl.i64 q13,q13,#25
1484
+ vadd.i64 q14,q2,q11
1485
+ vadd.i64 q8,q8,q7
1486
+ vshl.i64 q7,q7,#26
1487
+ vadd.i64 q15,q8,q3
1488
+ vsub.i64 q9,q9,q13
1489
+ vshr.s64 q13,q14,#26
1490
+ vsub.i64 q6,q6,q7
1491
+ vshr.s64 q7,q15,#25
1492
+ vadd.i64 q10,q10,q13
1493
+ vshl.i64 q13,q13,#26
1494
+ vadd.i64 q14,q10,q3
1495
+ vadd.i64 q1,q1,q7
1496
+ add r2,r3,#240
1497
+ vshl.i64 q7,q7,#25
1498
+ add r4,r3,#144
1499
+ vadd.i64 q15,q1,q11
1500
+ add r2,r2,#8
1501
+ vsub.i64 q2,q2,q13
1502
+ add r4,r4,#8
1503
+ vshr.s64 q13,q14,#25
1504
+ vsub.i64 q7,q8,q7
1505
+ vshr.s64 q8,q15,#26
1506
+ vadd.i64 q14,q13,q13
1507
+ vadd.i64 q12,q12,q8
1508
+ vtrn.32 d12,d14
1509
+ vshl.i64 q8,q8,#26
1510
+ vtrn.32 d13,d15
1511
+ vadd.i64 q3,q12,q3
1512
+ vadd.i64 q0,q0,q14
1513
+ vst1.8 d12,[r2,: 64]!
1514
+ vshl.i64 q7,q13,#4
1515
+ vst1.8 d13,[r4,: 64]!
1516
+ vsub.i64 q1,q1,q8
1517
+ vshr.s64 q3,q3,#25
1518
+ vadd.i64 q0,q0,q7
1519
+ vadd.i64 q5,q5,q3
1520
+ vshl.i64 q3,q3,#25
1521
+ vadd.i64 q6,q5,q11
1522
+ vadd.i64 q0,q0,q13
1523
+ vshl.i64 q7,q13,#25
1524
+ vadd.i64 q8,q0,q11
1525
+ vsub.i64 q3,q12,q3
1526
+ vshr.s64 q6,q6,#26
1527
+ vsub.i64 q7,q10,q7
1528
+ vtrn.32 d2,d6
1529
+ vshr.s64 q8,q8,#26
1530
+ vtrn.32 d3,d7
1531
+ vadd.i64 q3,q9,q6
1532
+ vst1.8 d2,[r2,: 64]
1533
+ vshl.i64 q6,q6,#26
1534
+ vst1.8 d3,[r4,: 64]
1535
+ vadd.i64 q1,q4,q8
1536
+ vtrn.32 d4,d14
1537
+ vshl.i64 q4,q8,#26
1538
+ vtrn.32 d5,d15
1539
+ vsub.i64 q5,q5,q6
1540
+ add r2,r2,#16
1541
+ vsub.i64 q0,q0,q4
1542
+ vst1.8 d4,[r2,: 64]
1543
+ add r4,r4,#16
1544
+ vst1.8 d5,[r4,: 64]
1545
+ vtrn.32 d10,d6
1546
+ vtrn.32 d11,d7
1547
+ sub r2,r2,#8
1548
+ sub r4,r4,#8
1549
+ vtrn.32 d0,d2
1550
+ vtrn.32 d1,d3
1551
+ vst1.8 d10,[r2,: 64]
1552
+ vst1.8 d11,[r4,: 64]
1553
+ sub r2,r2,#24
1554
+ sub r4,r4,#24
1555
+ vst1.8 d0,[r2,: 64]
1556
+ vst1.8 d1,[r4,: 64]
1557
+ ldr r2,[sp,#488]
1558
+ ldr r4,[sp,#492]
1559
+ subs r5,r2,#1
1560
+ bge ._mainloop
1561
+ add r1,r3,#144
1562
+ add r2,r3,#336
1563
+ vld1.8 {d0-d1},[r1,: 128]!
1564
+ vld1.8 {d2-d3},[r1,: 128]!
1565
+ vld1.8 {d4},[r1,: 64]
1566
+ vst1.8 {d0-d1},[r2,: 128]!
1567
+ vst1.8 {d2-d3},[r2,: 128]!
1568
+ vst1.8 d4,[r2,: 64]
1569
+ ldr r1,=0
1570
+ ._invertloop:
1571
+ add r2,r3,#144
1572
+ ldr r4,=0
1573
+ ldr r5,=2
1574
+ cmp r1,#1
1575
+ ldreq r5,=1
1576
+ addeq r2,r3,#336
1577
+ addeq r4,r3,#48
1578
+ cmp r1,#2
1579
+ ldreq r5,=1
1580
+ addeq r2,r3,#48
1581
+ cmp r1,#3
1582
+ ldreq r5,=5
1583
+ addeq r4,r3,#336
1584
+ cmp r1,#4
1585
+ ldreq r5,=10
1586
+ cmp r1,#5
1587
+ ldreq r5,=20
1588
+ cmp r1,#6
1589
+ ldreq r5,=10
1590
+ addeq r2,r3,#336
1591
+ addeq r4,r3,#336
1592
+ cmp r1,#7
1593
+ ldreq r5,=50
1594
+ cmp r1,#8
1595
+ ldreq r5,=100
1596
+ cmp r1,#9
1597
+ ldreq r5,=50
1598
+ addeq r2,r3,#336
1599
+ cmp r1,#10
1600
+ ldreq r5,=5
1601
+ addeq r2,r3,#48
1602
+ cmp r1,#11
1603
+ ldreq r5,=0
1604
+ addeq r2,r3,#96
1605
+ add r6,r3,#144
1606
+ add r7,r3,#288
1607
+ vld1.8 {d0-d1},[r6,: 128]!
1608
+ vld1.8 {d2-d3},[r6,: 128]!
1609
+ vld1.8 {d4},[r6,: 64]
1610
+ vst1.8 {d0-d1},[r7,: 128]!
1611
+ vst1.8 {d2-d3},[r7,: 128]!
1612
+ vst1.8 d4,[r7,: 64]
1613
+ cmp r5,#0
1614
+ beq ._skipsquaringloop
1615
+ ._squaringloop:
1616
+ add r6,r3,#288
1617
+ add r7,r3,#288
1618
+ add r8,r3,#288
1619
+ vmov.i32 q0,#19
1620
+ vmov.i32 q1,#0
1621
+ vmov.i32 q2,#1
1622
+ vzip.i32 q1,q2
1623
+ vld1.8 {d4-d5},[r7,: 128]!
1624
+ vld1.8 {d6-d7},[r7,: 128]!
1625
+ vld1.8 {d9},[r7,: 64]
1626
+ vld1.8 {d10-d11},[r6,: 128]!
1627
+ add r7,sp,#416
1628
+ vld1.8 {d12-d13},[r6,: 128]!
1629
+ vmul.i32 q7,q2,q0
1630
+ vld1.8 {d8},[r6,: 64]
1631
+ vext.32 d17,d11,d10,#1
1632
+ vmul.i32 q9,q3,q0
1633
+ vext.32 d16,d10,d8,#1
1634
+ vshl.u32 q10,q5,q1
1635
+ vext.32 d22,d14,d4,#1
1636
+ vext.32 d24,d18,d6,#1
1637
+ vshl.u32 q13,q6,q1
1638
+ vshl.u32 d28,d8,d2
1639
+ vrev64.i32 d22,d22
1640
+ vmul.i32 d1,d9,d1
1641
+ vrev64.i32 d24,d24
1642
+ vext.32 d29,d8,d13,#1
1643
+ vext.32 d0,d1,d9,#1
1644
+ vrev64.i32 d0,d0
1645
+ vext.32 d2,d9,d1,#1
1646
+ vext.32 d23,d15,d5,#1
1647
+ vmull.s32 q4,d20,d4
1648
+ vrev64.i32 d23,d23
1649
+ vmlal.s32 q4,d21,d1
1650
+ vrev64.i32 d2,d2
1651
+ vmlal.s32 q4,d26,d19
1652
+ vext.32 d3,d5,d15,#1
1653
+ vmlal.s32 q4,d27,d18
1654
+ vrev64.i32 d3,d3
1655
+ vmlal.s32 q4,d28,d15
1656
+ vext.32 d14,d12,d11,#1
1657
+ vmull.s32 q5,d16,d23
1658
+ vext.32 d15,d13,d12,#1
1659
+ vmlal.s32 q5,d17,d4
1660
+ vst1.8 d8,[r7,: 64]!
1661
+ vmlal.s32 q5,d14,d1
1662
+ vext.32 d12,d9,d8,#0
1663
+ vmlal.s32 q5,d15,d19
1664
+ vmov.i64 d13,#0
1665
+ vmlal.s32 q5,d29,d18
1666
+ vext.32 d25,d19,d7,#1
1667
+ vmlal.s32 q6,d20,d5
1668
+ vrev64.i32 d25,d25
1669
+ vmlal.s32 q6,d21,d4
1670
+ vst1.8 d11,[r7,: 64]!
1671
+ vmlal.s32 q6,d26,d1
1672
+ vext.32 d9,d10,d10,#0
1673
+ vmlal.s32 q6,d27,d19
1674
+ vmov.i64 d8,#0
1675
+ vmlal.s32 q6,d28,d18
1676
+ vmlal.s32 q4,d16,d24
1677
+ vmlal.s32 q4,d17,d5
1678
+ vmlal.s32 q4,d14,d4
1679
+ vst1.8 d12,[r7,: 64]!
1680
+ vmlal.s32 q4,d15,d1
1681
+ vext.32 d10,d13,d12,#0
1682
+ vmlal.s32 q4,d29,d19
1683
+ vmov.i64 d11,#0
1684
+ vmlal.s32 q5,d20,d6
1685
+ vmlal.s32 q5,d21,d5
1686
+ vmlal.s32 q5,d26,d4
1687
+ vext.32 d13,d8,d8,#0
1688
+ vmlal.s32 q5,d27,d1
1689
+ vmov.i64 d12,#0
1690
+ vmlal.s32 q5,d28,d19
1691
+ vst1.8 d9,[r7,: 64]!
1692
+ vmlal.s32 q6,d16,d25
1693
+ vmlal.s32 q6,d17,d6
1694
+ vst1.8 d10,[r7,: 64]
1695
+ vmlal.s32 q6,d14,d5
1696
+ vext.32 d8,d11,d10,#0
1697
+ vmlal.s32 q6,d15,d4
1698
+ vmov.i64 d9,#0
1699
+ vmlal.s32 q6,d29,d1
1700
+ vmlal.s32 q4,d20,d7
1701
+ vmlal.s32 q4,d21,d6
1702
+ vmlal.s32 q4,d26,d5
1703
+ vext.32 d11,d12,d12,#0
1704
+ vmlal.s32 q4,d27,d4
1705
+ vmov.i64 d10,#0
1706
+ vmlal.s32 q4,d28,d1
1707
+ vmlal.s32 q5,d16,d0
1708
+ sub r6,r7,#32
1709
+ vmlal.s32 q5,d17,d7
1710
+ vmlal.s32 q5,d14,d6
1711
+ vext.32 d30,d9,d8,#0
1712
+ vmlal.s32 q5,d15,d5
1713
+ vld1.8 {d31},[r6,: 64]!
1714
+ vmlal.s32 q5,d29,d4
1715
+ vmlal.s32 q15,d20,d0
1716
+ vext.32 d0,d6,d18,#1
1717
+ vmlal.s32 q15,d21,d25
1718
+ vrev64.i32 d0,d0
1719
+ vmlal.s32 q15,d26,d24
1720
+ vext.32 d1,d7,d19,#1
1721
+ vext.32 d7,d10,d10,#0
1722
+ vmlal.s32 q15,d27,d23
1723
+ vrev64.i32 d1,d1
1724
+ vld1.8 {d6},[r6,: 64]
1725
+ vmlal.s32 q15,d28,d22
1726
+ vmlal.s32 q3,d16,d4
1727
+ add r6,r6,#24
1728
+ vmlal.s32 q3,d17,d2
1729
+ vext.32 d4,d31,d30,#0
1730
+ vmov d17,d11
1731
+ vmlal.s32 q3,d14,d1
1732
+ vext.32 d11,d13,d13,#0
1733
+ vext.32 d13,d30,d30,#0
1734
+ vmlal.s32 q3,d15,d0
1735
+ vext.32 d1,d8,d8,#0
1736
+ vmlal.s32 q3,d29,d3
1737
+ vld1.8 {d5},[r6,: 64]
1738
+ sub r6,r6,#16
1739
+ vext.32 d10,d6,d6,#0
1740
+ vmov.i32 q1,#0xffffffff
1741
+ vshl.i64 q4,q1,#25
1742
+ add r7,sp,#512
1743
+ vld1.8 {d14-d15},[r7,: 128]
1744
+ vadd.i64 q9,q2,q7
1745
+ vshl.i64 q1,q1,#26
1746
+ vshr.s64 q10,q9,#26
1747
+ vld1.8 {d0},[r6,: 64]!
1748
+ vadd.i64 q5,q5,q10
1749
+ vand q9,q9,q1
1750
+ vld1.8 {d16},[r6,: 64]!
1751
+ add r6,sp,#528
1752
+ vld1.8 {d20-d21},[r6,: 128]
1753
+ vadd.i64 q11,q5,q10
1754
+ vsub.i64 q2,q2,q9
1755
+ vshr.s64 q9,q11,#25
1756
+ vext.32 d12,d5,d4,#0
1757
+ vand q11,q11,q4
1758
+ vadd.i64 q0,q0,q9
1759
+ vmov d19,d7
1760
+ vadd.i64 q3,q0,q7
1761
+ vsub.i64 q5,q5,q11
1762
+ vshr.s64 q11,q3,#26
1763
+ vext.32 d18,d11,d10,#0
1764
+ vand q3,q3,q1
1765
+ vadd.i64 q8,q8,q11
1766
+ vadd.i64 q11,q8,q10
1767
+ vsub.i64 q0,q0,q3
1768
+ vshr.s64 q3,q11,#25
1769
+ vand q11,q11,q4
1770
+ vadd.i64 q3,q6,q3
1771
+ vadd.i64 q6,q3,q7
1772
+ vsub.i64 q8,q8,q11
1773
+ vshr.s64 q11,q6,#26
1774
+ vand q6,q6,q1
1775
+ vadd.i64 q9,q9,q11
1776
+ vadd.i64 d25,d19,d21
1777
+ vsub.i64 q3,q3,q6
1778
+ vshr.s64 d23,d25,#25
1779
+ vand q4,q12,q4
1780
+ vadd.i64 d21,d23,d23
1781
+ vshl.i64 d25,d23,#4
1782
+ vadd.i64 d21,d21,d23
1783
+ vadd.i64 d25,d25,d21
1784
+ vadd.i64 d4,d4,d25
1785
+ vzip.i32 q0,q8
1786
+ vadd.i64 d12,d4,d14
1787
+ add r6,r8,#8
1788
+ vst1.8 d0,[r6,: 64]
1789
+ vsub.i64 d19,d19,d9
1790
+ add r6,r6,#16
1791
+ vst1.8 d16,[r6,: 64]
1792
+ vshr.s64 d22,d12,#26
1793
+ vand q0,q6,q1
1794
+ vadd.i64 d10,d10,d22
1795
+ vzip.i32 q3,q9
1796
+ vsub.i64 d4,d4,d0
1797
+ sub r6,r6,#8
1798
+ vst1.8 d6,[r6,: 64]
1799
+ add r6,r6,#16
1800
+ vst1.8 d18,[r6,: 64]
1801
+ vzip.i32 q2,q5
1802
+ sub r6,r6,#32
1803
+ vst1.8 d4,[r6,: 64]
1804
+ subs r5,r5,#1
1805
+ bhi ._squaringloop
1806
+ ._skipsquaringloop:
1807
+ mov r2,r2
1808
+ add r5,r3,#288
1809
+ add r6,r3,#144
1810
+ vmov.i32 q0,#19
1811
+ vmov.i32 q1,#0
1812
+ vmov.i32 q2,#1
1813
+ vzip.i32 q1,q2
1814
+ vld1.8 {d4-d5},[r5,: 128]!
1815
+ vld1.8 {d6-d7},[r5,: 128]!
1816
+ vld1.8 {d9},[r5,: 64]
1817
+ vld1.8 {d10-d11},[r2,: 128]!
1818
+ add r5,sp,#416
1819
+ vld1.8 {d12-d13},[r2,: 128]!
1820
+ vmul.i32 q7,q2,q0
1821
+ vld1.8 {d8},[r2,: 64]
1822
+ vext.32 d17,d11,d10,#1
1823
+ vmul.i32 q9,q3,q0
1824
+ vext.32 d16,d10,d8,#1
1825
+ vshl.u32 q10,q5,q1
1826
+ vext.32 d22,d14,d4,#1
1827
+ vext.32 d24,d18,d6,#1
1828
+ vshl.u32 q13,q6,q1
1829
+ vshl.u32 d28,d8,d2
1830
+ vrev64.i32 d22,d22
1831
+ vmul.i32 d1,d9,d1
1832
+ vrev64.i32 d24,d24
1833
+ vext.32 d29,d8,d13,#1
1834
+ vext.32 d0,d1,d9,#1
1835
+ vrev64.i32 d0,d0
1836
+ vext.32 d2,d9,d1,#1
1837
+ vext.32 d23,d15,d5,#1
1838
+ vmull.s32 q4,d20,d4
1839
+ vrev64.i32 d23,d23
1840
+ vmlal.s32 q4,d21,d1
1841
+ vrev64.i32 d2,d2
1842
+ vmlal.s32 q4,d26,d19
1843
+ vext.32 d3,d5,d15,#1
1844
+ vmlal.s32 q4,d27,d18
1845
+ vrev64.i32 d3,d3
1846
+ vmlal.s32 q4,d28,d15
1847
+ vext.32 d14,d12,d11,#1
1848
+ vmull.s32 q5,d16,d23
1849
+ vext.32 d15,d13,d12,#1
1850
+ vmlal.s32 q5,d17,d4
1851
+ vst1.8 d8,[r5,: 64]!
1852
+ vmlal.s32 q5,d14,d1
1853
+ vext.32 d12,d9,d8,#0
1854
+ vmlal.s32 q5,d15,d19
1855
+ vmov.i64 d13,#0
1856
+ vmlal.s32 q5,d29,d18
1857
+ vext.32 d25,d19,d7,#1
1858
+ vmlal.s32 q6,d20,d5
1859
+ vrev64.i32 d25,d25
1860
+ vmlal.s32 q6,d21,d4
1861
+ vst1.8 d11,[r5,: 64]!
1862
+ vmlal.s32 q6,d26,d1
1863
+ vext.32 d9,d10,d10,#0
1864
+ vmlal.s32 q6,d27,d19
1865
+ vmov.i64 d8,#0
1866
+ vmlal.s32 q6,d28,d18
1867
+ vmlal.s32 q4,d16,d24
1868
+ vmlal.s32 q4,d17,d5
1869
+ vmlal.s32 q4,d14,d4
1870
+ vst1.8 d12,[r5,: 64]!
1871
+ vmlal.s32 q4,d15,d1
1872
+ vext.32 d10,d13,d12,#0
1873
+ vmlal.s32 q4,d29,d19
1874
+ vmov.i64 d11,#0
1875
+ vmlal.s32 q5,d20,d6
1876
+ vmlal.s32 q5,d21,d5
1877
+ vmlal.s32 q5,d26,d4
1878
+ vext.32 d13,d8,d8,#0
1879
+ vmlal.s32 q5,d27,d1
1880
+ vmov.i64 d12,#0
1881
+ vmlal.s32 q5,d28,d19
1882
+ vst1.8 d9,[r5,: 64]!
1883
+ vmlal.s32 q6,d16,d25
1884
+ vmlal.s32 q6,d17,d6
1885
+ vst1.8 d10,[r5,: 64]
1886
+ vmlal.s32 q6,d14,d5
1887
+ vext.32 d8,d11,d10,#0
1888
+ vmlal.s32 q6,d15,d4
1889
+ vmov.i64 d9,#0
1890
+ vmlal.s32 q6,d29,d1
1891
+ vmlal.s32 q4,d20,d7
1892
+ vmlal.s32 q4,d21,d6
1893
+ vmlal.s32 q4,d26,d5
1894
+ vext.32 d11,d12,d12,#0
1895
+ vmlal.s32 q4,d27,d4
1896
+ vmov.i64 d10,#0
1897
+ vmlal.s32 q4,d28,d1
1898
+ vmlal.s32 q5,d16,d0
1899
+ sub r2,r5,#32
1900
+ vmlal.s32 q5,d17,d7
1901
+ vmlal.s32 q5,d14,d6
1902
+ vext.32 d30,d9,d8,#0
1903
+ vmlal.s32 q5,d15,d5
1904
+ vld1.8 {d31},[r2,: 64]!
1905
+ vmlal.s32 q5,d29,d4
1906
+ vmlal.s32 q15,d20,d0
1907
+ vext.32 d0,d6,d18,#1
1908
+ vmlal.s32 q15,d21,d25
1909
+ vrev64.i32 d0,d0
1910
+ vmlal.s32 q15,d26,d24
1911
+ vext.32 d1,d7,d19,#1
1912
+ vext.32 d7,d10,d10,#0
1913
+ vmlal.s32 q15,d27,d23
1914
+ vrev64.i32 d1,d1
1915
+ vld1.8 {d6},[r2,: 64]
1916
+ vmlal.s32 q15,d28,d22
1917
+ vmlal.s32 q3,d16,d4
1918
+ add r2,r2,#24
1919
+ vmlal.s32 q3,d17,d2
1920
+ vext.32 d4,d31,d30,#0
1921
+ vmov d17,d11
1922
+ vmlal.s32 q3,d14,d1
1923
+ vext.32 d11,d13,d13,#0
1924
+ vext.32 d13,d30,d30,#0
1925
+ vmlal.s32 q3,d15,d0
1926
+ vext.32 d1,d8,d8,#0
1927
+ vmlal.s32 q3,d29,d3
1928
+ vld1.8 {d5},[r2,: 64]
1929
+ sub r2,r2,#16
1930
+ vext.32 d10,d6,d6,#0
1931
+ vmov.i32 q1,#0xffffffff
1932
+ vshl.i64 q4,q1,#25
1933
+ add r5,sp,#512
1934
+ vld1.8 {d14-d15},[r5,: 128]
1935
+ vadd.i64 q9,q2,q7
1936
+ vshl.i64 q1,q1,#26
1937
+ vshr.s64 q10,q9,#26
1938
+ vld1.8 {d0},[r2,: 64]!
1939
+ vadd.i64 q5,q5,q10
1940
+ vand q9,q9,q1
1941
+ vld1.8 {d16},[r2,: 64]!
1942
+ add r2,sp,#528
1943
+ vld1.8 {d20-d21},[r2,: 128]
1944
+ vadd.i64 q11,q5,q10
1945
+ vsub.i64 q2,q2,q9
1946
+ vshr.s64 q9,q11,#25
1947
+ vext.32 d12,d5,d4,#0
1948
+ vand q11,q11,q4
1949
+ vadd.i64 q0,q0,q9
1950
+ vmov d19,d7
1951
+ vadd.i64 q3,q0,q7
1952
+ vsub.i64 q5,q5,q11
1953
+ vshr.s64 q11,q3,#26
1954
+ vext.32 d18,d11,d10,#0
1955
+ vand q3,q3,q1
1956
+ vadd.i64 q8,q8,q11
1957
+ vadd.i64 q11,q8,q10
1958
+ vsub.i64 q0,q0,q3
1959
+ vshr.s64 q3,q11,#25
1960
+ vand q11,q11,q4
1961
+ vadd.i64 q3,q6,q3
1962
+ vadd.i64 q6,q3,q7
1963
+ vsub.i64 q8,q8,q11
1964
+ vshr.s64 q11,q6,#26
1965
+ vand q6,q6,q1
1966
+ vadd.i64 q9,q9,q11
1967
+ vadd.i64 d25,d19,d21
1968
+ vsub.i64 q3,q3,q6
1969
+ vshr.s64 d23,d25,#25
1970
+ vand q4,q12,q4
1971
+ vadd.i64 d21,d23,d23
1972
+ vshl.i64 d25,d23,#4
1973
+ vadd.i64 d21,d21,d23
1974
+ vadd.i64 d25,d25,d21
1975
+ vadd.i64 d4,d4,d25
1976
+ vzip.i32 q0,q8
1977
+ vadd.i64 d12,d4,d14
1978
+ add r2,r6,#8
1979
+ vst1.8 d0,[r2,: 64]
1980
+ vsub.i64 d19,d19,d9
1981
+ add r2,r2,#16
1982
+ vst1.8 d16,[r2,: 64]
1983
+ vshr.s64 d22,d12,#26
1984
+ vand q0,q6,q1
1985
+ vadd.i64 d10,d10,d22
1986
+ vzip.i32 q3,q9
1987
+ vsub.i64 d4,d4,d0
1988
+ sub r2,r2,#8
1989
+ vst1.8 d6,[r2,: 64]
1990
+ add r2,r2,#16
1991
+ vst1.8 d18,[r2,: 64]
1992
+ vzip.i32 q2,q5
1993
+ sub r2,r2,#32
1994
+ vst1.8 d4,[r2,: 64]
1995
+ cmp r4,#0
1996
+ beq ._skippostcopy
1997
+ add r2,r3,#144
1998
+ mov r4,r4
1999
+ vld1.8 {d0-d1},[r2,: 128]!
2000
+ vld1.8 {d2-d3},[r2,: 128]!
2001
+ vld1.8 {d4},[r2,: 64]
2002
+ vst1.8 {d0-d1},[r4,: 128]!
2003
+ vst1.8 {d2-d3},[r4,: 128]!
2004
+ vst1.8 d4,[r4,: 64]
2005
+ ._skippostcopy:
2006
+ cmp r1,#1
2007
+ bne ._skipfinalcopy
2008
+ add r2,r3,#288
2009
+ add r4,r3,#144
2010
+ vld1.8 {d0-d1},[r2,: 128]!
2011
+ vld1.8 {d2-d3},[r2,: 128]!
2012
+ vld1.8 {d4},[r2,: 64]
2013
+ vst1.8 {d0-d1},[r4,: 128]!
2014
+ vst1.8 {d2-d3},[r4,: 128]!
2015
+ vst1.8 d4,[r4,: 64]
2016
+ ._skipfinalcopy:
2017
+ add r1,r1,#1
2018
+ cmp r1,#12
2019
+ blo ._invertloop
2020
+ add r1,r3,#144
2021
+ ldr r2,[r1],#4
2022
+ ldr r3,[r1],#4
2023
+ ldr r4,[r1],#4
2024
+ ldr r5,[r1],#4
2025
+ ldr r6,[r1],#4
2026
+ ldr r7,[r1],#4
2027
+ ldr r8,[r1],#4
2028
+ ldr r9,[r1],#4
2029
+ ldr r10,[r1],#4
2030
+ ldr r1,[r1]
2031
+ add r11,r1,r1,LSL #4
2032
+ add r11,r11,r1,LSL #1
2033
+ add r11,r11,#16777216
2034
+ mov r11,r11,ASR #25
2035
+ add r11,r11,r2
2036
+ mov r11,r11,ASR #26
2037
+ add r11,r11,r3
2038
+ mov r11,r11,ASR #25
2039
+ add r11,r11,r4
2040
+ mov r11,r11,ASR #26
2041
+ add r11,r11,r5
2042
+ mov r11,r11,ASR #25
2043
+ add r11,r11,r6
2044
+ mov r11,r11,ASR #26
2045
+ add r11,r11,r7
2046
+ mov r11,r11,ASR #25
2047
+ add r11,r11,r8
2048
+ mov r11,r11,ASR #26
2049
+ add r11,r11,r9
2050
+ mov r11,r11,ASR #25
2051
+ add r11,r11,r10
2052
+ mov r11,r11,ASR #26
2053
+ add r11,r11,r1
2054
+ mov r11,r11,ASR #25
2055
+ add r2,r2,r11
2056
+ add r2,r2,r11,LSL #1
2057
+ add r2,r2,r11,LSL #4
2058
+ mov r11,r2,ASR #26
2059
+ add r3,r3,r11
2060
+ sub r2,r2,r11,LSL #26
2061
+ mov r11,r3,ASR #25
2062
+ add r4,r4,r11
2063
+ sub r3,r3,r11,LSL #25
2064
+ mov r11,r4,ASR #26
2065
+ add r5,r5,r11
2066
+ sub r4,r4,r11,LSL #26
2067
+ mov r11,r5,ASR #25
2068
+ add r6,r6,r11
2069
+ sub r5,r5,r11,LSL #25
2070
+ mov r11,r6,ASR #26
2071
+ add r7,r7,r11
2072
+ sub r6,r6,r11,LSL #26
2073
+ mov r11,r7,ASR #25
2074
+ add r8,r8,r11
2075
+ sub r7,r7,r11,LSL #25
2076
+ mov r11,r8,ASR #26
2077
+ add r9,r9,r11
2078
+ sub r8,r8,r11,LSL #26
2079
+ mov r11,r9,ASR #25
2080
+ add r10,r10,r11
2081
+ sub r9,r9,r11,LSL #25
2082
+ mov r11,r10,ASR #26
2083
+ add r1,r1,r11
2084
+ sub r10,r10,r11,LSL #26
2085
+ mov r11,r1,ASR #25
2086
+ sub r1,r1,r11,LSL #25
2087
+ add r2,r2,r3,LSL #26
2088
+ mov r3,r3,LSR #6
2089
+ add r3,r3,r4,LSL #19
2090
+ mov r4,r4,LSR #13
2091
+ add r4,r4,r5,LSL #13
2092
+ mov r5,r5,LSR #19
2093
+ add r5,r5,r6,LSL #6
2094
+ add r6,r7,r8,LSL #25
2095
+ mov r7,r8,LSR #7
2096
+ add r7,r7,r9,LSL #19
2097
+ mov r8,r9,LSR #13
2098
+ add r8,r8,r10,LSL #12
2099
+ mov r9,r10,LSR #20
2100
+ add r1,r9,r1,LSL #6
2101
+ str r2,[r0],#4
2102
+ str r3,[r0],#4
2103
+ str r4,[r0],#4
2104
+ str r5,[r0],#4
2105
+ str r6,[r0],#4
2106
+ str r7,[r0],#4
2107
+ str r8,[r0],#4
2108
+ str r1,[r0]
2109
+ ldrd r4,[sp,#0]
2110
+ ldrd r6,[sp,#8]
2111
+ ldrd r8,[sp,#16]
2112
+ ldrd r10,[sp,#24]
2113
+ ldr r12,[sp,#480]
2114
+ ldr r14,[sp,#484]
2115
+ ldr r0,=0
2116
+ mov sp,r12
2117
+ vpop {q4,q5,q6,q7}
2118
+ bx lr