react-native-vision-camera-spoof-detector 1.1.22 → 1.1.24

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 (201) hide show
  1. package/android/CMakeLists.txt +12 -0
  2. package/android/build.gradle +10 -9
  3. package/android/src/main/cpp/cpp-adapter.cpp +6 -3
  4. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofingAdvanced.kt +83 -0
  5. package/android/src/main/java/com/margelo/nitro/camera/spoofdetector/HybridSpoofDetectorOutput.kt +26 -11
  6. package/package.json +1 -1
  7. package/android/src/main/cpp/CMakeLists.txt +0 -33
  8. package/android/src/main/cpp/FaceAntiSpoofJSI.cpp +0 -142
  9. package/android/src/main/cpp/FastYuvJni.cpp +0 -111
  10. package/android/src/main/cpp/fast_yuv.cpp +0 -342
  11. package/android/src/main/cpp/fast_yuv.h +0 -23
  12. package/android/src/main/cpp/libyuv/.clang-format +0 -6
  13. package/android/src/main/cpp/libyuv/.gn +0 -40
  14. package/android/src/main/cpp/libyuv/.vpython3 +0 -410
  15. package/android/src/main/cpp/libyuv/AUTHORS +0 -7
  16. package/android/src/main/cpp/libyuv/Android.bp +0 -202
  17. package/android/src/main/cpp/libyuv/Android.mk +0 -106
  18. package/android/src/main/cpp/libyuv/BUILD.gn +0 -490
  19. package/android/src/main/cpp/libyuv/CM_linux_packages.cmake +0 -70
  20. package/android/src/main/cpp/libyuv/CMakeLists.txt +0 -259
  21. package/android/src/main/cpp/libyuv/DEPS +0 -935
  22. package/android/src/main/cpp/libyuv/DIR_METADATA +0 -3
  23. package/android/src/main/cpp/libyuv/LICENSE +0 -29
  24. package/android/src/main/cpp/libyuv/OWNERS +0 -11
  25. package/android/src/main/cpp/libyuv/PATENTS +0 -24
  26. package/android/src/main/cpp/libyuv/PRESUBMIT.py +0 -65
  27. package/android/src/main/cpp/libyuv/README.chromium +0 -11
  28. package/android/src/main/cpp/libyuv/README.md +0 -19
  29. package/android/src/main/cpp/libyuv/build_overrides/build.gni +0 -60
  30. package/android/src/main/cpp/libyuv/build_overrides/gtest.gni +0 -19
  31. package/android/src/main/cpp/libyuv/build_overrides/partition_alloc.gni +0 -17
  32. package/android/src/main/cpp/libyuv/codereview.settings +0 -5
  33. package/android/src/main/cpp/libyuv/docs/deprecated_builds.md +0 -409
  34. package/android/src/main/cpp/libyuv/docs/environment_variables.md +0 -64
  35. package/android/src/main/cpp/libyuv/docs/feature_detection.md +0 -108
  36. package/android/src/main/cpp/libyuv/docs/filtering.md +0 -196
  37. package/android/src/main/cpp/libyuv/docs/formats.md +0 -208
  38. package/android/src/main/cpp/libyuv/docs/getting_started.md +0 -296
  39. package/android/src/main/cpp/libyuv/docs/rotation.md +0 -107
  40. package/android/src/main/cpp/libyuv/download_vs_toolchain.py +0 -29
  41. package/android/src/main/cpp/libyuv/include/libyuv/basic_types.h +0 -68
  42. package/android/src/main/cpp/libyuv/include/libyuv/compare.h +0 -111
  43. package/android/src/main/cpp/libyuv/include/libyuv/compare_row.h +0 -112
  44. package/android/src/main/cpp/libyuv/include/libyuv/convert.h +0 -1117
  45. package/android/src/main/cpp/libyuv/include/libyuv/convert_argb.h +0 -2335
  46. package/android/src/main/cpp/libyuv/include/libyuv/convert_from.h +0 -203
  47. package/android/src/main/cpp/libyuv/include/libyuv/convert_from_argb.h +0 -394
  48. package/android/src/main/cpp/libyuv/include/libyuv/cpu_id.h +0 -147
  49. package/android/src/main/cpp/libyuv/include/libyuv/cpu_support.h +0 -99
  50. package/android/src/main/cpp/libyuv/include/libyuv/loongson_intrinsics.h +0 -1949
  51. package/android/src/main/cpp/libyuv/include/libyuv/mjpeg_decoder.h +0 -195
  52. package/android/src/main/cpp/libyuv/include/libyuv/planar_functions.h +0 -1131
  53. package/android/src/main/cpp/libyuv/include/libyuv/rotate.h +0 -296
  54. package/android/src/main/cpp/libyuv/include/libyuv/rotate_argb.h +0 -37
  55. package/android/src/main/cpp/libyuv/include/libyuv/rotate_row.h +0 -265
  56. package/android/src/main/cpp/libyuv/include/libyuv/row.h +0 -6738
  57. package/android/src/main/cpp/libyuv/include/libyuv/row_sve.h +0 -2154
  58. package/android/src/main/cpp/libyuv/include/libyuv/scale.h +0 -336
  59. package/android/src/main/cpp/libyuv/include/libyuv/scale_argb.h +0 -76
  60. package/android/src/main/cpp/libyuv/include/libyuv/scale_rgb.h +0 -42
  61. package/android/src/main/cpp/libyuv/include/libyuv/scale_row.h +0 -1726
  62. package/android/src/main/cpp/libyuv/include/libyuv/scale_uv.h +0 -51
  63. package/android/src/main/cpp/libyuv/include/libyuv/version.h +0 -16
  64. package/android/src/main/cpp/libyuv/include/libyuv/video_common.h +0 -222
  65. package/android/src/main/cpp/libyuv/include/libyuv.h +0 -33
  66. package/android/src/main/cpp/libyuv/infra/config/OWNERS +0 -3
  67. package/android/src/main/cpp/libyuv/infra/config/PRESUBMIT.py +0 -17
  68. package/android/src/main/cpp/libyuv/infra/config/README.md +0 -2
  69. package/android/src/main/cpp/libyuv/infra/config/codereview.settings +0 -6
  70. package/android/src/main/cpp/libyuv/infra/config/commit-queue.cfg +0 -144
  71. package/android/src/main/cpp/libyuv/infra/config/cr-buildbucket.cfg +0 -1185
  72. package/android/src/main/cpp/libyuv/infra/config/luci-logdog.cfg +0 -9
  73. package/android/src/main/cpp/libyuv/infra/config/luci-milo.cfg +0 -246
  74. package/android/src/main/cpp/libyuv/infra/config/luci-scheduler.cfg +0 -385
  75. package/android/src/main/cpp/libyuv/infra/config/main.star +0 -402
  76. package/android/src/main/cpp/libyuv/infra/config/project.cfg +0 -16
  77. package/android/src/main/cpp/libyuv/infra/config/realms.cfg +0 -111
  78. package/android/src/main/cpp/libyuv/libyuv.gni +0 -34
  79. package/android/src/main/cpp/libyuv/libyuv.gyp +0 -149
  80. package/android/src/main/cpp/libyuv/libyuv.gypi +0 -87
  81. package/android/src/main/cpp/libyuv/linux.mk +0 -96
  82. package/android/src/main/cpp/libyuv/public.mk +0 -13
  83. package/android/src/main/cpp/libyuv/pylintrc +0 -49
  84. package/android/src/main/cpp/libyuv/riscv_script/prepare_toolchain_qemu.sh +0 -74
  85. package/android/src/main/cpp/libyuv/riscv_script/riscv-clang.cmake +0 -56
  86. package/android/src/main/cpp/libyuv/riscv_script/run_qemu.sh +0 -15
  87. package/android/src/main/cpp/libyuv/source/compare.cc +0 -435
  88. package/android/src/main/cpp/libyuv/source/compare_common.cc +0 -74
  89. package/android/src/main/cpp/libyuv/source/compare_gcc.cc +0 -362
  90. package/android/src/main/cpp/libyuv/source/compare_neon.cc +0 -96
  91. package/android/src/main/cpp/libyuv/source/compare_neon64.cc +0 -223
  92. package/android/src/main/cpp/libyuv/source/compare_win.cc +0 -241
  93. package/android/src/main/cpp/libyuv/source/convert.cc +0 -4746
  94. package/android/src/main/cpp/libyuv/source/convert_argb.cc +0 -9179
  95. package/android/src/main/cpp/libyuv/source/convert_from.cc +0 -866
  96. package/android/src/main/cpp/libyuv/source/convert_from_argb.cc +0 -3671
  97. package/android/src/main/cpp/libyuv/source/convert_jpeg.cc +0 -602
  98. package/android/src/main/cpp/libyuv/source/convert_to_argb.cc +0 -391
  99. package/android/src/main/cpp/libyuv/source/convert_to_i420.cc +0 -288
  100. package/android/src/main/cpp/libyuv/source/cpu_id.cc +0 -496
  101. package/android/src/main/cpp/libyuv/source/mjpeg_decoder.cc +0 -580
  102. package/android/src/main/cpp/libyuv/source/mjpeg_validate.cc +0 -71
  103. package/android/src/main/cpp/libyuv/source/planar_functions.cc +0 -5663
  104. package/android/src/main/cpp/libyuv/source/rotate.cc +0 -1241
  105. package/android/src/main/cpp/libyuv/source/rotate_any.cc +0 -76
  106. package/android/src/main/cpp/libyuv/source/rotate_argb.cc +0 -259
  107. package/android/src/main/cpp/libyuv/source/rotate_common.cc +0 -208
  108. package/android/src/main/cpp/libyuv/source/rotate_gcc.cc +0 -505
  109. package/android/src/main/cpp/libyuv/source/rotate_lsx.cc +0 -233
  110. package/android/src/main/cpp/libyuv/source/rotate_neon.cc +0 -219
  111. package/android/src/main/cpp/libyuv/source/rotate_neon64.cc +0 -273
  112. package/android/src/main/cpp/libyuv/source/rotate_sme.cc +0 -174
  113. package/android/src/main/cpp/libyuv/source/rotate_win.cc +0 -253
  114. package/android/src/main/cpp/libyuv/source/row_any.cc +0 -2519
  115. package/android/src/main/cpp/libyuv/source/row_common.cc +0 -4461
  116. package/android/src/main/cpp/libyuv/source/row_gcc.cc +0 -9570
  117. package/android/src/main/cpp/libyuv/source/row_lasx.cc +0 -2343
  118. package/android/src/main/cpp/libyuv/source/row_lsx.cc +0 -3030
  119. package/android/src/main/cpp/libyuv/source/row_neon.cc +0 -4026
  120. package/android/src/main/cpp/libyuv/source/row_neon64.cc +0 -5617
  121. package/android/src/main/cpp/libyuv/source/row_rvv.cc +0 -2599
  122. package/android/src/main/cpp/libyuv/source/row_sme.cc +0 -1183
  123. package/android/src/main/cpp/libyuv/source/row_sve.cc +0 -1088
  124. package/android/src/main/cpp/libyuv/source/row_win.cc +0 -6453
  125. package/android/src/main/cpp/libyuv/source/scale.cc +0 -2710
  126. package/android/src/main/cpp/libyuv/source/scale_any.cc +0 -991
  127. package/android/src/main/cpp/libyuv/source/scale_argb.cc +0 -1158
  128. package/android/src/main/cpp/libyuv/source/scale_common.cc +0 -1977
  129. package/android/src/main/cpp/libyuv/source/scale_gcc.cc +0 -2947
  130. package/android/src/main/cpp/libyuv/source/scale_lsx.cc +0 -739
  131. package/android/src/main/cpp/libyuv/source/scale_neon.cc +0 -1449
  132. package/android/src/main/cpp/libyuv/source/scale_neon64.cc +0 -1552
  133. package/android/src/main/cpp/libyuv/source/scale_rgb.cc +0 -82
  134. package/android/src/main/cpp/libyuv/source/scale_rvv.cc +0 -1971
  135. package/android/src/main/cpp/libyuv/source/scale_sme.cc +0 -555
  136. package/android/src/main/cpp/libyuv/source/scale_uv.cc +0 -1159
  137. package/android/src/main/cpp/libyuv/source/scale_win.cc +0 -1392
  138. package/android/src/main/cpp/libyuv/source/test.sh +0 -35
  139. package/android/src/main/cpp/libyuv/source/video_common.cc +0 -62
  140. package/android/src/main/cpp/libyuv/tools_libyuv/OWNERS +0 -4
  141. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/roll_deps.py +0 -931
  142. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/roll_deps_test.py +0 -164
  143. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS +0 -21
  144. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.new +0 -13
  145. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old +0 -13
  146. package/android/src/main/cpp/libyuv/tools_libyuv/get_landmines.py +0 -38
  147. package/android/src/main/cpp/libyuv/tools_libyuv/msan/OWNERS +0 -3
  148. package/android/src/main/cpp/libyuv/tools_libyuv/msan/blacklist.txt +0 -9
  149. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/OWNERS +0 -3
  150. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/blacklist.txt +0 -15
  151. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/vptr_blacklist.txt +0 -25
  152. package/android/src/main/cpp/libyuv/unit_test/basictypes_test.cc +0 -43
  153. package/android/src/main/cpp/libyuv/unit_test/color_test.cc +0 -848
  154. package/android/src/main/cpp/libyuv/unit_test/compare_test.cc +0 -739
  155. package/android/src/main/cpp/libyuv/unit_test/convert_argb_test.cc +0 -2867
  156. package/android/src/main/cpp/libyuv/unit_test/convert_test.cc +0 -2133
  157. package/android/src/main/cpp/libyuv/unit_test/cpu_test.cc +0 -427
  158. package/android/src/main/cpp/libyuv/unit_test/cpu_thread_test.cc +0 -63
  159. package/android/src/main/cpp/libyuv/unit_test/math_test.cc +0 -160
  160. package/android/src/main/cpp/libyuv/unit_test/planar_test.cc +0 -4731
  161. package/android/src/main/cpp/libyuv/unit_test/rotate_argb_test.cc +0 -334
  162. package/android/src/main/cpp/libyuv/unit_test/rotate_test.cc +0 -962
  163. package/android/src/main/cpp/libyuv/unit_test/scale_argb_test.cc +0 -590
  164. package/android/src/main/cpp/libyuv/unit_test/scale_plane_test.cc +0 -465
  165. package/android/src/main/cpp/libyuv/unit_test/scale_rgb_test.cc +0 -280
  166. package/android/src/main/cpp/libyuv/unit_test/scale_test.cc +0 -1135
  167. package/android/src/main/cpp/libyuv/unit_test/scale_uv_test.cc +0 -249
  168. package/android/src/main/cpp/libyuv/unit_test/testdata/arm_v7.txt +0 -12
  169. package/android/src/main/cpp/libyuv/unit_test/testdata/mips.txt +0 -7
  170. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson2k.txt +0 -5
  171. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson3.txt +0 -10
  172. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson_mmi.txt +0 -7
  173. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64.txt +0 -4
  174. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv.txt +0 -4
  175. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv_zvfh.txt +0 -4
  176. package/android/src/main/cpp/libyuv/unit_test/testdata/tegra3.txt +0 -23
  177. package/android/src/main/cpp/libyuv/unit_test/testdata/test0.jpg +0 -0
  178. package/android/src/main/cpp/libyuv/unit_test/testdata/test1.jpg +0 -0
  179. package/android/src/main/cpp/libyuv/unit_test/testdata/test2.jpg +0 -0
  180. package/android/src/main/cpp/libyuv/unit_test/testdata/test3.jpg +0 -0
  181. package/android/src/main/cpp/libyuv/unit_test/testdata/test4.jpg +0 -0
  182. package/android/src/main/cpp/libyuv/unit_test/unit_test.cc +0 -581
  183. package/android/src/main/cpp/libyuv/unit_test/unit_test.h +0 -232
  184. package/android/src/main/cpp/libyuv/unit_test/video_common_test.cc +0 -112
  185. package/android/src/main/cpp/libyuv/util/Makefile +0 -9
  186. package/android/src/main/cpp/libyuv/util/color.cc +0 -120
  187. package/android/src/main/cpp/libyuv/util/compare.cc +0 -67
  188. package/android/src/main/cpp/libyuv/util/cpuid.c +0 -211
  189. package/android/src/main/cpp/libyuv/util/i444tonv12_eg.cc +0 -28
  190. package/android/src/main/cpp/libyuv/util/psnr.cc +0 -291
  191. package/android/src/main/cpp/libyuv/util/psnr.h +0 -47
  192. package/android/src/main/cpp/libyuv/util/psnr_main.cc +0 -620
  193. package/android/src/main/cpp/libyuv/util/ssim.cc +0 -364
  194. package/android/src/main/cpp/libyuv/util/ssim.h +0 -38
  195. package/android/src/main/cpp/libyuv/util/yuvconstants.c +0 -114
  196. package/android/src/main/cpp/libyuv/util/yuvconvert.cc +0 -367
  197. package/android/src/main/cpp/libyuv/winarm.mk +0 -47
  198. package/android/src/main/java/com/faceantispoof/ByteBufferPool.kt +0 -68
  199. package/android/src/main/java/com/faceantispoof/FastYuv.kt +0 -51
  200. package/android/src/main/java/com/faceantispoof/YuvToFloatArrayConverter.kt +0 -584
  201. package/android/src/main/java/com/faceantispoof/YuvToRgbConverter.kt +0 -73
