ring-native 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
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