@@ -1,362 +0,0 @@
1
- /*
2
- * Copyright 2012 The LibYuv Project Authors. All rights reserved.
3
- *
4
- * Use of this source code is governed by a BSD-style license
5
- * that can be found in the LICENSE file in the root of the source
6
- * tree. An additional intellectual property rights grant can be found
7
- * in the file PATENTS. All contributing project authors may
8
- * be found in the AUTHORS file in the root of the source tree.
9
- */
10
-
11
- #include "libyuv/basic_types.h"
12
-
13
- #include "libyuv/compare_row.h"
14
- #include "libyuv/row.h"
15
-
16
- #ifdef __cplusplus
17
- namespace libyuv {
18
- extern "C" {
19
- #endif
20
-
21
- // This module is for GCC x86 and x64.
22
- #if !defined(LIBYUV_DISABLE_X86) && \
23
- (defined(__x86_64__) || defined(__i386__)) && \
24
- !defined(LIBYUV_ENABLE_ROWWIN)
25
-
26
- // "memory" clobber prevents the reads from being removed
27
-
28
- #if defined(__x86_64__)
29
- uint32_t HammingDistance_SSE42(const uint8_t* src_a,
30
- const uint8_t* src_b,
31
- int count) {
32
- uint64_t diff;
33
-
34
- asm volatile(
35
- "xor %3,%3 \n"
36
- "xor %%r8,%%r8 \n"
37
- "xor %%r9,%%r9 \n"
38
- "xor %%r10,%%r10 \n"
39
-
40
- // Process 32 bytes per loop.
41
- LABELALIGN
42
- "1: \n"
43
- "mov (%0),%%rcx \n"
44
- "mov 0x8(%0),%%rdx \n"
45
- "xor (%1),%%rcx \n"
46
- "xor 0x8(%1),%%rdx \n"
47
- "popcnt %%rcx,%%rcx \n"
48
- "popcnt %%rdx,%%rdx \n"
49
- "mov 0x10(%0),%%rsi \n"
50
- "mov 0x18(%0),%%rdi \n"
51
- "xor 0x10(%1),%%rsi \n"
52
- "xor 0x18(%1),%%rdi \n"
53
- "popcnt %%rsi,%%rsi \n"
54
- "popcnt %%rdi,%%rdi \n"
55
- "add $0x20,%0 \n"
56
- "add $0x20,%1 \n"
57
- "add %%rcx,%3 \n"
58
- "add %%rdx,%%r8 \n"
59
- "add %%rsi,%%r9 \n"
60
- "add %%rdi,%%r10 \n"
61
- "sub $0x20,%2 \n"
62
- "jg 1b \n"
63
-
64
- "add %%r8, %3 \n"
65
- "add %%r9, %3 \n"
66
- "add %%r10, %3 \n"
67
- : "+r"(src_a), // %0
68
- "+r"(src_b), // %1
69
- "+r"(count), // %2
70
- "=&r"(diff) // %3
71
- :
72
- : "cc", "memory", "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10");
73
-
74
- return (uint32_t)(diff);
75
- }
76
- #else
77
- uint32_t HammingDistance_SSE42(const uint8_t* src_a,
78
- const uint8_t* src_b,
79
- int count) {
80
- uint32_t diff = 0u;
81
-
82
- asm volatile(
83
- // Process 16 bytes per loop.
84
- LABELALIGN
85
- "1: \n"
86
- "mov (%0),%%ecx \n"
87
- "mov 0x4(%0),%%edx \n"
88
- "xor (%1),%%ecx \n"
89
- "xor 0x4(%1),%%edx \n"
90
- "popcnt %%ecx,%%ecx \n"
91
- "add %%ecx,%3 \n"
92
- "popcnt %%edx,%%edx \n"
93
- "add %%edx,%3 \n"
94
- "mov 0x8(%0),%%ecx \n"
95
- "mov 0xc(%0),%%edx \n"
96
- "xor 0x8(%1),%%ecx \n"
97
- "xor 0xc(%1),%%edx \n"
98
- "popcnt %%ecx,%%ecx \n"
99
- "add %%ecx,%3 \n"
100
- "popcnt %%edx,%%edx \n"
101
- "add %%edx,%3 \n"
102
- "add $0x10,%0 \n"
103
- "add $0x10,%1 \n"
104
- "sub $0x10,%2 \n"
105
- "jg 1b \n"
106
- : "+r"(src_a), // %0
107
- "+r"(src_b), // %1
108
- "+r"(count), // %2
109
- "+r"(diff) // %3
110
- :
111
- : "cc", "memory", "ecx", "edx");
112
-
113
- return diff;
114
- }
115
- #endif
116
-
117
- static const vec8 kNibbleMask = {15, 15, 15, 15, 15, 15, 15, 15,
118
- 15, 15, 15, 15, 15, 15, 15, 15};
119
- static const vec8 kBitCount = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
120
-
121
- uint32_t HammingDistance_SSSE3(const uint8_t* src_a,
122
- const uint8_t* src_b,
123
- int count) {
124
- uint32_t diff;
125
-
126
- asm volatile(
127
- "movdqa %4,%%xmm2 \n"
128
- "movdqa %5,%%xmm3 \n"
129
- "pxor %%xmm0,%%xmm0 \n"
130
- "pxor %%xmm1,%%xmm1 \n"
131
- "sub %0,%1 \n"
132
-
133
- LABELALIGN
134
- "1: \n"
135
- "movdqa (%0),%%xmm4 \n"
136
- "movdqa 0x10(%0), %%xmm5 \n"
137
- "pxor (%0,%1), %%xmm4 \n"
138
- "movdqa %%xmm4,%%xmm6 \n"
139
- "pand %%xmm2,%%xmm6 \n"
140
- "psrlw $0x4,%%xmm4 \n"
141
- "movdqa %%xmm3,%%xmm7 \n"
142
- "pshufb %%xmm6,%%xmm7 \n"
143
- "pand %%xmm2,%%xmm4 \n"
144
- "movdqa %%xmm3,%%xmm6 \n"
145
- "pshufb %%xmm4,%%xmm6 \n"
146
- "paddb %%xmm7,%%xmm6 \n"
147
- "pxor 0x10(%0,%1),%%xmm5 \n"
148
- "add $0x20,%0 \n"
149
- "movdqa %%xmm5,%%xmm4 \n"
150
- "pand %%xmm2,%%xmm5 \n"
151
- "psrlw $0x4,%%xmm4 \n"
152
- "movdqa %%xmm3,%%xmm7 \n"
153
- "pshufb %%xmm5,%%xmm7 \n"
154
- "pand %%xmm2,%%xmm4 \n"
155
- "movdqa %%xmm3,%%xmm5 \n"
156
- "pshufb %%xmm4,%%xmm5 \n"
157
- "paddb %%xmm7,%%xmm5 \n"
158
- "paddb %%xmm5,%%xmm6 \n"
159
- "psadbw %%xmm1,%%xmm6 \n"
160
- "paddd %%xmm6,%%xmm0 \n"
161
- "sub $0x20,%2 \n"
162
- "jg 1b \n"
163
-
164
- "pshufd $0xaa,%%xmm0,%%xmm1 \n"
165
- "paddd %%xmm1,%%xmm0 \n"
166
- "movd %%xmm0, %3 \n"
167
- : "+r"(src_a), // %0
168
- "+r"(src_b), // %1
169
- "+r"(count), // %2
170
- "=r"(diff) // %3
171
- : "m"(kNibbleMask), // %4
172
- "m"(kBitCount) // %5
173
- : "cc", "memory", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
174
- "xmm7");
175
-
176
- return diff;
177
- }
178
-
179
- #ifdef HAS_HAMMINGDISTANCE_AVX2
180
- uint32_t HammingDistance_AVX2(const uint8_t* src_a,
181
- const uint8_t* src_b,
182
- int count) {
183
- uint32_t diff;
184
-
185
- asm volatile(
186
- "vbroadcastf128 %4,%%ymm2 \n"
187
- "vbroadcastf128 %5,%%ymm3 \n"
188
- "vpxor %%ymm0,%%ymm0,%%ymm0 \n"
189
- "vpxor %%ymm1,%%ymm1,%%ymm1 \n"
190
- "sub %0,%1 \n"
191
-
192
- LABELALIGN
193
- "1: \n"
194
- "vmovdqa (%0),%%ymm4 \n"
195
- "vmovdqa 0x20(%0), %%ymm5 \n"
196
- "vpxor (%0,%1), %%ymm4, %%ymm4 \n"
197
- "vpand %%ymm2,%%ymm4,%%ymm6 \n"
198
- "vpsrlw $0x4,%%ymm4,%%ymm4 \n"
199
- "vpshufb %%ymm6,%%ymm3,%%ymm6 \n"
200
- "vpand %%ymm2,%%ymm4,%%ymm4 \n"
201
- "vpshufb %%ymm4,%%ymm3,%%ymm4 \n"
202
- "vpaddb %%ymm4,%%ymm6,%%ymm6 \n"
203
- "vpxor 0x20(%0,%1),%%ymm5,%%ymm4 \n"
204
- "add $0x40,%0 \n"
205
- "vpand %%ymm2,%%ymm4,%%ymm5 \n"
206
- "vpsrlw $0x4,%%ymm4,%%ymm4 \n"
207
- "vpshufb %%ymm5,%%ymm3,%%ymm5 \n"
208
- "vpand %%ymm2,%%ymm4,%%ymm4 \n"
209
- "vpshufb %%ymm4,%%ymm3,%%ymm4 \n"
210
- "vpaddb %%ymm5,%%ymm4,%%ymm4 \n"
211
- "vpaddb %%ymm6,%%ymm4,%%ymm4 \n"
212
- "vpsadbw %%ymm1,%%ymm4,%%ymm4 \n"
213
- "vpaddd %%ymm0,%%ymm4,%%ymm0 \n"
214
- "sub $0x40,%2 \n"
215
- "jg 1b \n"
216
-
217
- "vpermq $0xb1,%%ymm0,%%ymm1 \n"
218
- "vpaddd %%ymm1,%%ymm0,%%ymm0 \n"
219
- "vpermq $0xaa,%%ymm0,%%ymm1 \n"
220
- "vpaddd %%ymm1,%%ymm0,%%ymm0 \n"
221
- "vmovd %%xmm0,%3 \n"
222
- "vzeroupper \n"
223
- : "+r"(src_a), // %0
224
- "+r"(src_b), // %1
225
- "+r"(count), // %2
226
- "=r"(diff) // %3
227
- : "m"(kNibbleMask), // %4
228
- "m"(kBitCount) // %5
229
- : "cc", "memory", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6");
230
-
231
- return diff;
232
- }
233
- #endif // HAS_HAMMINGDISTANCE_AVX2
234
-
235
- uint32_t SumSquareError_SSE2(const uint8_t* src_a,
236
- const uint8_t* src_b,
237
- int count) {
238
- uint32_t sse;
239
- asm volatile(
240
- "pxor %%xmm0,%%xmm0 \n"
241
- "pxor %%xmm5,%%xmm5 \n"
242
-
243
- LABELALIGN
244
- "1: \n"
245
- "movdqu (%0),%%xmm1 \n"
246
- "lea 0x10(%0),%0 \n"
247
- "movdqu (%1),%%xmm2 \n"
248
- "lea 0x10(%1),%1 \n"
249
- "movdqa %%xmm1,%%xmm3 \n"
250
- "psubusb %%xmm2,%%xmm1 \n"
251
- "psubusb %%xmm3,%%xmm2 \n"
252
- "por %%xmm2,%%xmm1 \n"
253
- "movdqa %%xmm1,%%xmm2 \n"
254
- "punpcklbw %%xmm5,%%xmm1 \n"
255
- "punpckhbw %%xmm5,%%xmm2 \n"
256
- "pmaddwd %%xmm1,%%xmm1 \n"
257
- "pmaddwd %%xmm2,%%xmm2 \n"
258
- "paddd %%xmm1,%%xmm0 \n"
259
- "paddd %%xmm2,%%xmm0 \n"
260
- "sub $0x10,%2 \n"
261
- "jg 1b \n"
262
-
263
- "pshufd $0xee,%%xmm0,%%xmm1 \n"
264
- "paddd %%xmm1,%%xmm0 \n"
265
- "pshufd $0x1,%%xmm0,%%xmm1 \n"
266
- "paddd %%xmm1,%%xmm0 \n"
267
- "movd %%xmm0,%3 \n"
268
- : "+r"(src_a), // %0
269
- "+r"(src_b), // %1
270
- "+r"(count), // %2
271
- "=r"(sse) // %3
272
- :
273
- : "cc", "memory", "xmm0", "xmm1", "xmm2", "xmm3", "xmm5");
274
- return sse;
275
- }
276
-
277
- static const uvec32 kHash16x33 = {0x92d9e201, 0, 0, 0}; // 33 ^ 16
278
- static const uvec32 kHashMul0 = {
279
- 0x0c3525e1, // 33 ^ 15
280
- 0xa3476dc1, // 33 ^ 14
281
- 0x3b4039a1, // 33 ^ 13
282
- 0x4f5f0981, // 33 ^ 12
283
- };
284
- static const uvec32 kHashMul1 = {
285
- 0x30f35d61, // 33 ^ 11
286
- 0x855cb541, // 33 ^ 10
287
- 0x040a9121, // 33 ^ 9
288
- 0x747c7101, // 33 ^ 8
289
- };
290
- static const uvec32 kHashMul2 = {
291
- 0xec41d4e1, // 33 ^ 7
292
- 0x4cfa3cc1, // 33 ^ 6
293
- 0x025528a1, // 33 ^ 5
294
- 0x00121881, // 33 ^ 4
295
- };
296
- static const uvec32 kHashMul3 = {
297
- 0x00008c61, // 33 ^ 3
298
- 0x00000441, // 33 ^ 2
299
- 0x00000021, // 33 ^ 1
300
- 0x00000001, // 33 ^ 0
301
- };
302
-
303
- uint32_t HashDjb2_SSE41(const uint8_t* src, int count, uint32_t seed) {
304
- uint32_t hash;
305
- asm volatile(
306
- "movd %2,%%xmm0 \n"
307
- "pxor %%xmm7,%%xmm7 \n"
308
- "movdqa %4,%%xmm6 \n"
309
-
310
- LABELALIGN
311
- "1: \n"
312
- "movdqu (%0),%%xmm1 \n"
313
- "lea 0x10(%0),%0 \n"
314
- "pmulld %%xmm6,%%xmm0 \n"
315
- "movdqa %5,%%xmm5 \n"
316
- "movdqa %%xmm1,%%xmm2 \n"
317
- "punpcklbw %%xmm7,%%xmm2 \n"
318
- "movdqa %%xmm2,%%xmm3 \n"
319
- "punpcklwd %%xmm7,%%xmm3 \n"
320
- "pmulld %%xmm5,%%xmm3 \n"
321
- "movdqa %6,%%xmm5 \n"
322
- "movdqa %%xmm2,%%xmm4 \n"
323
- "punpckhwd %%xmm7,%%xmm4 \n"
324
- "pmulld %%xmm5,%%xmm4 \n"
325
- "movdqa %7,%%xmm5 \n"
326
- "punpckhbw %%xmm7,%%xmm1 \n"
327
- "movdqa %%xmm1,%%xmm2 \n"
328
- "punpcklwd %%xmm7,%%xmm2 \n"
329
- "pmulld %%xmm5,%%xmm2 \n"
330
- "movdqa %8,%%xmm5 \n"
331
- "punpckhwd %%xmm7,%%xmm1 \n"
332
- "pmulld %%xmm5,%%xmm1 \n"
333
- "paddd %%xmm4,%%xmm3 \n"
334
- "paddd %%xmm2,%%xmm1 \n"
335
- "paddd %%xmm3,%%xmm1 \n"
336
- "pshufd $0xe,%%xmm1,%%xmm2 \n"
337
- "paddd %%xmm2,%%xmm1 \n"
338
- "pshufd $0x1,%%xmm1,%%xmm2 \n"
339
- "paddd %%xmm2,%%xmm1 \n"
340
- "paddd %%xmm1,%%xmm0 \n"
341
- "sub $0x10,%1 \n"
342
- "jg 1b \n"
343
- "movd %%xmm0,%3 \n"
344
- : "+r"(src), // %0
345
- "+r"(count), // %1
346
- "+rm"(seed), // %2
347
- "=r"(hash) // %3
348
- : "m"(kHash16x33), // %4
349
- "m"(kHashMul0), // %5
350
- "m"(kHashMul1), // %6
351
- "m"(kHashMul2), // %7
352
- "m"(kHashMul3) // %8
353
- : "cc", "memory", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
354
- "xmm7");
355
- return hash;
356
- }
357
- #endif // defined(__x86_64__) || (defined(__i386__) && !defined(__pic__)))
358
-
359
- #ifdef __cplusplus
360
- } // extern "C"
361
- } // namespace libyuv
362
- #endif
@@ -1,96 +0,0 @@
1
- /*
2
- * Copyright 2012 The LibYuv Project Authors. All rights reserved.
3
- *
4
- * Use of this source code is governed by a BSD-style license
5
- * that can be found in the LICENSE file in the root of the source
6
- * tree. An additional intellectual property rights grant can be found
7
- * in the file PATENTS. All contributing project authors may
8
- * be found in the AUTHORS file in the root of the source tree.
9
- */
10
-
11
- #include "libyuv/basic_types.h"
12
-
13
- #include "libyuv/compare_row.h"
14
- #include "libyuv/row.h"
15
-
16
- #ifdef __cplusplus
17
- namespace libyuv {
18
- extern "C" {
19
- #endif
20
-
21
- #if !defined(LIBYUV_DISABLE_NEON) && defined(__ARM_NEON__) && \
22
- !defined(__aarch64__)
23
-
24
- // 256 bits at a time
25
- // uses short accumulator which restricts count to 131 KB
26
- uint32_t HammingDistance_NEON(const uint8_t* src_a,
27
- const uint8_t* src_b,
28
- int count) {
29
- uint32_t diff;
30
-
31
- asm volatile(
32
- "vmov.u16 q4, #0 \n" // accumulator
33
-
34
- "1: \n"
35
- "vld1.8 {q0, q1}, [%0]! \n"
36
- "vld1.8 {q2, q3}, [%1]! \n"
37
- "veor.32 q0, q0, q2 \n"
38
- "veor.32 q1, q1, q3 \n"
39
- "vcnt.i8 q0, q0 \n"
40
- "vcnt.i8 q1, q1 \n"
41
- "subs %2, %2, #32 \n"
42
- "vadd.u8 q0, q0, q1 \n" // 16 byte counts
43
- "vpadal.u8 q4, q0 \n" // 8 shorts
44
- "bgt 1b \n"
45
-
46
- "vpaddl.u16 q0, q4 \n" // 4 ints
47
- "vpadd.u32 d0, d0, d1 \n"
48
- "vpadd.u32 d0, d0, d0 \n"
49
- "vmov.32 %3, d0[0] \n"
50
-
51
- : "+r"(src_a), "+r"(src_b), "+r"(count), "=r"(diff)
52
- :
53
- : "cc", "q0", "q1", "q2", "q3", "q4");
54
- return diff;
55
- }
56
-
57
- uint32_t SumSquareError_NEON(const uint8_t* src_a,
58
- const uint8_t* src_b,
59
- int count) {
60
- uint32_t sse;
61
- asm volatile(
62
- "vmov.u8 q8, #0 \n"
63
- "vmov.u8 q10, #0 \n"
64
- "vmov.u8 q9, #0 \n"
65
- "vmov.u8 q11, #0 \n"
66
-
67
- "1: \n"
68
- "vld1.8 {q0}, [%0]! \n"
69
- "vld1.8 {q1}, [%1]! \n"
70
- "subs %2, %2, #16 \n"
71
- "vsubl.u8 q2, d0, d2 \n"
72
- "vsubl.u8 q3, d1, d3 \n"
73
- "vmlal.s16 q8, d4, d4 \n"
74
- "vmlal.s16 q9, d6, d6 \n"
75
- "vmlal.s16 q10, d5, d5 \n"
76
- "vmlal.s16 q11, d7, d7 \n"
77
- "bgt 1b \n"
78
-
79
- "vadd.u32 q8, q8, q9 \n"
80
- "vadd.u32 q10, q10, q11 \n"
81
- "vadd.u32 q11, q8, q10 \n"
82
- "vpaddl.u32 q1, q11 \n"
83
- "vadd.u64 d0, d2, d3 \n"
84
- "vmov.32 %3, d0[0] \n"
85
- : "+r"(src_a), "+r"(src_b), "+r"(count), "=r"(sse)
86
- :
87
- : "memory", "cc", "q0", "q1", "q2", "q3", "q8", "q9", "q10", "q11");
88
- return sse;
89
- }
90
-
91
- #endif // defined(__ARM_NEON__) && !defined(__aarch64__)
92
-
93
- #ifdef __cplusplus
94
- } // extern "C"
95
- } // namespace libyuv
96
- #endif
@@ -1,223 +0,0 @@
1
- /*
2
- * Copyright 2012 The LibYuv Project Authors. All rights reserved.
3
- *
4
- * Use of this source code is governed by a BSD-style license
5
- * that can be found in the LICENSE file in the root of the source
6
- * tree. An additional intellectual property rights grant can be found
7
- * in the file PATENTS. All contributing project authors may
8
- * be found in the AUTHORS file in the root of the source tree.
9
- */
10
-
11
- #include "libyuv/basic_types.h"
12
-
13
- #include "libyuv/compare_row.h"
14
- #include "libyuv/row.h"
15
-
16
- #ifdef __cplusplus
17
- namespace libyuv {
18
- extern "C" {
19
- #endif
20
-
21
- #if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__)
22
-
23
- // 256 bits at a time
24
- // uses short accumulator which restricts count to 131 KB
25
- uint32_t HammingDistance_NEON(const uint8_t* src_a,
26
- const uint8_t* src_b,
27
- int count) {
28
- uint32_t diff;
29
- asm volatile(
30
- "movi v4.8h, #0 \n"
31
-
32
- "1: \n"
33
- "ld1 {v0.16b, v1.16b}, [%0], #32 \n"
34
- "ld1 {v2.16b, v3.16b}, [%1], #32 \n"
35
- "eor v0.16b, v0.16b, v2.16b \n"
36
- "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
37
- "eor v1.16b, v1.16b, v3.16b \n"
38
- "cnt v0.16b, v0.16b \n"
39
- "prfm pldl1keep, [%1, 448] \n"
40
- "cnt v1.16b, v1.16b \n"
41
- "subs %w2, %w2, #32 \n"
42
- "add v0.16b, v0.16b, v1.16b \n"
43
- "uadalp v4.8h, v0.16b \n"
44
- "b.gt 1b \n"
45
-
46
- "uaddlv s4, v4.8h \n"
47
- "fmov %w3, s4 \n"
48
- : "+r"(src_a), "+r"(src_b), "+r"(count), "=r"(diff)
49
- :
50
- : "memory", "cc", "v0", "v1", "v2", "v3", "v4");
51
- return diff;
52
- }
53
-
54
- uint32_t SumSquareError_NEON(const uint8_t* src_a,
55
- const uint8_t* src_b,
56
- int count) {
57
- uint32_t sse;
58
- asm volatile(
59
- "movi v16.16b, #0 \n"
60
- "movi v17.16b, #0 \n"
61
- "movi v18.16b, #0 \n"
62
- "movi v19.16b, #0 \n"
63
-
64
- "1: \n"
65
- "ld1 {v0.16b}, [%0], #16 \n"
66
- "ld1 {v1.16b}, [%1], #16 \n"
67
- "subs %w2, %w2, #16 \n"
68
- "usubl v2.8h, v0.8b, v1.8b \n"
69
- "usubl2 v3.8h, v0.16b, v1.16b \n"
70
- "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
71
- "smlal v16.4s, v2.4h, v2.4h \n"
72
- "smlal v17.4s, v3.4h, v3.4h \n"
73
- "prfm pldl1keep, [%1, 448] \n"
74
- "smlal2 v18.4s, v2.8h, v2.8h \n"
75
- "smlal2 v19.4s, v3.8h, v3.8h \n"
76
- "b.gt 1b \n"
77
-
78
- "add v16.4s, v16.4s, v17.4s \n"
79
- "add v18.4s, v18.4s, v19.4s \n"
80
- "add v19.4s, v16.4s, v18.4s \n"
81
- "addv s0, v19.4s \n"
82
- "fmov %w3, s0 \n"
83
- : "+r"(src_a), "+r"(src_b), "+r"(count), "=r"(sse)
84
- :
85
- : "memory", "cc", "v0", "v1", "v2", "v3", "v16", "v17", "v18", "v19");
86
- return sse;
87
- }
88
-
89
- static const uvec32 kDjb2Multiplicands[] = {
90
- {0x0c3525e1, // 33^15
91
- 0xa3476dc1, // 33^14
92
- 0x3b4039a1, // 33^13
93
- 0x4f5f0981}, // 33^12
94
- {0x30f35d61, // 33^11
95
- 0x855cb541, // 33^10
96
- 0x040a9121, // 33^9
97
- 0x747c7101}, // 33^8
98
- {0xec41d4e1, // 33^7
99
- 0x4cfa3cc1, // 33^6
100
- 0x025528a1, // 33^5
101
- 0x00121881}, // 33^4
102
- {0x00008c61, // 33^3
103
- 0x00000441, // 33^2
104
- 0x00000021, // 33^1
105
- 0x00000001}, // 33^0
106
- };
107
-
108
- static const uvec32 kDjb2WidenIndices[] = {
109
- {0xffffff00U, 0xffffff01U, 0xffffff02U, 0xffffff03U},
110
- {0xffffff04U, 0xffffff05U, 0xffffff06U, 0xffffff07U},
111
- {0xffffff08U, 0xffffff09U, 0xffffff0aU, 0xffffff0bU},
112
- {0xffffff0cU, 0xffffff0dU, 0xffffff0eU, 0xffffff0fU},
113
- };
114
-
115
- uint32_t HashDjb2_NEON(const uint8_t* src, int count, uint32_t seed) {
116
- uint32_t hash = seed;
117
- const uint32_t c16 = 0x92d9e201; // 33^16
118
- uint32_t tmp, tmp2;
119
- asm("ld1 {v16.4s, v17.4s, v18.4s, v19.4s}, [%[kIdx]] \n"
120
- "ld1 {v4.4s, v5.4s, v6.4s, v7.4s}, [%[kMuls]] \n"
121
-
122
- // count is always a multiple of 16.
123
- // maintain two accumulators, reduce and then final sum in scalar since
124
- // this has better performance on little cores.
125
- "1: \n"
126
- "ldr q0, [%[src]], #16 \n"
127
- "subs %w[count], %w[count], #16 \n"
128
- "tbl v3.16b, {v0.16b}, v19.16b \n"
129
- "tbl v2.16b, {v0.16b}, v18.16b \n"
130
- "tbl v1.16b, {v0.16b}, v17.16b \n"
131
- "tbl v0.16b, {v0.16b}, v16.16b \n"
132
- "mul v3.4s, v3.4s, v7.4s \n"
133
- "mul v2.4s, v2.4s, v6.4s \n"
134
- "mla v3.4s, v1.4s, v5.4s \n"
135
- "mla v2.4s, v0.4s, v4.4s \n"
136
- "addv s1, v3.4s \n"
137
- "addv s0, v2.4s \n"
138
- "fmov %w[tmp2], s1 \n"
139
- "fmov %w[tmp], s0 \n"
140
- "add %w[tmp], %w[tmp], %w[tmp2] \n"
141
- "madd %w[hash], %w[hash], %w[c16], %w[tmp] \n"
142
- "b.gt 1b \n"
143
- : [hash] "+r"(hash), // %[hash]
144
- [count] "+r"(count), // %[count]
145
- [tmp] "=&r"(tmp), // %[tmp]
146
- [tmp2] "=&r"(tmp2) // %[tmp2]
147
- : [src] "r"(src), // %[src]
148
- [kMuls] "r"(kDjb2Multiplicands), // %[kMuls]
149
- [kIdx] "r"(kDjb2WidenIndices), // %[kIdx]
150
- [c16] "r"(c16) // %[c16]
151
- : "cc", "memory", "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v16",
152
- "v17", "v18", "v19");
153
- return hash;
154
- }
155
-
156
- uint32_t HammingDistance_NEON_DotProd(const uint8_t* src_a,
157
- const uint8_t* src_b,
158
- int count) {
159
- uint32_t diff;
160
- asm volatile(
161
- "movi v4.4s, #0 \n"
162
- "movi v5.4s, #0 \n"
163
- "movi v6.16b, #1 \n"
164
-
165
- "1: \n"
166
- "ldp q0, q1, [%0], #32 \n"
167
- "ldp q2, q3, [%1], #32 \n"
168
- "eor v0.16b, v0.16b, v2.16b \n"
169
- "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
170
- "eor v1.16b, v1.16b, v3.16b \n"
171
- "cnt v0.16b, v0.16b \n"
172
- "prfm pldl1keep, [%1, 448] \n"
173
- "cnt v1.16b, v1.16b \n"
174
- "subs %w2, %w2, #32 \n"
175
- "udot v4.4s, v0.16b, v6.16b \n"
176
- "udot v5.4s, v1.16b, v6.16b \n"
177
- "b.gt 1b \n"
178
-
179
- "add v0.4s, v4.4s, v5.4s \n"
180
- "addv s0, v0.4s \n"
181
- "fmov %w3, s0 \n"
182
- : "+r"(src_a), "+r"(src_b), "+r"(count), "=r"(diff)
183
- :
184
- : "memory", "cc", "v0", "v1", "v2", "v3", "v4", "v5", "v6");
185
- return diff;
186
- }
187
-
188
- uint32_t SumSquareError_NEON_DotProd(const uint8_t* src_a,
189
- const uint8_t* src_b,
190
- int count) {
191
- // count is guaranteed to be a multiple of 32.
192
- uint32_t sse;
193
- asm volatile(
194
- "movi v4.4s, #0 \n"
195
- "movi v5.4s, #0 \n"
196
-
197
- "1: \n"
198
- "ldp q0, q2, [%0], #32 \n"
199
- "ldp q1, q3, [%1], #32 \n"
200
- "subs %w2, %w2, #32 \n"
201
- "uabd v0.16b, v0.16b, v1.16b \n"
202
- "uabd v1.16b, v2.16b, v3.16b \n"
203
- "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
204
- "udot v4.4s, v0.16b, v0.16b \n"
205
- "udot v5.4s, v1.16b, v1.16b \n"
206
- "prfm pldl1keep, [%1, 448] \n"
207
- "b.gt 1b \n"
208
-
209
- "add v0.4s, v4.4s, v5.4s \n"
210
- "addv s0, v0.4s \n"
211
- "fmov %w3, s0 \n"
212
- : "+r"(src_a), "+r"(src_b), "+r"(count), "=r"(sse)
213
- :
214
- : "memory", "cc", "v0", "v1", "v2", "v3", "v4", "v5");
215
- return sse;
216
- }
217
-
218
- #endif // !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__)
219
-
220
- #ifdef __cplusplus
221
- } // extern "C"
222
- } // namespace libyuv
223
- #endif