react-native-vision-camera-spoof-detector 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (857) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +220 -0
  3. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  4. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  5. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  6. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/cache-v2-701700ba4bb2215c1ccd.json +1599 -0
  7. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-9189be15e8b04df8f258.json +857 -0
  8. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-073369af1c5eb367d160.json +185 -0
  9. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  10. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/directory-libyuv-Debug-68bb497e958fc902f93a.json +100 -0
  11. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/index-2025-11-18T09-41-06-0926.json +92 -0
  12. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-cpuid-Debug-5af24d55c9649a4c3a3f.json +136 -0
  13. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-faceantispoof-Debug-aa45fddb87a8ac2074bb.json +181 -0
  14. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-fastyuv-Debug-4dd5b049ce28a8e070d1.json +182 -0
  15. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv-Debug-b8d5ee3e10a1f31a29fe.json +433 -0
  16. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_common_objects-Debug-ae517204d04beeb2df23.json +522 -0
  17. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_neon64-Debug-2ab157e6b75bcb340b03.json +137 -0
  18. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_shared-Debug-2aecda61b70017f775b5.json +455 -0
  19. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_sme-Debug-73d1e6cc8ef043b4e243.json +126 -0
  20. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuv_sve-Debug-9d95a17080a7480f85a6.json +104 -0
  21. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuvconstants-Debug-31b06c1ed2b225cf2443.json +136 -0
  22. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.cmake/api/v1/reply/target-yuvconvert-Debug-2231dac0a591237abb04.json +157 -0
  23. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.ninja_deps +0 -0
  24. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/.ninja_log +63 -0
  25. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeCache.txt +465 -0
  26. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  27. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  28. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  29. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  30. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  31. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  32. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  33. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  34. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  35. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/CMakeOutput.log +276 -0
  36. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/TargetDirectories.txt +27 -0
  37. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/cmake.check_cache +1 -0
  38. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/faceantispoof.dir/48ddb531beec5c42d2f7a5f3aa0b5968/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  39. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  40. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  41. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  42. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CMakeFiles/rules.ninja +198 -0
  43. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CPackConfig.cmake +71 -0
  44. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/CPackSourceConfig.cmake +79 -0
  45. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/additional_project_files.txt +48 -0
  46. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/android_gradle_build.json +106 -0
  47. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/android_gradle_build_mini.json +87 -0
  48. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/build.ninja +1071 -0
  49. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/build_file_index.txt +3 -0
  50. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/cmake_install.cmake +59 -0
  51. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/compile_commands.json +277 -0
  52. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/compile_commands.json.bin +0 -0
  53. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/configure_fingerprint.bin +29 -0
  54. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  55. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  56. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  57. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  58. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  59. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  60. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  61. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  62. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  63. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  64. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  65. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  66. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  67. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  68. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  69. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  70. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  71. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  72. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  73. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  74. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  75. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  76. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  77. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  78. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  79. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  80. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  81. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  82. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  83. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  84. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  85. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  86. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  87. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  88. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  89. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  90. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  91. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  92. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  93. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  94. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  95. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/compare_neon64.cc.o +0 -0
  96. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/rotate_neon64.cc.o +0 -0
  97. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/row_neon64.cc.o +0 -0
  98. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_neon64.dir/source/scale_neon64.cc.o +0 -0
  99. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sme.dir/source/rotate_sme.cc.o +0 -0
  100. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sme.dir/source/row_sme.cc.o +0 -0
  101. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sme.dir/source/scale_sme.cc.o +0 -0
  102. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuv_sve.dir/source/row_sve.cc.o +0 -0
  103. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  104. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  105. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/cmake_install.cmake +87 -0
  106. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/libyuv/libyuv.a +0 -0
  107. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/metadata_generation_command.txt +19 -0
  108. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/prefab_config.json +4 -0
  109. package/android/.cxx/Debug/2a3w6u3n/arm64-v8a/symbol_folder_index.txt +1 -0
  110. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  111. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  112. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  113. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/cache-v2-3c91c5cee78e3e904960.json +1587 -0
  114. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-7cc7148edcc0267ae184.json +857 -0
  115. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-3db6484795577cf354b3.json +167 -0
  116. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  117. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/directory-libyuv-Debug-063ed54195fe25617bc7.json +100 -0
  118. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/index-2025-11-18T09-41-44-0186.json +92 -0
  119. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-cpuid-Debug-a3f2884614434f8f188a.json +150 -0
  120. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-faceantispoof-Debug-c905db8d2a36c2f49235.json +181 -0
  121. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-fastyuv-Debug-e08fb9fb89a090bfee1a.json +190 -0
  122. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv-Debug-4b1ffa979fbf6ac68418.json +406 -0
  123. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv_common_objects-Debug-245e248f528e11e2d34d.json +536 -0
  124. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv_neon-Debug-2ea21009709c7febf67d.json +151 -0
  125. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuv_shared-Debug-e387ee44aace33b18140.json +428 -0
  126. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuvconstants-Debug-14fbb0c58620d35bb155.json +150 -0
  127. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.cmake/api/v1/reply/target-yuvconvert-Debug-c40ecea0358b0e737802.json +171 -0
  128. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.ninja_deps +0 -0
  129. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/.ninja_log +59 -0
  130. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeCache.txt +463 -0
  131. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  132. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  133. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  134. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  135. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  136. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  137. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  138. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  139. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  140. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/CMakeOutput.log +268 -0
  141. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/TargetDirectories.txt +25 -0
  142. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/cmake.check_cache +1 -0
  143. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/faceantispoof.dir/48ddb531beec5c42d2f7a5f3aa0b5968/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  144. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  145. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  146. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  147. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CMakeFiles/rules.ninja +178 -0
  148. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CPackConfig.cmake +71 -0
  149. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/CPackSourceConfig.cmake +79 -0
  150. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/additional_project_files.txt +44 -0
  151. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/android_gradle_build.json +96 -0
  152. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/android_gradle_build_mini.json +77 -0
  153. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/build.ninja +1046 -0
  154. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/build_file_index.txt +3 -0
  155. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/cmake_install.cmake +59 -0
  156. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/compile_commands.json +257 -0
  157. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/compile_commands.json.bin +0 -0
  158. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/configure_fingerprint.bin +29 -0
  159. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  160. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  161. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  162. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  163. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  164. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  165. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  166. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  167. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  168. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  169. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  170. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  171. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  172. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  173. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  174. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  175. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  176. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  177. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  178. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  179. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  180. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  181. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  182. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  183. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  184. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  185. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  186. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  187. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  188. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  189. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  190. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  191. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  192. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  193. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  194. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  195. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  196. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  197. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  198. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  199. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  200. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/compare_neon.cc.o +0 -0
  201. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/rotate_neon.cc.o +0 -0
  202. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/row_neon.cc.o +0 -0
  203. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuv_neon.dir/source/scale_neon.cc.o +0 -0
  204. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  205. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  206. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/cmake_install.cmake +87 -0
  207. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/libyuv/libyuv.a +0 -0
  208. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/metadata_generation_command.txt +19 -0
  209. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/prefab_config.json +4 -0
  210. package/android/.cxx/Debug/2a3w6u3n/armeabi-v7a/symbol_folder_index.txt +1 -0
  211. package/android/.cxx/Debug/2a3w6u3n/hash_key.txt +26 -0
  212. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  213. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  214. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  215. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/cache-v2-2fe46b6519c8341b1982.json +1587 -0
  216. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/cmakeFiles-v1-a03e763d0c6effec9f6f.json +857 -0
  217. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/codemodel-v2-2412bbfc0c74a0dc613a.json +158 -0
  218. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  219. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/directory-libyuv-Debug-7cf182a5e476bc9b5f34.json +100 -0
  220. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/index-2025-11-18T09-41-52-0585.json +92 -0
  221. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-cpuid-Debug-931d089bced0b77c5070.json +136 -0
  222. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-faceantispoof-Debug-7b58f88faeacc46f961d.json +181 -0
  223. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-fastyuv-Debug-9283b76b8a94ba273122.json +157 -0
  224. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuv-Debug-c270d4a92a15ef45f650.json +368 -0
  225. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuv_common_objects-Debug-ae517204d04beeb2df23.json +522 -0
  226. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuv_shared-Debug-42c6196dd1672984dcd7.json +390 -0
  227. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuvconstants-Debug-7e8432d4753ee3bd592d.json +136 -0
  228. package/android/.cxx/Debug/2a3w6u3n/x86/.cmake/api/v1/reply/target-yuvconvert-Debug-2cc934aa605d443ac9a1.json +157 -0
  229. package/android/.cxx/Debug/2a3w6u3n/x86/.ninja_deps +0 -0
  230. package/android/.cxx/Debug/2a3w6u3n/x86/.ninja_log +55 -0
  231. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeCache.txt +463 -0
  232. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  233. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  234. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  235. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  236. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  237. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  238. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  239. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  240. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  241. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/CMakeOutput.log +258 -0
  242. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/TargetDirectories.txt +24 -0
  243. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/cmake.check_cache +1 -0
  244. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  245. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/faceantispoof.dir/c9fdc8b0d027394fa06b64ba7ac7706f/react-native/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  246. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  247. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  248. package/android/.cxx/Debug/2a3w6u3n/x86/CMakeFiles/rules.ninja +168 -0
  249. package/android/.cxx/Debug/2a3w6u3n/x86/CPackConfig.cmake +71 -0
  250. package/android/.cxx/Debug/2a3w6u3n/x86/CPackSourceConfig.cmake +79 -0
  251. package/android/.cxx/Debug/2a3w6u3n/x86/additional_project_files.txt +40 -0
  252. package/android/.cxx/Debug/2a3w6u3n/x86/android_gradle_build.json +91 -0
  253. package/android/.cxx/Debug/2a3w6u3n/x86/android_gradle_build_mini.json +72 -0
  254. package/android/.cxx/Debug/2a3w6u3n/x86/build.ninja +945 -0
  255. package/android/.cxx/Debug/2a3w6u3n/x86/build_file_index.txt +3 -0
  256. package/android/.cxx/Debug/2a3w6u3n/x86/cmake_install.cmake +59 -0
  257. package/android/.cxx/Debug/2a3w6u3n/x86/compile_commands.json +237 -0
  258. package/android/.cxx/Debug/2a3w6u3n/x86/compile_commands.json.bin +0 -0
  259. package/android/.cxx/Debug/2a3w6u3n/x86/configure_fingerprint.bin +29 -0
  260. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  261. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  262. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  263. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  264. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  265. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  266. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  267. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  268. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  269. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  270. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  271. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  272. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  273. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  274. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  275. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  276. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  277. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  278. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  279. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  280. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  281. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  282. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  283. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  284. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  285. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  286. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  287. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  288. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  289. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  290. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  291. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  292. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  293. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  294. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  295. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  296. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  297. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  298. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  299. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  300. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  301. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  302. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  303. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/cmake_install.cmake +87 -0
  304. package/android/.cxx/Debug/2a3w6u3n/x86/libyuv/libyuv.a +0 -0
  305. package/android/.cxx/Debug/2a3w6u3n/x86/metadata_generation_command.txt +19 -0
  306. package/android/.cxx/Debug/2a3w6u3n/x86/prefab_config.json +4 -0
  307. package/android/.cxx/Debug/2a3w6u3n/x86/symbol_folder_index.txt +1 -0
  308. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  309. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  310. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  311. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/cache-v2-5ca7fb88a80849964189.json +1587 -0
  312. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-9871675aa6610f6180ca.json +857 -0
  313. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/codemodel-v2-deb41c72c38c1ff57431.json +158 -0
  314. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +14 -0
  315. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/directory-libyuv-Debug-edf355e979425c71897d.json +100 -0
  316. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/index-2025-11-18T09-42-00-0374.json +92 -0
  317. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-cpuid-Debug-264b6f675c69e42e8113.json +136 -0
  318. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-faceantispoof-Debug-c95714fd9c4cd04d4222.json +181 -0
  319. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-fastyuv-Debug-80c6b1b5d8e35770dde3.json +157 -0
  320. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuv-Debug-6d3d5c5dcc6bffc18ce6.json +368 -0
  321. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuv_common_objects-Debug-ae517204d04beeb2df23.json +522 -0
  322. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuv_shared-Debug-6e364a075e5b9b47274e.json +390 -0
  323. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuvconstants-Debug-f6a29384c5629faf75f4.json +136 -0
  324. package/android/.cxx/Debug/2a3w6u3n/x86_64/.cmake/api/v1/reply/target-yuvconvert-Debug-dca5f1cf9af89281fc95.json +157 -0
  325. package/android/.cxx/Debug/2a3w6u3n/x86_64/.ninja_deps +0 -0
  326. package/android/.cxx/Debug/2a3w6u3n/x86_64/.ninja_log +55 -0
  327. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeCache.txt +463 -0
  328. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +72 -0
  329. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +83 -0
  330. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  331. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  332. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +15 -0
  333. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +803 -0
  334. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  335. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +791 -0
  336. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  337. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/CMakeOutput.log +258 -0
  338. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/TargetDirectories.txt +24 -0
  339. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/cmake.check_cache +1 -0
  340. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/faceantispoof.dir/FaceAntiSpoofJSI.cpp.o +0 -0
  341. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/faceantispoof.dir/c9fdc8b0d027394fa06b64ba7ac7706f/react-native/ReactCommon/jsi/jsi/jsi.cpp.o +0 -0
  342. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/fastyuv.dir/FastYuvJni.cpp.o +0 -0
  343. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/fastyuv.dir/fast_yuv.cpp.o +0 -0
  344. package/android/.cxx/Debug/2a3w6u3n/x86_64/CMakeFiles/rules.ninja +168 -0
  345. package/android/.cxx/Debug/2a3w6u3n/x86_64/CPackConfig.cmake +71 -0
  346. package/android/.cxx/Debug/2a3w6u3n/x86_64/CPackSourceConfig.cmake +79 -0
  347. package/android/.cxx/Debug/2a3w6u3n/x86_64/additional_project_files.txt +40 -0
  348. package/android/.cxx/Debug/2a3w6u3n/x86_64/android_gradle_build.json +91 -0
  349. package/android/.cxx/Debug/2a3w6u3n/x86_64/android_gradle_build_mini.json +72 -0
  350. package/android/.cxx/Debug/2a3w6u3n/x86_64/build.ninja +945 -0
  351. package/android/.cxx/Debug/2a3w6u3n/x86_64/build_file_index.txt +3 -0
  352. package/android/.cxx/Debug/2a3w6u3n/x86_64/cmake_install.cmake +59 -0
  353. package/android/.cxx/Debug/2a3w6u3n/x86_64/compile_commands.json +237 -0
  354. package/android/.cxx/Debug/2a3w6u3n/x86_64/compile_commands.json.bin +0 -0
  355. package/android/.cxx/Debug/2a3w6u3n/x86_64/configure_fingerprint.bin +29 -0
  356. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/cpuid.dir/util/cpuid.c.o +0 -0
  357. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare.cc.o +0 -0
  358. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_common.cc.o +0 -0
  359. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_gcc.cc.o +0 -0
  360. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/compare_win.cc.o +0 -0
  361. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert.cc.o +0 -0
  362. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_argb.cc.o +0 -0
  363. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from.cc.o +0 -0
  364. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_from_argb.cc.o +0 -0
  365. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_jpeg.cc.o +0 -0
  366. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_argb.cc.o +0 -0
  367. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/convert_to_i420.cc.o +0 -0
  368. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/cpu_id.cc.o +0 -0
  369. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_decoder.cc.o +0 -0
  370. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/mjpeg_validate.cc.o +0 -0
  371. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/planar_functions.cc.o +0 -0
  372. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate.cc.o +0 -0
  373. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_any.cc.o +0 -0
  374. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_argb.cc.o +0 -0
  375. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_common.cc.o +0 -0
  376. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_gcc.cc.o +0 -0
  377. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_lsx.cc.o +0 -0
  378. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/rotate_win.cc.o +0 -0
  379. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_any.cc.o +0 -0
  380. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_common.cc.o +0 -0
  381. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_gcc.cc.o +0 -0
  382. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lasx.cc.o +0 -0
  383. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_lsx.cc.o +0 -0
  384. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_rvv.cc.o +0 -0
  385. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/row_win.cc.o +0 -0
  386. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale.cc.o +0 -0
  387. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_any.cc.o +0 -0
  388. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_argb.cc.o +0 -0
  389. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_common.cc.o +0 -0
  390. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_gcc.cc.o +0 -0
  391. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_lsx.cc.o +0 -0
  392. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rgb.cc.o +0 -0
  393. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_rvv.cc.o +0 -0
  394. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_uv.cc.o +0 -0
  395. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/scale_win.cc.o +0 -0
  396. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuv_common_objects.dir/source/video_common.cc.o +0 -0
  397. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuvconstants.dir/util/yuvconstants.c.o +0 -0
  398. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/CMakeFiles/yuvconvert.dir/util/yuvconvert.cc.o +0 -0
  399. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/cmake_install.cmake +87 -0
  400. package/android/.cxx/Debug/2a3w6u3n/x86_64/libyuv/libyuv.a +0 -0
  401. package/android/.cxx/Debug/2a3w6u3n/x86_64/metadata_generation_command.txt +19 -0
  402. package/android/.cxx/Debug/2a3w6u3n/x86_64/prefab_config.json +4 -0
  403. package/android/.cxx/Debug/2a3w6u3n/x86_64/symbol_folder_index.txt +1 -0
  404. package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +277 -0
  405. package/android/.cxx/tools/debug/armeabi-v7a/compile_commands.json +257 -0
  406. package/android/.cxx/tools/debug/x86/compile_commands.json +237 -0
  407. package/android/.cxx/tools/debug/x86_64/compile_commands.json +237 -0
  408. package/android/build/.transforms/477a48f41cbd60a6044ae2b6659edb2d/results.bin +1 -0
  409. package/android/build/.transforms/477a48f41cbd60a6044ae2b6659edb2d/transformed/classes/classes_dex/classes.dex +0 -0
  410. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/results.bin +1 -0
  411. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/AcceleratorConfig.dex +0 -0
  412. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/AntiSpoofingResult.dex +0 -0
  413. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/BuildConfig.dex +0 -0
  414. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofFrameProcessor.dex +0 -0
  415. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofModule$Companion.dex +0 -0
  416. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofModule.dex +0 -0
  417. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofPackage.dex +0 -0
  418. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofingAdvanced$Companion.dex +0 -0
  419. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FaceAntiSpoofingAdvanced.dex +0 -0
  420. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/FastYuv.dex +0 -0
  421. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/YuvToFloatArrayConverter.dex +0 -0
  422. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/faceantispoof/YuvToRgbConverter.dex +0 -0
  423. package/android/build/.transforms/4b58c518b6e650677b3ff7c47c32914f/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  424. package/android/build/generated/source/buildConfig/debug/com/faceantispoof/BuildConfig.java +14 -0
  425. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +13 -0
  426. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +18 -0
  427. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +6 -0
  428. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +1 -0
  429. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  430. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  431. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +1 -0
  432. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_command_targets.bat +10 -0
  433. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_model.json +199 -0
  434. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_stderr_targets.txt +0 -0
  435. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/build_stdout_targets.txt +63 -0
  436. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/configure_command.bat +19 -0
  437. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/configure_stderr.txt +0 -0
  438. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/configure_stdout.txt +21 -0
  439. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/generate_cxx_metadata_8656_timing.txt +9 -0
  440. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/arm64-v8a/metadata_generation_record.json +158 -0
  441. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_command_targets.bat +10 -0
  442. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_model.json +199 -0
  443. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_stderr_targets.txt +0 -0
  444. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/build_stdout_targets.txt +59 -0
  445. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/configure_command.bat +19 -0
  446. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/configure_stderr.txt +1 -0
  447. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/configure_stdout.txt +19 -0
  448. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/generate_cxx_metadata_8659_timing.txt +9 -0
  449. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/armeabi-v7a/metadata_generation_record.json +158 -0
  450. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_command_targets.bat +10 -0
  451. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_model.json +199 -0
  452. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_stderr_targets.txt +0 -0
  453. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/build_stdout_targets.txt +55 -0
  454. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/configure_command.bat +19 -0
  455. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/configure_stderr.txt +0 -0
  456. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/configure_stdout.txt +19 -0
  457. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/generate_cxx_metadata_8659_timing.txt +9 -0
  458. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86/metadata_generation_record.json +158 -0
  459. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_command_targets.bat +10 -0
  460. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_model.json +199 -0
  461. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_stderr_targets.txt +0 -0
  462. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/build_stdout_targets.txt +55 -0
  463. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/configure_command.bat +19 -0
  464. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/configure_stderr.txt +0 -0
  465. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/configure_stdout.txt +19 -0
  466. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/generate_cxx_metadata_8659_timing.txt +9 -0
  467. package/android/build/intermediates/cxx/Debug/2a3w6u3n/logs/x86_64/metadata_generation_record.json +158 -0
  468. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/cpuid +0 -0
  469. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/libfaceantispoof.so +0 -0
  470. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/libfastyuv.so +0 -0
  471. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/libyuv.so +0 -0
  472. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/yuvconstants +0 -0
  473. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/arm64-v8a/yuvconvert +0 -0
  474. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/cpuid +0 -0
  475. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/libfaceantispoof.so +0 -0
  476. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/libfastyuv.so +0 -0
  477. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/libyuv.so +0 -0
  478. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/yuvconstants +0 -0
  479. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/armeabi-v7a/yuvconvert +0 -0
  480. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/cpuid +0 -0
  481. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/libfaceantispoof.so +0 -0
  482. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/libfastyuv.so +0 -0
  483. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/libyuv.so +0 -0
  484. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/yuvconstants +0 -0
  485. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86/yuvconvert +0 -0
  486. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/cpuid +0 -0
  487. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/libfaceantispoof.so +0 -0
  488. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/libfastyuv.so +0 -0
  489. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/libyuv.so +0 -0
  490. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/yuvconstants +0 -0
  491. package/android/build/intermediates/cxx/Debug/2a3w6u3n/obj/x86_64/yuvconvert +0 -0
  492. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -0
  493. package/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml +4 -0
  494. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
  495. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  496. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  497. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  498. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-vision-camera-face-antispoof-detector_debug.kotlin_module +0 -0
  499. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/faceantispoof/BuildConfig.class +0 -0
  500. package/android/build/intermediates/library_assets/debug/packageDebugAssets/out/FaceAntiSpoofing.tflite +0 -0
  501. package/android/build/intermediates/library_assets/debug/packageDebugAssets/out/spoof_model_scale_2_7.tflite +0 -0
  502. package/android/build/intermediates/library_assets/debug/packageDebugAssets/out/spoof_model_scale_4_0.tflite +0 -0
  503. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libfaceantispoof.so +0 -0
  504. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libfastyuv.so +0 -0
  505. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libyuv.so +0 -0
  506. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libfaceantispoof.so +0 -0
  507. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libfastyuv.so +0 -0
  508. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libyuv.so +0 -0
  509. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libfaceantispoof.so +0 -0
  510. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libfastyuv.so +0 -0
  511. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libyuv.so +0 -0
  512. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libfaceantispoof.so +0 -0
  513. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libfastyuv.so +0 -0
  514. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libyuv.so +0 -0
  515. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +3 -0
  516. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +17 -0
  517. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +13 -0
  518. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libfaceantispoof.so +0 -0
  519. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libfastyuv.so +0 -0
  520. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libyuv.so +0 -0
  521. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libfaceantispoof.so +0 -0
  522. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libfastyuv.so +0 -0
  523. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libyuv.so +0 -0
  524. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libfaceantispoof.so +0 -0
  525. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libfastyuv.so +0 -0
  526. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libyuv.so +0 -0
  527. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libfaceantispoof.so +0 -0
  528. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libfastyuv.so +0 -0
  529. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libyuv.so +0 -0
  530. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +1 -0
  531. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +1 -0
  532. package/android/build/intermediates/packaged_res/debug/packageDebugResources/values/values.xml +4 -0
  533. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-vision-camera-face-antispoof-detector_debug.kotlin_module +0 -0
  534. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/AcceleratorConfig.class +0 -0
  535. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/AntiSpoofingResult.class +0 -0
  536. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/BuildConfig.class +0 -0
  537. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofFrameProcessor.class +0 -0
  538. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofModule$Companion.class +0 -0
  539. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofModule.class +0 -0
  540. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofPackage.class +0 -0
  541. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofingAdvanced$Companion.class +0 -0
  542. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FaceAntiSpoofingAdvanced.class +0 -0
  543. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/FastYuv.class +0 -0
  544. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/YuvToFloatArrayConverter.class +0 -0
  545. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/faceantispoof/YuvToRgbConverter.class +0 -0
  546. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  547. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +2 -0
  548. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  549. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  550. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  551. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  552. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  553. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  554. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  555. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  556. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  557. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  558. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  559. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  560. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  561. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  562. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  563. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  564. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  565. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  566. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  567. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  568. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  569. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  570. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  571. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  572. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  573. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  574. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  575. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  576. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  577. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  578. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  579. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  580. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  581. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  582. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  583. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  584. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  585. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  586. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  587. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  588. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  589. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  590. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  591. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  592. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  593. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  594. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  595. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  596. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  597. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  598. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  599. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  600. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  601. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  602. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  603. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  604. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  605. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  606. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  607. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  608. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  609. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  610. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  611. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +2 -0
  612. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  613. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  614. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  615. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  616. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  617. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  618. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  619. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  620. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  621. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  622. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  623. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  624. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  625. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  626. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  627. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  628. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  629. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  630. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  631. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  632. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  633. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  634. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  635. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  636. package/android/build/outputs/logs/manifest-merger-debug-report.txt +25 -0
  637. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  638. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-vision-camera-face-antispoof-detector_debug.kotlin_module +0 -0
  639. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/AcceleratorConfig.class +0 -0
  640. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/AntiSpoofingResult.class +0 -0
  641. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofFrameProcessor.class +0 -0
  642. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofModule$Companion.class +0 -0
  643. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofModule.class +0 -0
  644. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofPackage.class +0 -0
  645. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofingAdvanced$Companion.class +0 -0
  646. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FaceAntiSpoofingAdvanced.class +0 -0
  647. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/FastYuv.class +0 -0
  648. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/YuvToFloatArrayConverter.class +0 -0
  649. package/android/build/tmp/kotlin-classes/debug/com/faceantispoof/YuvToRgbConverter.class +0 -0
  650. package/android/build.gradle +128 -0
  651. package/android/src/main/AndroidManifest.xml +9 -0
  652. package/android/src/main/assets/FaceAntiSpoofing.tflite +0 -0
  653. package/android/src/main/assets/spoof_model_scale_2_7.tflite +0 -0
  654. package/android/src/main/assets/spoof_model_scale_4_0.tflite +0 -0
  655. package/android/src/main/cpp/CMakeLists.txt +94 -0
  656. package/android/src/main/cpp/FaceAntiSpoofJSI.cpp +68 -0
  657. package/android/src/main/cpp/FastYuvJni.cpp +111 -0
  658. package/android/src/main/cpp/fast_yuv.cpp +332 -0
  659. package/android/src/main/cpp/fast_yuv.h +23 -0
  660. package/android/src/main/cpp/libyuv/.clang-format +6 -0
  661. package/android/src/main/cpp/libyuv/.gn +40 -0
  662. package/android/src/main/cpp/libyuv/.vpython3 +410 -0
  663. package/android/src/main/cpp/libyuv/AUTHORS +7 -0
  664. package/android/src/main/cpp/libyuv/Android.bp +202 -0
  665. package/android/src/main/cpp/libyuv/Android.mk +106 -0
  666. package/android/src/main/cpp/libyuv/BUILD.gn +490 -0
  667. package/android/src/main/cpp/libyuv/CM_linux_packages.cmake +70 -0
  668. package/android/src/main/cpp/libyuv/CMakeLists.txt +252 -0
  669. package/android/src/main/cpp/libyuv/DEPS +935 -0
  670. package/android/src/main/cpp/libyuv/DIR_METADATA +3 -0
  671. package/android/src/main/cpp/libyuv/LICENSE +29 -0
  672. package/android/src/main/cpp/libyuv/OWNERS +11 -0
  673. package/android/src/main/cpp/libyuv/PATENTS +24 -0
  674. package/android/src/main/cpp/libyuv/PRESUBMIT.py +65 -0
  675. package/android/src/main/cpp/libyuv/README.chromium +11 -0
  676. package/android/src/main/cpp/libyuv/README.md +19 -0
  677. package/android/src/main/cpp/libyuv/build_overrides/build.gni +60 -0
  678. package/android/src/main/cpp/libyuv/build_overrides/gtest.gni +19 -0
  679. package/android/src/main/cpp/libyuv/build_overrides/partition_alloc.gni +17 -0
  680. package/android/src/main/cpp/libyuv/codereview.settings +5 -0
  681. package/android/src/main/cpp/libyuv/docs/deprecated_builds.md +409 -0
  682. package/android/src/main/cpp/libyuv/docs/environment_variables.md +64 -0
  683. package/android/src/main/cpp/libyuv/docs/feature_detection.md +108 -0
  684. package/android/src/main/cpp/libyuv/docs/filtering.md +196 -0
  685. package/android/src/main/cpp/libyuv/docs/formats.md +208 -0
  686. package/android/src/main/cpp/libyuv/docs/getting_started.md +296 -0
  687. package/android/src/main/cpp/libyuv/docs/rotation.md +107 -0
  688. package/android/src/main/cpp/libyuv/download_vs_toolchain.py +29 -0
  689. package/android/src/main/cpp/libyuv/include/libyuv/basic_types.h +68 -0
  690. package/android/src/main/cpp/libyuv/include/libyuv/compare.h +111 -0
  691. package/android/src/main/cpp/libyuv/include/libyuv/compare_row.h +112 -0
  692. package/android/src/main/cpp/libyuv/include/libyuv/convert.h +1117 -0
  693. package/android/src/main/cpp/libyuv/include/libyuv/convert_argb.h +2335 -0
  694. package/android/src/main/cpp/libyuv/include/libyuv/convert_from.h +203 -0
  695. package/android/src/main/cpp/libyuv/include/libyuv/convert_from_argb.h +394 -0
  696. package/android/src/main/cpp/libyuv/include/libyuv/cpu_id.h +147 -0
  697. package/android/src/main/cpp/libyuv/include/libyuv/cpu_support.h +99 -0
  698. package/android/src/main/cpp/libyuv/include/libyuv/loongson_intrinsics.h +1949 -0
  699. package/android/src/main/cpp/libyuv/include/libyuv/mjpeg_decoder.h +195 -0
  700. package/android/src/main/cpp/libyuv/include/libyuv/planar_functions.h +1131 -0
  701. package/android/src/main/cpp/libyuv/include/libyuv/rotate.h +296 -0
  702. package/android/src/main/cpp/libyuv/include/libyuv/rotate_argb.h +37 -0
  703. package/android/src/main/cpp/libyuv/include/libyuv/rotate_row.h +265 -0
  704. package/android/src/main/cpp/libyuv/include/libyuv/row.h +6738 -0
  705. package/android/src/main/cpp/libyuv/include/libyuv/row_sve.h +2154 -0
  706. package/android/src/main/cpp/libyuv/include/libyuv/scale.h +336 -0
  707. package/android/src/main/cpp/libyuv/include/libyuv/scale_argb.h +76 -0
  708. package/android/src/main/cpp/libyuv/include/libyuv/scale_rgb.h +42 -0
  709. package/android/src/main/cpp/libyuv/include/libyuv/scale_row.h +1726 -0
  710. package/android/src/main/cpp/libyuv/include/libyuv/scale_uv.h +51 -0
  711. package/android/src/main/cpp/libyuv/include/libyuv/version.h +16 -0
  712. package/android/src/main/cpp/libyuv/include/libyuv/video_common.h +222 -0
  713. package/android/src/main/cpp/libyuv/include/libyuv.h +33 -0
  714. package/android/src/main/cpp/libyuv/infra/config/OWNERS +3 -0
  715. package/android/src/main/cpp/libyuv/infra/config/PRESUBMIT.py +17 -0
  716. package/android/src/main/cpp/libyuv/infra/config/README.md +2 -0
  717. package/android/src/main/cpp/libyuv/infra/config/codereview.settings +6 -0
  718. package/android/src/main/cpp/libyuv/infra/config/commit-queue.cfg +144 -0
  719. package/android/src/main/cpp/libyuv/infra/config/cr-buildbucket.cfg +1185 -0
  720. package/android/src/main/cpp/libyuv/infra/config/luci-logdog.cfg +9 -0
  721. package/android/src/main/cpp/libyuv/infra/config/luci-milo.cfg +246 -0
  722. package/android/src/main/cpp/libyuv/infra/config/luci-scheduler.cfg +385 -0
  723. package/android/src/main/cpp/libyuv/infra/config/main.star +402 -0
  724. package/android/src/main/cpp/libyuv/infra/config/project.cfg +16 -0
  725. package/android/src/main/cpp/libyuv/infra/config/realms.cfg +111 -0
  726. package/android/src/main/cpp/libyuv/libyuv.gni +34 -0
  727. package/android/src/main/cpp/libyuv/libyuv.gyp +149 -0
  728. package/android/src/main/cpp/libyuv/libyuv.gypi +87 -0
  729. package/android/src/main/cpp/libyuv/linux.mk +96 -0
  730. package/android/src/main/cpp/libyuv/public.mk +13 -0
  731. package/android/src/main/cpp/libyuv/pylintrc +49 -0
  732. package/android/src/main/cpp/libyuv/riscv_script/prepare_toolchain_qemu.sh +74 -0
  733. package/android/src/main/cpp/libyuv/riscv_script/riscv-clang.cmake +56 -0
  734. package/android/src/main/cpp/libyuv/riscv_script/run_qemu.sh +15 -0
  735. package/android/src/main/cpp/libyuv/source/compare.cc +435 -0
  736. package/android/src/main/cpp/libyuv/source/compare_common.cc +74 -0
  737. package/android/src/main/cpp/libyuv/source/compare_gcc.cc +362 -0
  738. package/android/src/main/cpp/libyuv/source/compare_neon.cc +96 -0
  739. package/android/src/main/cpp/libyuv/source/compare_neon64.cc +223 -0
  740. package/android/src/main/cpp/libyuv/source/compare_win.cc +241 -0
  741. package/android/src/main/cpp/libyuv/source/convert.cc +4746 -0
  742. package/android/src/main/cpp/libyuv/source/convert_argb.cc +9179 -0
  743. package/android/src/main/cpp/libyuv/source/convert_from.cc +866 -0
  744. package/android/src/main/cpp/libyuv/source/convert_from_argb.cc +3671 -0
  745. package/android/src/main/cpp/libyuv/source/convert_jpeg.cc +602 -0
  746. package/android/src/main/cpp/libyuv/source/convert_to_argb.cc +391 -0
  747. package/android/src/main/cpp/libyuv/source/convert_to_i420.cc +288 -0
  748. package/android/src/main/cpp/libyuv/source/cpu_id.cc +496 -0
  749. package/android/src/main/cpp/libyuv/source/mjpeg_decoder.cc +580 -0
  750. package/android/src/main/cpp/libyuv/source/mjpeg_validate.cc +71 -0
  751. package/android/src/main/cpp/libyuv/source/planar_functions.cc +5663 -0
  752. package/android/src/main/cpp/libyuv/source/rotate.cc +1241 -0
  753. package/android/src/main/cpp/libyuv/source/rotate_any.cc +76 -0
  754. package/android/src/main/cpp/libyuv/source/rotate_argb.cc +259 -0
  755. package/android/src/main/cpp/libyuv/source/rotate_common.cc +208 -0
  756. package/android/src/main/cpp/libyuv/source/rotate_gcc.cc +505 -0
  757. package/android/src/main/cpp/libyuv/source/rotate_lsx.cc +233 -0
  758. package/android/src/main/cpp/libyuv/source/rotate_neon.cc +219 -0
  759. package/android/src/main/cpp/libyuv/source/rotate_neon64.cc +273 -0
  760. package/android/src/main/cpp/libyuv/source/rotate_sme.cc +174 -0
  761. package/android/src/main/cpp/libyuv/source/rotate_win.cc +253 -0
  762. package/android/src/main/cpp/libyuv/source/row_any.cc +2519 -0
  763. package/android/src/main/cpp/libyuv/source/row_common.cc +4461 -0
  764. package/android/src/main/cpp/libyuv/source/row_gcc.cc +9570 -0
  765. package/android/src/main/cpp/libyuv/source/row_lasx.cc +2343 -0
  766. package/android/src/main/cpp/libyuv/source/row_lsx.cc +3030 -0
  767. package/android/src/main/cpp/libyuv/source/row_neon.cc +4026 -0
  768. package/android/src/main/cpp/libyuv/source/row_neon64.cc +5617 -0
  769. package/android/src/main/cpp/libyuv/source/row_rvv.cc +2599 -0
  770. package/android/src/main/cpp/libyuv/source/row_sme.cc +1183 -0
  771. package/android/src/main/cpp/libyuv/source/row_sve.cc +1088 -0
  772. package/android/src/main/cpp/libyuv/source/row_win.cc +6453 -0
  773. package/android/src/main/cpp/libyuv/source/scale.cc +2710 -0
  774. package/android/src/main/cpp/libyuv/source/scale_any.cc +991 -0
  775. package/android/src/main/cpp/libyuv/source/scale_argb.cc +1158 -0
  776. package/android/src/main/cpp/libyuv/source/scale_common.cc +1977 -0
  777. package/android/src/main/cpp/libyuv/source/scale_gcc.cc +2947 -0
  778. package/android/src/main/cpp/libyuv/source/scale_lsx.cc +739 -0
  779. package/android/src/main/cpp/libyuv/source/scale_neon.cc +1449 -0
  780. package/android/src/main/cpp/libyuv/source/scale_neon64.cc +1552 -0
  781. package/android/src/main/cpp/libyuv/source/scale_rgb.cc +82 -0
  782. package/android/src/main/cpp/libyuv/source/scale_rvv.cc +1971 -0
  783. package/android/src/main/cpp/libyuv/source/scale_sme.cc +555 -0
  784. package/android/src/main/cpp/libyuv/source/scale_uv.cc +1159 -0
  785. package/android/src/main/cpp/libyuv/source/scale_win.cc +1392 -0
  786. package/android/src/main/cpp/libyuv/source/test.sh +35 -0
  787. package/android/src/main/cpp/libyuv/source/video_common.cc +62 -0
  788. package/android/src/main/cpp/libyuv/tools_libyuv/OWNERS +4 -0
  789. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/roll_deps.py +931 -0
  790. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/roll_deps_test.py +164 -0
  791. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS +21 -0
  792. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.new +13 -0
  793. package/android/src/main/cpp/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old +13 -0
  794. package/android/src/main/cpp/libyuv/tools_libyuv/get_landmines.py +38 -0
  795. package/android/src/main/cpp/libyuv/tools_libyuv/msan/OWNERS +3 -0
  796. package/android/src/main/cpp/libyuv/tools_libyuv/msan/blacklist.txt +9 -0
  797. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/OWNERS +3 -0
  798. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/blacklist.txt +15 -0
  799. package/android/src/main/cpp/libyuv/tools_libyuv/ubsan/vptr_blacklist.txt +25 -0
  800. package/android/src/main/cpp/libyuv/unit_test/basictypes_test.cc +43 -0
  801. package/android/src/main/cpp/libyuv/unit_test/color_test.cc +848 -0
  802. package/android/src/main/cpp/libyuv/unit_test/compare_test.cc +739 -0
  803. package/android/src/main/cpp/libyuv/unit_test/convert_argb_test.cc +2867 -0
  804. package/android/src/main/cpp/libyuv/unit_test/convert_test.cc +2133 -0
  805. package/android/src/main/cpp/libyuv/unit_test/cpu_test.cc +427 -0
  806. package/android/src/main/cpp/libyuv/unit_test/cpu_thread_test.cc +63 -0
  807. package/android/src/main/cpp/libyuv/unit_test/math_test.cc +160 -0
  808. package/android/src/main/cpp/libyuv/unit_test/planar_test.cc +4731 -0
  809. package/android/src/main/cpp/libyuv/unit_test/rotate_argb_test.cc +334 -0
  810. package/android/src/main/cpp/libyuv/unit_test/rotate_test.cc +962 -0
  811. package/android/src/main/cpp/libyuv/unit_test/scale_argb_test.cc +590 -0
  812. package/android/src/main/cpp/libyuv/unit_test/scale_plane_test.cc +465 -0
  813. package/android/src/main/cpp/libyuv/unit_test/scale_rgb_test.cc +280 -0
  814. package/android/src/main/cpp/libyuv/unit_test/scale_test.cc +1135 -0
  815. package/android/src/main/cpp/libyuv/unit_test/scale_uv_test.cc +249 -0
  816. package/android/src/main/cpp/libyuv/unit_test/testdata/arm_v7.txt +12 -0
  817. package/android/src/main/cpp/libyuv/unit_test/testdata/mips.txt +7 -0
  818. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson2k.txt +5 -0
  819. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson3.txt +10 -0
  820. package/android/src/main/cpp/libyuv/unit_test/testdata/mips_loongson_mmi.txt +7 -0
  821. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64.txt +4 -0
  822. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv.txt +4 -0
  823. package/android/src/main/cpp/libyuv/unit_test/testdata/riscv64_rvv_zvfh.txt +4 -0
  824. package/android/src/main/cpp/libyuv/unit_test/testdata/tegra3.txt +23 -0
  825. package/android/src/main/cpp/libyuv/unit_test/testdata/test0.jpg +0 -0
  826. package/android/src/main/cpp/libyuv/unit_test/testdata/test1.jpg +0 -0
  827. package/android/src/main/cpp/libyuv/unit_test/testdata/test2.jpg +0 -0
  828. package/android/src/main/cpp/libyuv/unit_test/testdata/test3.jpg +0 -0
  829. package/android/src/main/cpp/libyuv/unit_test/testdata/test4.jpg +0 -0
  830. package/android/src/main/cpp/libyuv/unit_test/unit_test.cc +581 -0
  831. package/android/src/main/cpp/libyuv/unit_test/unit_test.h +232 -0
  832. package/android/src/main/cpp/libyuv/unit_test/video_common_test.cc +112 -0
  833. package/android/src/main/cpp/libyuv/util/Makefile +9 -0
  834. package/android/src/main/cpp/libyuv/util/color.cc +120 -0
  835. package/android/src/main/cpp/libyuv/util/compare.cc +67 -0
  836. package/android/src/main/cpp/libyuv/util/cpuid.c +211 -0
  837. package/android/src/main/cpp/libyuv/util/i444tonv12_eg.cc +28 -0
  838. package/android/src/main/cpp/libyuv/util/psnr.cc +291 -0
  839. package/android/src/main/cpp/libyuv/util/psnr.h +47 -0
  840. package/android/src/main/cpp/libyuv/util/psnr_main.cc +620 -0
  841. package/android/src/main/cpp/libyuv/util/ssim.cc +364 -0
  842. package/android/src/main/cpp/libyuv/util/ssim.h +38 -0
  843. package/android/src/main/cpp/libyuv/util/yuvconstants.c +114 -0
  844. package/android/src/main/cpp/libyuv/util/yuvconvert.cc +367 -0
  845. package/android/src/main/cpp/libyuv/winarm.mk +47 -0
  846. package/android/src/main/java/com/faceantispoof/AcceleratorConfig.kt +49 -0
  847. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofFrameProcessor.kt +145 -0
  848. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofModule.kt +170 -0
  849. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofPackage.kt +38 -0
  850. package/android/src/main/java/com/faceantispoof/FaceAntiSpoofingAdvanced.kt +288 -0
  851. package/android/src/main/java/com/faceantispoof/FastYuv.kt +51 -0
  852. package/android/src/main/java/com/faceantispoof/YuvToFloatArrayConverter.kt +198 -0
  853. package/android/src/main/java/com/faceantispoof/YuvToRgbConverter.kt +73 -0
  854. package/android/src/main/res/values/strings.xml +3 -0
  855. package/index.d.ts +84 -0
  856. package/index.js +47 -0
  857. package/package.json +73 -0
@@ -0,0 +1,2947 @@
1
+ /*
2
+ * Copyright 2013 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/row.h"
12
+ #include "libyuv/scale_row.h"
13
+
14
+ #ifdef __cplusplus
15
+ namespace libyuv {
16
+ extern "C" {
17
+ #endif
18
+
19
+ // This module is for GCC x86 and x64.
20
+ #if !defined(LIBYUV_DISABLE_X86) && \
21
+ (defined(__x86_64__) || defined(__i386__)) && \
22
+ !defined(LIBYUV_ENABLE_ROWWIN)
23
+
24
+ // Offsets for source bytes 0 to 9
25
+ static const uvec8 kShuf0 = {0, 1, 3, 4, 5, 7, 8, 9,
26
+ 128, 128, 128, 128, 128, 128, 128, 128};
27
+
28
+ // Offsets for source bytes 11 to 20 with 8 subtracted = 3 to 12.
29
+ static const uvec8 kShuf1 = {3, 4, 5, 7, 8, 9, 11, 12,
30
+ 128, 128, 128, 128, 128, 128, 128, 128};
31
+
32
+ // Offsets for source bytes 21 to 31 with 16 subtracted = 5 to 31.
33
+ static const uvec8 kShuf2 = {5, 7, 8, 9, 11, 12, 13, 15,
34
+ 128, 128, 128, 128, 128, 128, 128, 128};
35
+
36
+ // Offsets for source bytes 0 to 10
37
+ static const uvec8 kShuf01 = {0, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 8, 9, 9, 10};
38
+
39
+ // Offsets for source bytes 10 to 21 with 8 subtracted = 3 to 13.
40
+ static const uvec8 kShuf11 = {2, 3, 4, 5, 5, 6, 6, 7,
41
+ 8, 9, 9, 10, 10, 11, 12, 13};
42
+
43
+ // Offsets for source bytes 21 to 31 with 16 subtracted = 5 to 31.
44
+ static const uvec8 kShuf21 = {5, 6, 6, 7, 8, 9, 9, 10,
45
+ 10, 11, 12, 13, 13, 14, 14, 15};
46
+
47
+ // Coefficients for source bytes 0 to 10
48
+ static const uvec8 kMadd01 = {3, 1, 2, 2, 1, 3, 3, 1, 2, 2, 1, 3, 3, 1, 2, 2};
49
+
50
+ // Coefficients for source bytes 10 to 21
51
+ static const uvec8 kMadd11 = {1, 3, 3, 1, 2, 2, 1, 3, 3, 1, 2, 2, 1, 3, 3, 1};
52
+
53
+ // Coefficients for source bytes 21 to 31
54
+ static const uvec8 kMadd21 = {2, 2, 1, 3, 3, 1, 2, 2, 1, 3, 3, 1, 2, 2, 1, 3};
55
+
56
+ // Coefficients for source bytes 21 to 31
57
+ static const vec16 kRound34 = {2, 2, 2, 2, 2, 2, 2, 2};
58
+
59
+ static const uvec8 kShuf38a = {0, 3, 6, 8, 11, 14, 128, 128,
60
+ 128, 128, 128, 128, 128, 128, 128, 128};
61
+
62
+ static const uvec8 kShuf38b = {128, 128, 128, 128, 128, 128, 0, 3,
63
+ 6, 8, 11, 14, 128, 128, 128, 128};
64
+
65
+ // Arrange words 0,3,6 into 0,1,2
66
+ static const uvec8 kShufAc = {0, 1, 6, 7, 12, 13, 128, 128,
67
+ 128, 128, 128, 128, 128, 128, 128, 128};
68
+
69
+ // Arrange words 0,3,6 into 3,4,5
70
+ static const uvec8 kShufAc3 = {128, 128, 128, 128, 128, 128, 0, 1,
71
+ 6, 7, 12, 13, 128, 128, 128, 128};
72
+
73
+ // Scaling values for boxes of 3x3 and 2x3
74
+ static const uvec16 kScaleAc33 = {65536 / 9, 65536 / 9, 65536 / 6, 65536 / 9,
75
+ 65536 / 9, 65536 / 6, 0, 0};
76
+
77
+ // Arrange first value for pixels 0,1,2,3,4,5
78
+ static const uvec8 kShufAb0 = {0, 128, 3, 128, 6, 128, 8, 128,
79
+ 11, 128, 14, 128, 128, 128, 128, 128};
80
+
81
+ // Arrange second value for pixels 0,1,2,3,4,5
82
+ static const uvec8 kShufAb1 = {1, 128, 4, 128, 7, 128, 9, 128,
83
+ 12, 128, 15, 128, 128, 128, 128, 128};
84
+
85
+ // Arrange third value for pixels 0,1,2,3,4,5
86
+ static const uvec8 kShufAb2 = {2, 128, 5, 128, 128, 128, 10, 128,
87
+ 13, 128, 128, 128, 128, 128, 128, 128};
88
+
89
+ // Scaling values for boxes of 3x2 and 2x2
90
+ static const uvec16 kScaleAb2 = {65536 / 3, 65536 / 3, 65536 / 2, 65536 / 3,
91
+ 65536 / 3, 65536 / 2, 0, 0};
92
+
93
+ // GCC versions of row functions are verbatim conversions from Visual C.
94
+ // Generated using gcc disassembly on Visual C object file:
95
+ // objdump -D yuvscaler.obj >yuvscaler.txt
96
+
97
+ void ScaleRowDown2_SSSE3(const uint8_t* src_ptr,
98
+ ptrdiff_t src_stride,
99
+ uint8_t* dst_ptr,
100
+ int dst_width) {
101
+ (void)src_stride;
102
+ asm volatile(
103
+ // 16 pixel loop.
104
+ LABELALIGN
105
+ "1: \n"
106
+ "movdqu (%0),%%xmm0 \n"
107
+ "movdqu 0x10(%0),%%xmm1 \n"
108
+ "lea 0x20(%0),%0 \n"
109
+ "psrlw $0x8,%%xmm0 \n"
110
+ "psrlw $0x8,%%xmm1 \n"
111
+ "packuswb %%xmm1,%%xmm0 \n"
112
+ "movdqu %%xmm0,(%1) \n"
113
+ "lea 0x10(%1),%1 \n"
114
+ "sub $0x10,%2 \n"
115
+ "jg 1b \n"
116
+ : "+r"(src_ptr), // %0
117
+ "+r"(dst_ptr), // %1
118
+ "+r"(dst_width) // %2
119
+ :
120
+ : "memory", "cc", "xmm0", "xmm1");
121
+ }
122
+
123
+ void ScaleRowDown2Linear_SSSE3(const uint8_t* src_ptr,
124
+ ptrdiff_t src_stride,
125
+ uint8_t* dst_ptr,
126
+ int dst_width) {
127
+ (void)src_stride;
128
+ asm volatile(
129
+ "pcmpeqb %%xmm4,%%xmm4 \n" // 0x0101
130
+ "pabsb %%xmm4,%%xmm4 \n"
131
+
132
+ "pxor %%xmm5,%%xmm5 \n"
133
+
134
+ LABELALIGN
135
+ "1: \n"
136
+ "movdqu (%0),%%xmm0 \n"
137
+ "movdqu 0x10(%0),%%xmm1 \n"
138
+ "lea 0x20(%0),%0 \n"
139
+ "pmaddubsw %%xmm4,%%xmm0 \n"
140
+ "pmaddubsw %%xmm4,%%xmm1 \n"
141
+ "pavgw %%xmm5,%%xmm0 \n"
142
+ "pavgw %%xmm5,%%xmm1 \n"
143
+ "packuswb %%xmm1,%%xmm0 \n"
144
+ "movdqu %%xmm0,(%1) \n"
145
+ "lea 0x10(%1),%1 \n"
146
+ "sub $0x10,%2 \n"
147
+ "jg 1b \n"
148
+ : "+r"(src_ptr), // %0
149
+ "+r"(dst_ptr), // %1
150
+ "+r"(dst_width) // %2
151
+ :
152
+ : "memory", "cc", "xmm0", "xmm1", "xmm4", "xmm5");
153
+ }
154
+
155
+ void ScaleRowDown2Box_SSSE3(const uint8_t* src_ptr,
156
+ ptrdiff_t src_stride,
157
+ uint8_t* dst_ptr,
158
+ int dst_width) {
159
+ asm volatile(
160
+ "pcmpeqb %%xmm4,%%xmm4 \n" // 0x0101
161
+ "pabsb %%xmm4,%%xmm4 \n"
162
+ "pxor %%xmm5,%%xmm5 \n"
163
+
164
+ LABELALIGN
165
+ "1: \n"
166
+ "movdqu (%0),%%xmm0 \n"
167
+ "movdqu 0x10(%0),%%xmm1 \n"
168
+ "movdqu 0x00(%0,%3,1),%%xmm2 \n"
169
+ "movdqu 0x10(%0,%3,1),%%xmm3 \n"
170
+ "lea 0x20(%0),%0 \n"
171
+ "pmaddubsw %%xmm4,%%xmm0 \n"
172
+ "pmaddubsw %%xmm4,%%xmm1 \n"
173
+ "pmaddubsw %%xmm4,%%xmm2 \n"
174
+ "pmaddubsw %%xmm4,%%xmm3 \n"
175
+ "paddw %%xmm2,%%xmm0 \n"
176
+ "paddw %%xmm3,%%xmm1 \n"
177
+ "psrlw $0x1,%%xmm0 \n"
178
+ "psrlw $0x1,%%xmm1 \n"
179
+ "pavgw %%xmm5,%%xmm0 \n"
180
+ "pavgw %%xmm5,%%xmm1 \n"
181
+ "packuswb %%xmm1,%%xmm0 \n"
182
+ "movdqu %%xmm0,(%1) \n"
183
+ "lea 0x10(%1),%1 \n"
184
+ "sub $0x10,%2 \n"
185
+ "jg 1b \n"
186
+ : "+r"(src_ptr), // %0
187
+ "+r"(dst_ptr), // %1
188
+ "+r"(dst_width) // %2
189
+ : "r"((intptr_t)(src_stride)) // %3
190
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm5");
191
+ }
192
+
193
+ #ifdef HAS_SCALEROWDOWN2_AVX2
194
+ void ScaleRowDown2_AVX2(const uint8_t* src_ptr,
195
+ ptrdiff_t src_stride,
196
+ uint8_t* dst_ptr,
197
+ int dst_width) {
198
+ (void)src_stride;
199
+ asm volatile(
200
+ "1: \n"
201
+ "vmovdqu (%0),%%ymm0 \n"
202
+ "vmovdqu 0x20(%0),%%ymm1 \n"
203
+ "lea 0x40(%0),%0 \n"
204
+ "vpsrlw $0x8,%%ymm0,%%ymm0 \n"
205
+ "vpsrlw $0x8,%%ymm1,%%ymm1 \n"
206
+ "vpackuswb %%ymm1,%%ymm0,%%ymm0 \n"
207
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n"
208
+ "vmovdqu %%ymm0,(%1) \n"
209
+ "lea 0x20(%1),%1 \n"
210
+ "sub $0x20,%2 \n"
211
+ "jg 1b \n"
212
+ "vzeroupper \n"
213
+ : "+r"(src_ptr), // %0
214
+ "+r"(dst_ptr), // %1
215
+ "+r"(dst_width) // %2
216
+ :
217
+ : "memory", "cc", "xmm0", "xmm1");
218
+ }
219
+
220
+ void ScaleRowDown2Linear_AVX2(const uint8_t* src_ptr,
221
+ ptrdiff_t src_stride,
222
+ uint8_t* dst_ptr,
223
+ int dst_width) {
224
+ (void)src_stride;
225
+ asm volatile(
226
+ "vpcmpeqb %%ymm4,%%ymm4,%%ymm4 \n"
227
+ "vpabsb %%ymm4,%%ymm4 \n"
228
+ "vpxor %%ymm5,%%ymm5,%%ymm5 \n"
229
+
230
+ LABELALIGN
231
+ "1: \n"
232
+ "vmovdqu (%0),%%ymm0 \n"
233
+ "vmovdqu 0x20(%0),%%ymm1 \n"
234
+ "lea 0x40(%0),%0 \n"
235
+ "vpmaddubsw %%ymm4,%%ymm0,%%ymm0 \n"
236
+ "vpmaddubsw %%ymm4,%%ymm1,%%ymm1 \n"
237
+ "vpavgw %%ymm5,%%ymm0,%%ymm0 \n"
238
+ "vpavgw %%ymm5,%%ymm1,%%ymm1 \n"
239
+ "vpackuswb %%ymm1,%%ymm0,%%ymm0 \n"
240
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n"
241
+ "vmovdqu %%ymm0,(%1) \n"
242
+ "lea 0x20(%1),%1 \n"
243
+ "sub $0x20,%2 \n"
244
+ "jg 1b \n"
245
+ "vzeroupper \n"
246
+ : "+r"(src_ptr), // %0
247
+ "+r"(dst_ptr), // %1
248
+ "+r"(dst_width) // %2
249
+ :
250
+ : "memory", "cc", "xmm0", "xmm1", "xmm4", "xmm5");
251
+ }
252
+
253
+ void ScaleRowDown2Box_AVX2(const uint8_t* src_ptr,
254
+ ptrdiff_t src_stride,
255
+ uint8_t* dst_ptr,
256
+ int dst_width) {
257
+ asm volatile(
258
+ "vpcmpeqb %%ymm4,%%ymm4,%%ymm4 \n"
259
+ "vpabsb %%ymm4,%%ymm4 \n"
260
+ "vpxor %%ymm5,%%ymm5,%%ymm5 \n"
261
+
262
+ LABELALIGN
263
+ "1: \n"
264
+ "vmovdqu (%0),%%ymm0 \n"
265
+ "vmovdqu 0x20(%0),%%ymm1 \n"
266
+ "vmovdqu 0x00(%0,%3,1),%%ymm2 \n"
267
+ "vmovdqu 0x20(%0,%3,1),%%ymm3 \n"
268
+ "lea 0x40(%0),%0 \n"
269
+ "vpmaddubsw %%ymm4,%%ymm0,%%ymm0 \n"
270
+ "vpmaddubsw %%ymm4,%%ymm1,%%ymm1 \n"
271
+ "vpmaddubsw %%ymm4,%%ymm2,%%ymm2 \n"
272
+ "vpmaddubsw %%ymm4,%%ymm3,%%ymm3 \n"
273
+ "vpaddw %%ymm2,%%ymm0,%%ymm0 \n"
274
+ "vpaddw %%ymm3,%%ymm1,%%ymm1 \n"
275
+ "vpsrlw $0x1,%%ymm0,%%ymm0 \n"
276
+ "vpsrlw $0x1,%%ymm1,%%ymm1 \n"
277
+ "vpavgw %%ymm5,%%ymm0,%%ymm0 \n"
278
+ "vpavgw %%ymm5,%%ymm1,%%ymm1 \n"
279
+ "vpackuswb %%ymm1,%%ymm0,%%ymm0 \n"
280
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n"
281
+ "vmovdqu %%ymm0,(%1) \n"
282
+ "lea 0x20(%1),%1 \n"
283
+ "sub $0x20,%2 \n"
284
+ "jg 1b \n"
285
+ "vzeroupper \n"
286
+ : "+r"(src_ptr), // %0
287
+ "+r"(dst_ptr), // %1
288
+ "+r"(dst_width) // %2
289
+ : "r"((intptr_t)(src_stride)) // %3
290
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm5");
291
+ }
292
+ #endif // HAS_SCALEROWDOWN2_AVX2
293
+
294
+ void ScaleRowDown4_SSSE3(const uint8_t* src_ptr,
295
+ ptrdiff_t src_stride,
296
+ uint8_t* dst_ptr,
297
+ int dst_width) {
298
+ (void)src_stride;
299
+ asm volatile(
300
+ "pcmpeqb %%xmm5,%%xmm5 \n"
301
+ "psrld $0x18,%%xmm5 \n"
302
+ "pslld $0x10,%%xmm5 \n"
303
+
304
+ LABELALIGN
305
+ "1: \n"
306
+ "movdqu (%0),%%xmm0 \n"
307
+ "movdqu 0x10(%0),%%xmm1 \n"
308
+ "lea 0x20(%0),%0 \n"
309
+ "pand %%xmm5,%%xmm0 \n"
310
+ "pand %%xmm5,%%xmm1 \n"
311
+ "packuswb %%xmm1,%%xmm0 \n"
312
+ "psrlw $0x8,%%xmm0 \n"
313
+ "packuswb %%xmm0,%%xmm0 \n"
314
+ "movq %%xmm0,(%1) \n"
315
+ "lea 0x8(%1),%1 \n"
316
+ "sub $0x8,%2 \n"
317
+ "jg 1b \n"
318
+ : "+r"(src_ptr), // %0
319
+ "+r"(dst_ptr), // %1
320
+ "+r"(dst_width) // %2
321
+ :
322
+ : "memory", "cc", "xmm0", "xmm1", "xmm5");
323
+ }
324
+
325
+ void ScaleRowDown4Box_SSSE3(const uint8_t* src_ptr,
326
+ ptrdiff_t src_stride,
327
+ uint8_t* dst_ptr,
328
+ int dst_width) {
329
+ intptr_t stridex3;
330
+ asm volatile(
331
+ "pcmpeqb %%xmm4,%%xmm4 \n"
332
+ "pabsw %%xmm4,%%xmm5 \n"
333
+ "pabsb %%xmm4,%%xmm4 \n" // 0x0101
334
+ "psllw $0x3,%%xmm5 \n" // 0x0008
335
+ "lea 0x00(%4,%4,2),%3 \n"
336
+
337
+ LABELALIGN
338
+ "1: \n"
339
+ "movdqu (%0),%%xmm0 \n"
340
+ "movdqu 0x10(%0),%%xmm1 \n"
341
+ "movdqu 0x00(%0,%4,1),%%xmm2 \n"
342
+ "movdqu 0x10(%0,%4,1),%%xmm3 \n"
343
+ "pmaddubsw %%xmm4,%%xmm0 \n"
344
+ "pmaddubsw %%xmm4,%%xmm1 \n"
345
+ "pmaddubsw %%xmm4,%%xmm2 \n"
346
+ "pmaddubsw %%xmm4,%%xmm3 \n"
347
+ "paddw %%xmm2,%%xmm0 \n"
348
+ "paddw %%xmm3,%%xmm1 \n"
349
+ "movdqu 0x00(%0,%4,2),%%xmm2 \n"
350
+ "movdqu 0x10(%0,%4,2),%%xmm3 \n"
351
+ "pmaddubsw %%xmm4,%%xmm2 \n"
352
+ "pmaddubsw %%xmm4,%%xmm3 \n"
353
+ "paddw %%xmm2,%%xmm0 \n"
354
+ "paddw %%xmm3,%%xmm1 \n"
355
+ "movdqu 0x00(%0,%3,1),%%xmm2 \n"
356
+ "movdqu 0x10(%0,%3,1),%%xmm3 \n"
357
+ "lea 0x20(%0),%0 \n"
358
+ "pmaddubsw %%xmm4,%%xmm2 \n"
359
+ "pmaddubsw %%xmm4,%%xmm3 \n"
360
+ "paddw %%xmm2,%%xmm0 \n"
361
+ "paddw %%xmm3,%%xmm1 \n"
362
+ "phaddw %%xmm1,%%xmm0 \n"
363
+ "paddw %%xmm5,%%xmm0 \n"
364
+ "psrlw $0x4,%%xmm0 \n"
365
+ "packuswb %%xmm0,%%xmm0 \n"
366
+ "movq %%xmm0,(%1) \n"
367
+ "lea 0x8(%1),%1 \n"
368
+ "sub $0x8,%2 \n"
369
+ "jg 1b \n"
370
+ : "+r"(src_ptr), // %0
371
+ "+r"(dst_ptr), // %1
372
+ "+r"(dst_width), // %2
373
+ "=&r"(stridex3) // %3
374
+ : "r"((intptr_t)(src_stride)) // %4
375
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
376
+ }
377
+
378
+ #ifdef HAS_SCALEROWDOWN4_AVX2
379
+ void ScaleRowDown4_AVX2(const uint8_t* src_ptr,
380
+ ptrdiff_t src_stride,
381
+ uint8_t* dst_ptr,
382
+ int dst_width) {
383
+ (void)src_stride;
384
+ asm volatile(
385
+ "vpcmpeqb %%ymm5,%%ymm5,%%ymm5 \n"
386
+ "vpsrld $0x18,%%ymm5,%%ymm5 \n"
387
+ "vpslld $0x10,%%ymm5,%%ymm5 \n"
388
+
389
+ LABELALIGN
390
+ "1: \n"
391
+ "vmovdqu (%0),%%ymm0 \n"
392
+ "vmovdqu 0x20(%0),%%ymm1 \n"
393
+ "lea 0x40(%0),%0 \n"
394
+ "vpand %%ymm5,%%ymm0,%%ymm0 \n"
395
+ "vpand %%ymm5,%%ymm1,%%ymm1 \n"
396
+ "vpackuswb %%ymm1,%%ymm0,%%ymm0 \n"
397
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n"
398
+ "vpsrlw $0x8,%%ymm0,%%ymm0 \n"
399
+ "vpackuswb %%ymm0,%%ymm0,%%ymm0 \n"
400
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n"
401
+ "vmovdqu %%xmm0,(%1) \n"
402
+ "lea 0x10(%1),%1 \n"
403
+ "sub $0x10,%2 \n"
404
+ "jg 1b \n"
405
+ "vzeroupper \n"
406
+ : "+r"(src_ptr), // %0
407
+ "+r"(dst_ptr), // %1
408
+ "+r"(dst_width) // %2
409
+ :
410
+ : "memory", "cc", "xmm0", "xmm1", "xmm5");
411
+ }
412
+
413
+ void ScaleRowDown4Box_AVX2(const uint8_t* src_ptr,
414
+ ptrdiff_t src_stride,
415
+ uint8_t* dst_ptr,
416
+ int dst_width) {
417
+ asm volatile(
418
+ "vpcmpeqb %%ymm4,%%ymm4,%%ymm4 \n"
419
+ "vpabsw %%ymm4,%%ymm5 \n"
420
+ "vpabsb %%ymm4,%%ymm4 \n" // 0x0101
421
+ "vpsllw $0x3,%%ymm5,%%ymm5 \n" // 0x0008
422
+
423
+ LABELALIGN
424
+ "1: \n"
425
+ "vmovdqu (%0),%%ymm0 \n"
426
+ "vmovdqu 0x20(%0),%%ymm1 \n"
427
+ "vmovdqu 0x00(%0,%3,1),%%ymm2 \n"
428
+ "vmovdqu 0x20(%0,%3,1),%%ymm3 \n"
429
+ "vpmaddubsw %%ymm4,%%ymm0,%%ymm0 \n"
430
+ "vpmaddubsw %%ymm4,%%ymm1,%%ymm1 \n"
431
+ "vpmaddubsw %%ymm4,%%ymm2,%%ymm2 \n"
432
+ "vpmaddubsw %%ymm4,%%ymm3,%%ymm3 \n"
433
+ "vpaddw %%ymm2,%%ymm0,%%ymm0 \n"
434
+ "vpaddw %%ymm3,%%ymm1,%%ymm1 \n"
435
+ "vmovdqu 0x00(%0,%3,2),%%ymm2 \n"
436
+ "vmovdqu 0x20(%0,%3,2),%%ymm3 \n"
437
+ "vpmaddubsw %%ymm4,%%ymm2,%%ymm2 \n"
438
+ "vpmaddubsw %%ymm4,%%ymm3,%%ymm3 \n"
439
+ "vpaddw %%ymm2,%%ymm0,%%ymm0 \n"
440
+ "vpaddw %%ymm3,%%ymm1,%%ymm1 \n"
441
+ "vmovdqu 0x00(%0,%4,1),%%ymm2 \n"
442
+ "vmovdqu 0x20(%0,%4,1),%%ymm3 \n"
443
+ "lea 0x40(%0),%0 \n"
444
+ "vpmaddubsw %%ymm4,%%ymm2,%%ymm2 \n"
445
+ "vpmaddubsw %%ymm4,%%ymm3,%%ymm3 \n"
446
+ "vpaddw %%ymm2,%%ymm0,%%ymm0 \n"
447
+ "vpaddw %%ymm3,%%ymm1,%%ymm1 \n"
448
+ "vphaddw %%ymm1,%%ymm0,%%ymm0 \n"
449
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n"
450
+ "vpaddw %%ymm5,%%ymm0,%%ymm0 \n"
451
+ "vpsrlw $0x4,%%ymm0,%%ymm0 \n"
452
+ "vpackuswb %%ymm0,%%ymm0,%%ymm0 \n"
453
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n"
454
+ "vmovdqu %%xmm0,(%1) \n"
455
+ "lea 0x10(%1),%1 \n"
456
+ "sub $0x10,%2 \n"
457
+ "jg 1b \n"
458
+ "vzeroupper \n"
459
+ : "+r"(src_ptr), // %0
460
+ "+r"(dst_ptr), // %1
461
+ "+r"(dst_width) // %2
462
+ : "r"((intptr_t)(src_stride)), // %3
463
+ "r"((intptr_t)(src_stride * 3)) // %4
464
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
465
+ }
466
+ #endif // HAS_SCALEROWDOWN4_AVX2
467
+
468
+ void ScaleRowDown34_SSSE3(const uint8_t* src_ptr,
469
+ ptrdiff_t src_stride,
470
+ uint8_t* dst_ptr,
471
+ int dst_width) {
472
+ (void)src_stride;
473
+ asm volatile(
474
+ "movdqa %0,%%xmm3 \n"
475
+ "movdqa %1,%%xmm4 \n"
476
+ "movdqa %2,%%xmm5 \n"
477
+ :
478
+ : "m"(kShuf0), // %0
479
+ "m"(kShuf1), // %1
480
+ "m"(kShuf2) // %2
481
+ );
482
+ asm volatile(
483
+ "1: \n"
484
+ "movdqu (%0),%%xmm0 \n"
485
+ "movdqu 0x10(%0),%%xmm2 \n"
486
+ "lea 0x20(%0),%0 \n"
487
+ "movdqa %%xmm2,%%xmm1 \n"
488
+ "palignr $0x8,%%xmm0,%%xmm1 \n"
489
+ "pshufb %%xmm3,%%xmm0 \n"
490
+ "pshufb %%xmm4,%%xmm1 \n"
491
+ "pshufb %%xmm5,%%xmm2 \n"
492
+ "movq %%xmm0,(%1) \n"
493
+ "movq %%xmm1,0x8(%1) \n"
494
+ "movq %%xmm2,0x10(%1) \n"
495
+ "lea 0x18(%1),%1 \n"
496
+ "sub $0x18,%2 \n"
497
+ "jg 1b \n"
498
+ : "+r"(src_ptr), // %0
499
+ "+r"(dst_ptr), // %1
500
+ "+r"(dst_width) // %2
501
+ :
502
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
503
+ }
504
+
505
+ void ScaleRowDown34_1_Box_SSSE3(const uint8_t* src_ptr,
506
+ ptrdiff_t src_stride,
507
+ uint8_t* dst_ptr,
508
+ int dst_width) {
509
+ asm volatile(
510
+ "movdqa %0,%%xmm2 \n" // kShuf01
511
+ "movdqa %1,%%xmm3 \n" // kShuf11
512
+ "movdqa %2,%%xmm4 \n" // kShuf21
513
+ :
514
+ : "m"(kShuf01), // %0
515
+ "m"(kShuf11), // %1
516
+ "m"(kShuf21) // %2
517
+ );
518
+ asm volatile(
519
+ "movdqa %0,%%xmm5 \n" // kMadd01
520
+ "movdqa %1,%%xmm0 \n" // kMadd11
521
+ "movdqa %2,%%xmm1 \n" // kRound34
522
+ :
523
+ : "m"(kMadd01), // %0
524
+ "m"(kMadd11), // %1
525
+ "m"(kRound34) // %2
526
+ );
527
+ asm volatile(
528
+ "1: \n"
529
+ "movdqu (%0),%%xmm6 \n"
530
+ "movdqu 0x00(%0,%3,1),%%xmm7 \n"
531
+ "pavgb %%xmm7,%%xmm6 \n"
532
+ "pshufb %%xmm2,%%xmm6 \n"
533
+ "pmaddubsw %%xmm5,%%xmm6 \n"
534
+ "paddsw %%xmm1,%%xmm6 \n"
535
+ "psrlw $0x2,%%xmm6 \n"
536
+ "packuswb %%xmm6,%%xmm6 \n"
537
+ "movq %%xmm6,(%1) \n"
538
+ "movdqu 0x8(%0),%%xmm6 \n"
539
+ "movdqu 0x8(%0,%3,1),%%xmm7 \n"
540
+ "pavgb %%xmm7,%%xmm6 \n"
541
+ "pshufb %%xmm3,%%xmm6 \n"
542
+ "pmaddubsw %%xmm0,%%xmm6 \n"
543
+ "paddsw %%xmm1,%%xmm6 \n"
544
+ "psrlw $0x2,%%xmm6 \n"
545
+ "packuswb %%xmm6,%%xmm6 \n"
546
+ "movq %%xmm6,0x8(%1) \n"
547
+ "movdqu 0x10(%0),%%xmm6 \n"
548
+ "movdqu 0x10(%0,%3,1),%%xmm7 \n"
549
+ "lea 0x20(%0),%0 \n"
550
+ "pavgb %%xmm7,%%xmm6 \n"
551
+ "pshufb %%xmm4,%%xmm6 \n"
552
+ "pmaddubsw %4,%%xmm6 \n"
553
+ "paddsw %%xmm1,%%xmm6 \n"
554
+ "psrlw $0x2,%%xmm6 \n"
555
+ "packuswb %%xmm6,%%xmm6 \n"
556
+ "movq %%xmm6,0x10(%1) \n"
557
+ "lea 0x18(%1),%1 \n"
558
+ "sub $0x18,%2 \n"
559
+ "jg 1b \n"
560
+ : "+r"(src_ptr), // %0
561
+ "+r"(dst_ptr), // %1
562
+ "+r"(dst_width) // %2
563
+ : "r"((intptr_t)(src_stride)), // %3
564
+ "m"(kMadd21) // %4
565
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
566
+ "xmm7");
567
+ }
568
+
569
+ void ScaleRowDown34_0_Box_SSSE3(const uint8_t* src_ptr,
570
+ ptrdiff_t src_stride,
571
+ uint8_t* dst_ptr,
572
+ int dst_width) {
573
+ asm volatile(
574
+ "movdqa %0,%%xmm2 \n" // kShuf01
575
+ "movdqa %1,%%xmm3 \n" // kShuf11
576
+ "movdqa %2,%%xmm4 \n" // kShuf21
577
+ :
578
+ : "m"(kShuf01), // %0
579
+ "m"(kShuf11), // %1
580
+ "m"(kShuf21) // %2
581
+ );
582
+ asm volatile(
583
+ "movdqa %0,%%xmm5 \n" // kMadd01
584
+ "movdqa %1,%%xmm0 \n" // kMadd11
585
+ "movdqa %2,%%xmm1 \n" // kRound34
586
+ :
587
+ : "m"(kMadd01), // %0
588
+ "m"(kMadd11), // %1
589
+ "m"(kRound34) // %2
590
+ );
591
+
592
+ asm volatile(
593
+ "1: \n"
594
+ "movdqu (%0),%%xmm6 \n"
595
+ "movdqu 0x00(%0,%3,1),%%xmm7 \n"
596
+ "pavgb %%xmm6,%%xmm7 \n"
597
+ "pavgb %%xmm7,%%xmm6 \n"
598
+ "pshufb %%xmm2,%%xmm6 \n"
599
+ "pmaddubsw %%xmm5,%%xmm6 \n"
600
+ "paddsw %%xmm1,%%xmm6 \n"
601
+ "psrlw $0x2,%%xmm6 \n"
602
+ "packuswb %%xmm6,%%xmm6 \n"
603
+ "movq %%xmm6,(%1) \n"
604
+ "movdqu 0x8(%0),%%xmm6 \n"
605
+ "movdqu 0x8(%0,%3,1),%%xmm7 \n"
606
+ "pavgb %%xmm6,%%xmm7 \n"
607
+ "pavgb %%xmm7,%%xmm6 \n"
608
+ "pshufb %%xmm3,%%xmm6 \n"
609
+ "pmaddubsw %%xmm0,%%xmm6 \n"
610
+ "paddsw %%xmm1,%%xmm6 \n"
611
+ "psrlw $0x2,%%xmm6 \n"
612
+ "packuswb %%xmm6,%%xmm6 \n"
613
+ "movq %%xmm6,0x8(%1) \n"
614
+ "movdqu 0x10(%0),%%xmm6 \n"
615
+ "movdqu 0x10(%0,%3,1),%%xmm7 \n"
616
+ "lea 0x20(%0),%0 \n"
617
+ "pavgb %%xmm6,%%xmm7 \n"
618
+ "pavgb %%xmm7,%%xmm6 \n"
619
+ "pshufb %%xmm4,%%xmm6 \n"
620
+ "pmaddubsw %4,%%xmm6 \n"
621
+ "paddsw %%xmm1,%%xmm6 \n"
622
+ "psrlw $0x2,%%xmm6 \n"
623
+ "packuswb %%xmm6,%%xmm6 \n"
624
+ "movq %%xmm6,0x10(%1) \n"
625
+ "lea 0x18(%1),%1 \n"
626
+ "sub $0x18,%2 \n"
627
+ "jg 1b \n"
628
+ : "+r"(src_ptr), // %0
629
+ "+r"(dst_ptr), // %1
630
+ "+r"(dst_width) // %2
631
+ : "r"((intptr_t)(src_stride)), // %3
632
+ "m"(kMadd21) // %4
633
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
634
+ "xmm7");
635
+ }
636
+
637
+ void ScaleRowDown38_SSSE3(const uint8_t* src_ptr,
638
+ ptrdiff_t src_stride,
639
+ uint8_t* dst_ptr,
640
+ int dst_width) {
641
+ (void)src_stride;
642
+ asm volatile(
643
+ "movdqa %3,%%xmm4 \n"
644
+ "movdqa %4,%%xmm5 \n"
645
+
646
+ LABELALIGN
647
+ "1: \n"
648
+ "movdqu (%0),%%xmm0 \n"
649
+ "movdqu 0x10(%0),%%xmm1 \n"
650
+ "lea 0x20(%0),%0 \n"
651
+ "pshufb %%xmm4,%%xmm0 \n"
652
+ "pshufb %%xmm5,%%xmm1 \n"
653
+ "paddusb %%xmm1,%%xmm0 \n"
654
+ "movq %%xmm0,(%1) \n"
655
+ "movhlps %%xmm0,%%xmm1 \n"
656
+ "movd %%xmm1,0x8(%1) \n"
657
+ "lea 0xc(%1),%1 \n"
658
+ "sub $0xc,%2 \n"
659
+ "jg 1b \n"
660
+ : "+r"(src_ptr), // %0
661
+ "+r"(dst_ptr), // %1
662
+ "+r"(dst_width) // %2
663
+ : "m"(kShuf38a), // %3
664
+ "m"(kShuf38b) // %4
665
+ : "memory", "cc", "xmm0", "xmm1", "xmm4", "xmm5");
666
+ }
667
+
668
+ void ScaleRowDown38_2_Box_SSSE3(const uint8_t* src_ptr,
669
+ ptrdiff_t src_stride,
670
+ uint8_t* dst_ptr,
671
+ int dst_width) {
672
+ asm volatile(
673
+ "movdqa %0,%%xmm2 \n"
674
+ "movdqa %1,%%xmm3 \n"
675
+ "movdqa %2,%%xmm4 \n"
676
+ "movdqa %3,%%xmm5 \n"
677
+ :
678
+ : "m"(kShufAb0), // %0
679
+ "m"(kShufAb1), // %1
680
+ "m"(kShufAb2), // %2
681
+ "m"(kScaleAb2) // %3
682
+ );
683
+ asm volatile(
684
+ "1: \n"
685
+ "movdqu (%0),%%xmm0 \n"
686
+ "movdqu 0x00(%0,%3,1),%%xmm1 \n"
687
+ "lea 0x10(%0),%0 \n"
688
+ "pavgb %%xmm1,%%xmm0 \n"
689
+ "movdqa %%xmm0,%%xmm1 \n"
690
+ "pshufb %%xmm2,%%xmm1 \n"
691
+ "movdqa %%xmm0,%%xmm6 \n"
692
+ "pshufb %%xmm3,%%xmm6 \n"
693
+ "paddusw %%xmm6,%%xmm1 \n"
694
+ "pshufb %%xmm4,%%xmm0 \n"
695
+ "paddusw %%xmm0,%%xmm1 \n"
696
+ "pmulhuw %%xmm5,%%xmm1 \n"
697
+ "packuswb %%xmm1,%%xmm1 \n"
698
+ "movd %%xmm1,(%1) \n"
699
+ "psrlq $0x10,%%xmm1 \n"
700
+ "movd %%xmm1,0x2(%1) \n"
701
+ "lea 0x6(%1),%1 \n"
702
+ "sub $0x6,%2 \n"
703
+ "jg 1b \n"
704
+ : "+r"(src_ptr), // %0
705
+ "+r"(dst_ptr), // %1
706
+ "+r"(dst_width) // %2
707
+ : "r"((intptr_t)(src_stride)) // %3
708
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6");
709
+ }
710
+
711
+ void ScaleRowDown38_3_Box_SSSE3(const uint8_t* src_ptr,
712
+ ptrdiff_t src_stride,
713
+ uint8_t* dst_ptr,
714
+ int dst_width) {
715
+ asm volatile(
716
+ "movdqa %0,%%xmm2 \n"
717
+ "movdqa %1,%%xmm3 \n"
718
+ "movdqa %2,%%xmm4 \n"
719
+ "pxor %%xmm5,%%xmm5 \n"
720
+ :
721
+ : "m"(kShufAc), // %0
722
+ "m"(kShufAc3), // %1
723
+ "m"(kScaleAc33) // %2
724
+ );
725
+ asm volatile(
726
+ "1: \n"
727
+ "movdqu (%0),%%xmm0 \n"
728
+ "movdqu 0x00(%0,%3,1),%%xmm6 \n"
729
+ "movhlps %%xmm0,%%xmm1 \n"
730
+ "movhlps %%xmm6,%%xmm7 \n"
731
+ "punpcklbw %%xmm5,%%xmm0 \n"
732
+ "punpcklbw %%xmm5,%%xmm1 \n"
733
+ "punpcklbw %%xmm5,%%xmm6 \n"
734
+ "punpcklbw %%xmm5,%%xmm7 \n"
735
+ "paddusw %%xmm6,%%xmm0 \n"
736
+ "paddusw %%xmm7,%%xmm1 \n"
737
+ "movdqu 0x00(%0,%3,2),%%xmm6 \n"
738
+ "lea 0x10(%0),%0 \n"
739
+ "movhlps %%xmm6,%%xmm7 \n"
740
+ "punpcklbw %%xmm5,%%xmm6 \n"
741
+ "punpcklbw %%xmm5,%%xmm7 \n"
742
+ "paddusw %%xmm6,%%xmm0 \n"
743
+ "paddusw %%xmm7,%%xmm1 \n"
744
+ "movdqa %%xmm0,%%xmm6 \n"
745
+ "psrldq $0x2,%%xmm0 \n"
746
+ "paddusw %%xmm0,%%xmm6 \n"
747
+ "psrldq $0x2,%%xmm0 \n"
748
+ "paddusw %%xmm0,%%xmm6 \n"
749
+ "pshufb %%xmm2,%%xmm6 \n"
750
+ "movdqa %%xmm1,%%xmm7 \n"
751
+ "psrldq $0x2,%%xmm1 \n"
752
+ "paddusw %%xmm1,%%xmm7 \n"
753
+ "psrldq $0x2,%%xmm1 \n"
754
+ "paddusw %%xmm1,%%xmm7 \n"
755
+ "pshufb %%xmm3,%%xmm7 \n"
756
+ "paddusw %%xmm7,%%xmm6 \n"
757
+ "pmulhuw %%xmm4,%%xmm6 \n"
758
+ "packuswb %%xmm6,%%xmm6 \n"
759
+ "movd %%xmm6,(%1) \n"
760
+ "psrlq $0x10,%%xmm6 \n"
761
+ "movd %%xmm6,0x2(%1) \n"
762
+ "lea 0x6(%1),%1 \n"
763
+ "sub $0x6,%2 \n"
764
+ "jg 1b \n"
765
+ : "+r"(src_ptr), // %0
766
+ "+r"(dst_ptr), // %1
767
+ "+r"(dst_width) // %2
768
+ : "r"((intptr_t)(src_stride)) // %3
769
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
770
+ "xmm7");
771
+ }
772
+
773
+ static const uvec8 kLinearShuffleFar = {2, 3, 0, 1, 6, 7, 4, 5,
774
+ 10, 11, 8, 9, 14, 15, 12, 13};
775
+
776
+ static const uvec8 kLinearMadd31 = {3, 1, 1, 3, 3, 1, 1, 3,
777
+ 3, 1, 1, 3, 3, 1, 1, 3};
778
+
779
+ #ifdef HAS_SCALEROWUP2_LINEAR_SSE2
780
+ void ScaleRowUp2_Linear_SSE2(const uint8_t* src_ptr,
781
+ uint8_t* dst_ptr,
782
+ int dst_width) {
783
+ asm volatile(
784
+ "pxor %%xmm0,%%xmm0 \n" // 0
785
+ "pcmpeqw %%xmm6,%%xmm6 \n"
786
+ "psrlw $15,%%xmm6 \n"
787
+ "psllw $1,%%xmm6 \n" // all 2
788
+
789
+ LABELALIGN
790
+ "1: \n"
791
+ "movq (%0),%%xmm1 \n" // 01234567
792
+ "movq 1(%0),%%xmm2 \n" // 12345678
793
+ "movdqa %%xmm1,%%xmm3 \n"
794
+ "punpcklbw %%xmm2,%%xmm3 \n" // 0112233445566778
795
+ "punpcklbw %%xmm1,%%xmm1 \n" // 0011223344556677
796
+ "punpcklbw %%xmm2,%%xmm2 \n" // 1122334455667788
797
+ "movdqa %%xmm1,%%xmm4 \n"
798
+ "punpcklbw %%xmm0,%%xmm4 \n" // 00112233 (16)
799
+ "movdqa %%xmm2,%%xmm5 \n"
800
+ "punpcklbw %%xmm0,%%xmm5 \n" // 11223344 (16)
801
+ "paddw %%xmm5,%%xmm4 \n"
802
+ "movdqa %%xmm3,%%xmm5 \n"
803
+ "paddw %%xmm6,%%xmm4 \n"
804
+ "punpcklbw %%xmm0,%%xmm5 \n" // 01122334 (16)
805
+ "paddw %%xmm5,%%xmm5 \n"
806
+ "paddw %%xmm4,%%xmm5 \n" // 3*near+far+2 (lo)
807
+ "psrlw $2,%%xmm5 \n" // 3/4*near+1/4*far (lo)
808
+
809
+ "punpckhbw %%xmm0,%%xmm1 \n" // 44556677 (16)
810
+ "punpckhbw %%xmm0,%%xmm2 \n" // 55667788 (16)
811
+ "paddw %%xmm2,%%xmm1 \n"
812
+ "punpckhbw %%xmm0,%%xmm3 \n" // 45566778 (16)
813
+ "paddw %%xmm6,%%xmm1 \n"
814
+ "paddw %%xmm3,%%xmm3 \n"
815
+ "paddw %%xmm3,%%xmm1 \n" // 3*near+far+2 (hi)
816
+ "psrlw $2,%%xmm1 \n" // 3/4*near+1/4*far (hi)
817
+
818
+ "packuswb %%xmm1,%%xmm5 \n"
819
+ "movdqu %%xmm5,(%1) \n"
820
+
821
+ "lea 0x8(%0),%0 \n"
822
+ "lea 0x10(%1),%1 \n" // 8 sample to 16 sample
823
+ "sub $0x10,%2 \n"
824
+ "jg 1b \n"
825
+ : "+r"(src_ptr), // %0
826
+ "+r"(dst_ptr), // %1
827
+ "+r"(dst_width) // %2
828
+ :
829
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6");
830
+ }
831
+ #endif
832
+
833
+ #ifdef HAS_SCALEROWUP2_BILINEAR_SSE2
834
+ void ScaleRowUp2_Bilinear_SSE2(const uint8_t* src_ptr,
835
+ ptrdiff_t src_stride,
836
+ uint8_t* dst_ptr,
837
+ ptrdiff_t dst_stride,
838
+ int dst_width) {
839
+ asm volatile(
840
+ "1: \n"
841
+ "pxor %%xmm0,%%xmm0 \n" // 0
842
+ // above line
843
+ "movq (%0),%%xmm1 \n" // 01234567
844
+ "movq 1(%0),%%xmm2 \n" // 12345678
845
+ "movdqa %%xmm1,%%xmm3 \n"
846
+ "punpcklbw %%xmm2,%%xmm3 \n" // 0112233445566778
847
+ "punpcklbw %%xmm1,%%xmm1 \n" // 0011223344556677
848
+ "punpcklbw %%xmm2,%%xmm2 \n" // 1122334455667788
849
+
850
+ "movdqa %%xmm1,%%xmm4 \n"
851
+ "punpcklbw %%xmm0,%%xmm4 \n" // 00112233 (16)
852
+ "movdqa %%xmm2,%%xmm5 \n"
853
+ "punpcklbw %%xmm0,%%xmm5 \n" // 11223344 (16)
854
+ "paddw %%xmm5,%%xmm4 \n" // near+far
855
+ "movdqa %%xmm3,%%xmm5 \n"
856
+ "punpcklbw %%xmm0,%%xmm5 \n" // 01122334 (16)
857
+ "paddw %%xmm5,%%xmm5 \n" // 2*near
858
+ "paddw %%xmm5,%%xmm4 \n" // 3*near+far (1, lo)
859
+
860
+ "punpckhbw %%xmm0,%%xmm1 \n" // 44556677 (16)
861
+ "punpckhbw %%xmm0,%%xmm2 \n" // 55667788 (16)
862
+ "paddw %%xmm2,%%xmm1 \n"
863
+ "punpckhbw %%xmm0,%%xmm3 \n" // 45566778 (16)
864
+ "paddw %%xmm3,%%xmm3 \n" // 2*near
865
+ "paddw %%xmm3,%%xmm1 \n" // 3*near+far (1, hi)
866
+
867
+ // below line
868
+ "movq (%0,%3),%%xmm6 \n" // 01234567
869
+ "movq 1(%0,%3),%%xmm2 \n" // 12345678
870
+ "movdqa %%xmm6,%%xmm3 \n"
871
+ "punpcklbw %%xmm2,%%xmm3 \n" // 0112233445566778
872
+ "punpcklbw %%xmm6,%%xmm6 \n" // 0011223344556677
873
+ "punpcklbw %%xmm2,%%xmm2 \n" // 1122334455667788
874
+
875
+ "movdqa %%xmm6,%%xmm5 \n"
876
+ "punpcklbw %%xmm0,%%xmm5 \n" // 00112233 (16)
877
+ "movdqa %%xmm2,%%xmm7 \n"
878
+ "punpcklbw %%xmm0,%%xmm7 \n" // 11223344 (16)
879
+ "paddw %%xmm7,%%xmm5 \n" // near+far
880
+ "movdqa %%xmm3,%%xmm7 \n"
881
+ "punpcklbw %%xmm0,%%xmm7 \n" // 01122334 (16)
882
+ "paddw %%xmm7,%%xmm7 \n" // 2*near
883
+ "paddw %%xmm7,%%xmm5 \n" // 3*near+far (2, lo)
884
+
885
+ "punpckhbw %%xmm0,%%xmm6 \n" // 44556677 (16)
886
+ "punpckhbw %%xmm0,%%xmm2 \n" // 55667788 (16)
887
+ "paddw %%xmm6,%%xmm2 \n" // near+far
888
+ "punpckhbw %%xmm0,%%xmm3 \n" // 45566778 (16)
889
+ "paddw %%xmm3,%%xmm3 \n" // 2*near
890
+ "paddw %%xmm3,%%xmm2 \n" // 3*near+far (2, hi)
891
+
892
+ // xmm4 xmm1
893
+ // xmm5 xmm2
894
+ "pcmpeqw %%xmm0,%%xmm0 \n"
895
+ "psrlw $15,%%xmm0 \n"
896
+ "psllw $3,%%xmm0 \n" // all 8
897
+
898
+ "movdqa %%xmm4,%%xmm3 \n"
899
+ "movdqa %%xmm5,%%xmm6 \n"
900
+ "paddw %%xmm3,%%xmm3 \n" // 6*near+2*far (1, lo)
901
+ "paddw %%xmm0,%%xmm6 \n" // 3*near+far+8 (2, lo)
902
+ "paddw %%xmm4,%%xmm3 \n" // 9*near+3*far (1, lo)
903
+ "paddw %%xmm6,%%xmm3 \n" // 9 3 3 1 + 8 (1, lo)
904
+ "psrlw $4,%%xmm3 \n" // ^ div by 16
905
+
906
+ "movdqa %%xmm1,%%xmm7 \n"
907
+ "movdqa %%xmm2,%%xmm6 \n"
908
+ "paddw %%xmm7,%%xmm7 \n" // 6*near+2*far (1, hi)
909
+ "paddw %%xmm0,%%xmm6 \n" // 3*near+far+8 (2, hi)
910
+ "paddw %%xmm1,%%xmm7 \n" // 9*near+3*far (1, hi)
911
+ "paddw %%xmm6,%%xmm7 \n" // 9 3 3 1 + 8 (1, hi)
912
+ "psrlw $4,%%xmm7 \n" // ^ div by 16
913
+
914
+ "packuswb %%xmm7,%%xmm3 \n"
915
+ "movdqu %%xmm3,(%1) \n" // save above line
916
+
917
+ "movdqa %%xmm5,%%xmm3 \n"
918
+ "paddw %%xmm0,%%xmm4 \n" // 3*near+far+8 (1, lo)
919
+ "paddw %%xmm3,%%xmm3 \n" // 6*near+2*far (2, lo)
920
+ "paddw %%xmm3,%%xmm5 \n" // 9*near+3*far (2, lo)
921
+ "paddw %%xmm4,%%xmm5 \n" // 9 3 3 1 + 8 (lo)
922
+ "psrlw $4,%%xmm5 \n" // ^ div by 16
923
+
924
+ "movdqa %%xmm2,%%xmm3 \n"
925
+ "paddw %%xmm0,%%xmm1 \n" // 3*near+far+8 (1, hi)
926
+ "paddw %%xmm3,%%xmm3 \n" // 6*near+2*far (2, hi)
927
+ "paddw %%xmm3,%%xmm2 \n" // 9*near+3*far (2, hi)
928
+ "paddw %%xmm1,%%xmm2 \n" // 9 3 3 1 + 8 (hi)
929
+ "psrlw $4,%%xmm2 \n" // ^ div by 16
930
+
931
+ "packuswb %%xmm2,%%xmm5 \n"
932
+ "movdqu %%xmm5,(%1,%4) \n" // save below line
933
+
934
+ "lea 0x8(%0),%0 \n"
935
+ "lea 0x10(%1),%1 \n" // 8 sample to 16 sample
936
+ "sub $0x10,%2 \n"
937
+ "jg 1b \n"
938
+ : "+r"(src_ptr), // %0
939
+ "+r"(dst_ptr), // %1
940
+ "+r"(dst_width) // %2
941
+ : "r"((intptr_t)(src_stride)), // %3
942
+ "r"((intptr_t)(dst_stride)) // %4
943
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
944
+ "xmm7");
945
+ }
946
+ #endif
947
+
948
+ #ifdef HAS_SCALEROWUP2_LINEAR_12_SSSE3
949
+ void ScaleRowUp2_Linear_12_SSSE3(const uint16_t* src_ptr,
950
+ uint16_t* dst_ptr,
951
+ int dst_width) {
952
+ asm volatile(
953
+ "movdqa %3,%%xmm5 \n"
954
+ "pcmpeqw %%xmm4,%%xmm4 \n"
955
+ "psrlw $15,%%xmm4 \n"
956
+ "psllw $1,%%xmm4 \n" // all 2
957
+
958
+ LABELALIGN
959
+ "1: \n"
960
+ "movdqu (%0),%%xmm0 \n" // 01234567 (16)
961
+ "movdqu 2(%0),%%xmm1 \n" // 12345678 (16)
962
+
963
+ "movdqa %%xmm0,%%xmm2 \n"
964
+ "punpckhwd %%xmm1,%%xmm2 \n" // 45566778 (16)
965
+ "punpcklwd %%xmm1,%%xmm0 \n" // 01122334 (16)
966
+
967
+ "movdqa %%xmm2,%%xmm3 \n"
968
+ "movdqa %%xmm0,%%xmm1 \n"
969
+ "pshufb %%xmm5,%%xmm3 \n" // 54657687 (far)
970
+ "pshufb %%xmm5,%%xmm1 \n" // 10213243 (far)
971
+
972
+ "paddw %%xmm4,%%xmm1 \n" // far+2
973
+ "paddw %%xmm4,%%xmm3 \n" // far+2
974
+ "paddw %%xmm0,%%xmm1 \n" // near+far+2
975
+ "paddw %%xmm2,%%xmm3 \n" // near+far+2
976
+ "paddw %%xmm0,%%xmm0 \n" // 2*near
977
+ "paddw %%xmm2,%%xmm2 \n" // 2*near
978
+ "paddw %%xmm1,%%xmm0 \n" // 3*near+far+2 (lo)
979
+ "paddw %%xmm3,%%xmm2 \n" // 3*near+far+2 (hi)
980
+
981
+ "psrlw $2,%%xmm0 \n" // 3/4*near+1/4*far
982
+ "psrlw $2,%%xmm2 \n" // 3/4*near+1/4*far
983
+ "movdqu %%xmm0,(%1) \n"
984
+ "movdqu %%xmm2,16(%1) \n"
985
+
986
+ "lea 0x10(%0),%0 \n"
987
+ "lea 0x20(%1),%1 \n" // 8 sample to 16 sample
988
+ "sub $0x10,%2 \n"
989
+ "jg 1b \n"
990
+ : "+r"(src_ptr), // %0
991
+ "+r"(dst_ptr), // %1
992
+ "+r"(dst_width) // %2
993
+ : "m"(kLinearShuffleFar) // %3
994
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
995
+ }
996
+ #endif
997
+
998
+ #ifdef HAS_SCALEROWUP2_BILINEAR_12_SSSE3
999
+ void ScaleRowUp2_Bilinear_12_SSSE3(const uint16_t* src_ptr,
1000
+ ptrdiff_t src_stride,
1001
+ uint16_t* dst_ptr,
1002
+ ptrdiff_t dst_stride,
1003
+ int dst_width) {
1004
+ asm volatile(
1005
+ "pcmpeqw %%xmm7,%%xmm7 \n"
1006
+ "psrlw $15,%%xmm7 \n"
1007
+ "psllw $3,%%xmm7 \n" // all 8
1008
+ "movdqa %5,%%xmm6 \n"
1009
+
1010
+ LABELALIGN
1011
+ "1: \n"
1012
+ // above line
1013
+ "movdqu (%0),%%xmm0 \n" // 01234567 (16)
1014
+ "movdqu 2(%0),%%xmm1 \n" // 12345678 (16)
1015
+ "movdqa %%xmm0,%%xmm2 \n"
1016
+ "punpckhwd %%xmm1,%%xmm2 \n" // 45566778 (16)
1017
+ "punpcklwd %%xmm1,%%xmm0 \n" // 01122334 (16)
1018
+ "movdqa %%xmm2,%%xmm3 \n"
1019
+ "movdqa %%xmm0,%%xmm1 \n"
1020
+ "pshufb %%xmm6,%%xmm3 \n" // 54657687 (far)
1021
+ "pshufb %%xmm6,%%xmm1 \n" // 10213243 (far)
1022
+ "paddw %%xmm0,%%xmm1 \n" // near+far
1023
+ "paddw %%xmm2,%%xmm3 \n" // near+far
1024
+ "paddw %%xmm0,%%xmm0 \n" // 2*near
1025
+ "paddw %%xmm2,%%xmm2 \n" // 2*near
1026
+ "paddw %%xmm1,%%xmm0 \n" // 3*near+far (1, lo)
1027
+ "paddw %%xmm3,%%xmm2 \n" // 3*near+far (1, hi)
1028
+
1029
+ // below line
1030
+ "movdqu (%0,%3,2),%%xmm1 \n" // 01234567 (16)
1031
+ "movdqu 2(%0,%3,2),%%xmm4 \n" // 12345678 (16)
1032
+ "movdqa %%xmm1,%%xmm3 \n"
1033
+ "punpckhwd %%xmm4,%%xmm3 \n" // 45566778 (16)
1034
+ "punpcklwd %%xmm4,%%xmm1 \n" // 01122334 (16)
1035
+ "movdqa %%xmm3,%%xmm5 \n"
1036
+ "movdqa %%xmm1,%%xmm4 \n"
1037
+ "pshufb %%xmm6,%%xmm5 \n" // 54657687 (far)
1038
+ "pshufb %%xmm6,%%xmm4 \n" // 10213243 (far)
1039
+ "paddw %%xmm1,%%xmm4 \n" // near+far
1040
+ "paddw %%xmm3,%%xmm5 \n" // near+far
1041
+ "paddw %%xmm1,%%xmm1 \n" // 2*near
1042
+ "paddw %%xmm3,%%xmm3 \n" // 2*near
1043
+ "paddw %%xmm4,%%xmm1 \n" // 3*near+far (2, lo)
1044
+ "paddw %%xmm5,%%xmm3 \n" // 3*near+far (2, hi)
1045
+
1046
+ // xmm0 xmm2
1047
+ // xmm1 xmm3
1048
+
1049
+ "movdqa %%xmm0,%%xmm4 \n"
1050
+ "movdqa %%xmm1,%%xmm5 \n"
1051
+ "paddw %%xmm4,%%xmm4 \n" // 6*near+2*far (1, lo)
1052
+ "paddw %%xmm7,%%xmm5 \n" // 3*near+far+8 (2, lo)
1053
+ "paddw %%xmm0,%%xmm4 \n" // 9*near+3*far (1, lo)
1054
+ "paddw %%xmm5,%%xmm4 \n" // 9 3 3 1 + 8 (1, lo)
1055
+ "psrlw $4,%%xmm4 \n" // ^ div by 16
1056
+ "movdqu %%xmm4,(%1) \n"
1057
+
1058
+ "movdqa %%xmm2,%%xmm4 \n"
1059
+ "movdqa %%xmm3,%%xmm5 \n"
1060
+ "paddw %%xmm4,%%xmm4 \n" // 6*near+2*far (1, hi)
1061
+ "paddw %%xmm7,%%xmm5 \n" // 3*near+far+8 (2, hi)
1062
+ "paddw %%xmm2,%%xmm4 \n" // 9*near+3*far (1, hi)
1063
+ "paddw %%xmm5,%%xmm4 \n" // 9 3 3 1 + 8 (1, hi)
1064
+ "psrlw $4,%%xmm4 \n" // ^ div by 16
1065
+ "movdqu %%xmm4,0x10(%1) \n"
1066
+
1067
+ "movdqa %%xmm1,%%xmm4 \n"
1068
+ "paddw %%xmm7,%%xmm0 \n" // 3*near+far+8 (1, lo)
1069
+ "paddw %%xmm4,%%xmm4 \n" // 6*near+2*far (2, lo)
1070
+ "paddw %%xmm4,%%xmm1 \n" // 9*near+3*far (2, lo)
1071
+ "paddw %%xmm0,%%xmm1 \n" // 9 3 3 1 + 8 (2, lo)
1072
+ "psrlw $4,%%xmm1 \n" // ^ div by 16
1073
+ "movdqu %%xmm1,(%1,%4,2) \n"
1074
+
1075
+ "movdqa %%xmm3,%%xmm4 \n"
1076
+ "paddw %%xmm7,%%xmm2 \n" // 3*near+far+8 (1, hi)
1077
+ "paddw %%xmm4,%%xmm4 \n" // 6*near+2*far (2, hi)
1078
+ "paddw %%xmm4,%%xmm3 \n" // 9*near+3*far (2, hi)
1079
+ "paddw %%xmm2,%%xmm3 \n" // 9 3 3 1 + 8 (2, hi)
1080
+ "psrlw $4,%%xmm3 \n" // ^ div by 16
1081
+ "movdqu %%xmm3,0x10(%1,%4,2) \n"
1082
+
1083
+ "lea 0x10(%0),%0 \n"
1084
+ "lea 0x20(%1),%1 \n" // 8 sample to 16 sample
1085
+ "sub $0x10,%2 \n"
1086
+ "jg 1b \n"
1087
+ : "+r"(src_ptr), // %0
1088
+ "+r"(dst_ptr), // %1
1089
+ "+r"(dst_width) // %2
1090
+ : "r"((intptr_t)(src_stride)), // %3
1091
+ "r"((intptr_t)(dst_stride)), // %4
1092
+ "m"(kLinearShuffleFar) // %5
1093
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
1094
+ "xmm7");
1095
+ }
1096
+ #endif
1097
+
1098
+ #ifdef HAS_SCALEROWUP2_LINEAR_16_SSE2
1099
+ void ScaleRowUp2_Linear_16_SSE2(const uint16_t* src_ptr,
1100
+ uint16_t* dst_ptr,
1101
+ int dst_width) {
1102
+ asm volatile(
1103
+ "pxor %%xmm5,%%xmm5 \n"
1104
+ "pcmpeqd %%xmm4,%%xmm4 \n"
1105
+ "psrld $31,%%xmm4 \n"
1106
+ "pslld $1,%%xmm4 \n" // all 2
1107
+
1108
+ LABELALIGN
1109
+ "1: \n"
1110
+ "movq (%0),%%xmm0 \n" // 0123 (16b)
1111
+ "movq 2(%0),%%xmm1 \n" // 1234 (16b)
1112
+
1113
+ "punpcklwd %%xmm5,%%xmm0 \n" // 0123 (32b)
1114
+ "punpcklwd %%xmm5,%%xmm1 \n" // 1234 (32b)
1115
+
1116
+ "movdqa %%xmm0,%%xmm2 \n"
1117
+ "movdqa %%xmm1,%%xmm3 \n"
1118
+
1119
+ "pshufd $0b10110001,%%xmm2,%%xmm2 \n" // 1032 (even, far)
1120
+ "pshufd $0b10110001,%%xmm3,%%xmm3 \n" // 2143 (odd, far)
1121
+
1122
+ "paddd %%xmm4,%%xmm2 \n" // far+2 (lo)
1123
+ "paddd %%xmm4,%%xmm3 \n" // far+2 (hi)
1124
+ "paddd %%xmm0,%%xmm2 \n" // near+far+2 (lo)
1125
+ "paddd %%xmm1,%%xmm3 \n" // near+far+2 (hi)
1126
+ "paddd %%xmm0,%%xmm0 \n" // 2*near (lo)
1127
+ "paddd %%xmm1,%%xmm1 \n" // 2*near (hi)
1128
+ "paddd %%xmm2,%%xmm0 \n" // 3*near+far+2 (lo)
1129
+ "paddd %%xmm3,%%xmm1 \n" // 3*near+far+2 (hi)
1130
+
1131
+ "psrld $2,%%xmm0 \n" // 3/4*near+1/4*far (lo)
1132
+ "psrld $2,%%xmm1 \n" // 3/4*near+1/4*far (hi)
1133
+ "packssdw %%xmm1,%%xmm0 \n"
1134
+ "pshufd $0b11011000,%%xmm0,%%xmm0 \n"
1135
+ "movdqu %%xmm0,(%1) \n"
1136
+
1137
+ "lea 0x8(%0),%0 \n"
1138
+ "lea 0x10(%1),%1 \n" // 4 pixel to 8 pixel
1139
+ "sub $0x8,%2 \n"
1140
+ "jg 1b \n"
1141
+ : "+r"(src_ptr), // %0
1142
+ "+r"(dst_ptr), // %1
1143
+ "+r"(dst_width) // %2
1144
+ :
1145
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
1146
+ }
1147
+ #endif
1148
+
1149
+ #ifdef HAS_SCALEROWUP2_BILINEAR_16_SSE2
1150
+ void ScaleRowUp2_Bilinear_16_SSE2(const uint16_t* src_ptr,
1151
+ ptrdiff_t src_stride,
1152
+ uint16_t* dst_ptr,
1153
+ ptrdiff_t dst_stride,
1154
+ int dst_width) {
1155
+ asm volatile(
1156
+ "pxor %%xmm7,%%xmm7 \n"
1157
+ "pcmpeqd %%xmm6,%%xmm6 \n"
1158
+ "psrld $31,%%xmm6 \n"
1159
+ "pslld $3,%%xmm6 \n" // all 8
1160
+
1161
+ LABELALIGN
1162
+ "1: \n"
1163
+ "movq (%0),%%xmm0 \n" // 0011 (16b, 1u1v)
1164
+ "movq 4(%0),%%xmm1 \n" // 1122 (16b, 1u1v)
1165
+ "punpcklwd %%xmm7,%%xmm0 \n" // 0011 (near) (32b, 1u1v)
1166
+ "punpcklwd %%xmm7,%%xmm1 \n" // 1122 (near) (32b, 1u1v)
1167
+ "movdqa %%xmm0,%%xmm2 \n"
1168
+ "movdqa %%xmm1,%%xmm3 \n"
1169
+ "pshufd $0b01001110,%%xmm2,%%xmm2 \n" // 1100 (far) (1, lo)
1170
+ "pshufd $0b01001110,%%xmm3,%%xmm3 \n" // 2211 (far) (1, hi)
1171
+ "paddd %%xmm0,%%xmm2 \n" // near+far (1, lo)
1172
+ "paddd %%xmm1,%%xmm3 \n" // near+far (1, hi)
1173
+ "paddd %%xmm0,%%xmm0 \n" // 2*near (1, lo)
1174
+ "paddd %%xmm1,%%xmm1 \n" // 2*near (1, hi)
1175
+ "paddd %%xmm2,%%xmm0 \n" // 3*near+far (1, lo)
1176
+ "paddd %%xmm3,%%xmm1 \n" // 3*near+far (1, hi)
1177
+
1178
+ "movq (%0),%%xmm0 \n" // 0123 (16b)
1179
+ "movq 2(%0),%%xmm1 \n" // 1234 (16b)
1180
+ "punpcklwd %%xmm7,%%xmm0 \n" // 0123 (32b)
1181
+ "punpcklwd %%xmm7,%%xmm1 \n" // 1234 (32b)
1182
+ "movdqa %%xmm0,%%xmm2 \n"
1183
+ "movdqa %%xmm1,%%xmm3 \n"
1184
+ "pshufd $0b10110001,%%xmm2,%%xmm2 \n" // 1032 (even, far)
1185
+ "pshufd $0b10110001,%%xmm3,%%xmm3 \n" // 2143 (odd, far)
1186
+ "paddd %%xmm0,%%xmm2 \n" // near+far (lo)
1187
+ "paddd %%xmm1,%%xmm3 \n" // near+far (hi)
1188
+ "paddd %%xmm0,%%xmm0 \n" // 2*near (lo)
1189
+ "paddd %%xmm1,%%xmm1 \n" // 2*near (hi)
1190
+ "paddd %%xmm2,%%xmm0 \n" // 3*near+far (1, lo)
1191
+ "paddd %%xmm3,%%xmm1 \n" // 3*near+far (1, hi)
1192
+
1193
+ "movq (%0,%3,2),%%xmm2 \n"
1194
+ "movq 2(%0,%3,2),%%xmm3 \n"
1195
+ "punpcklwd %%xmm7,%%xmm2 \n" // 0123 (32b)
1196
+ "punpcklwd %%xmm7,%%xmm3 \n" // 1234 (32b)
1197
+ "movdqa %%xmm2,%%xmm4 \n"
1198
+ "movdqa %%xmm3,%%xmm5 \n"
1199
+ "pshufd $0b10110001,%%xmm4,%%xmm4 \n" // 1032 (even, far)
1200
+ "pshufd $0b10110001,%%xmm5,%%xmm5 \n" // 2143 (odd, far)
1201
+ "paddd %%xmm2,%%xmm4 \n" // near+far (lo)
1202
+ "paddd %%xmm3,%%xmm5 \n" // near+far (hi)
1203
+ "paddd %%xmm2,%%xmm2 \n" // 2*near (lo)
1204
+ "paddd %%xmm3,%%xmm3 \n" // 2*near (hi)
1205
+ "paddd %%xmm4,%%xmm2 \n" // 3*near+far (2, lo)
1206
+ "paddd %%xmm5,%%xmm3 \n" // 3*near+far (2, hi)
1207
+
1208
+ "movdqa %%xmm0,%%xmm4 \n"
1209
+ "movdqa %%xmm2,%%xmm5 \n"
1210
+ "paddd %%xmm0,%%xmm4 \n" // 6*near+2*far (1, lo)
1211
+ "paddd %%xmm6,%%xmm5 \n" // 3*near+far+8 (2, lo)
1212
+ "paddd %%xmm0,%%xmm4 \n" // 9*near+3*far (1, lo)
1213
+ "paddd %%xmm5,%%xmm4 \n" // 9 3 3 1 + 8 (1, lo)
1214
+ "psrld $4,%%xmm4 \n" // ^ div by 16 (1, lo)
1215
+
1216
+ "movdqa %%xmm2,%%xmm5 \n"
1217
+ "paddd %%xmm2,%%xmm5 \n" // 6*near+2*far (2, lo)
1218
+ "paddd %%xmm6,%%xmm0 \n" // 3*near+far+8 (1, lo)
1219
+ "paddd %%xmm2,%%xmm5 \n" // 9*near+3*far (2, lo)
1220
+ "paddd %%xmm0,%%xmm5 \n" // 9 3 3 1 + 8 (2, lo)
1221
+ "psrld $4,%%xmm5 \n" // ^ div by 16 (2, lo)
1222
+
1223
+ "movdqa %%xmm1,%%xmm0 \n"
1224
+ "movdqa %%xmm3,%%xmm2 \n"
1225
+ "paddd %%xmm1,%%xmm0 \n" // 6*near+2*far (1, hi)
1226
+ "paddd %%xmm6,%%xmm2 \n" // 3*near+far+8 (2, hi)
1227
+ "paddd %%xmm1,%%xmm0 \n" // 9*near+3*far (1, hi)
1228
+ "paddd %%xmm2,%%xmm0 \n" // 9 3 3 1 + 8 (1, hi)
1229
+ "psrld $4,%%xmm0 \n" // ^ div by 16 (1, hi)
1230
+
1231
+ "movdqa %%xmm3,%%xmm2 \n"
1232
+ "paddd %%xmm3,%%xmm2 \n" // 6*near+2*far (2, hi)
1233
+ "paddd %%xmm6,%%xmm1 \n" // 3*near+far+8 (1, hi)
1234
+ "paddd %%xmm3,%%xmm2 \n" // 9*near+3*far (2, hi)
1235
+ "paddd %%xmm1,%%xmm2 \n" // 9 3 3 1 + 8 (2, hi)
1236
+ "psrld $4,%%xmm2 \n" // ^ div by 16 (2, hi)
1237
+
1238
+ "packssdw %%xmm0,%%xmm4 \n"
1239
+ "pshufd $0b11011000,%%xmm4,%%xmm4 \n"
1240
+ "movdqu %%xmm4,(%1) \n" // store above
1241
+ "packssdw %%xmm2,%%xmm5 \n"
1242
+ "pshufd $0b11011000,%%xmm5,%%xmm5 \n"
1243
+ "movdqu %%xmm5,(%1,%4,2) \n" // store below
1244
+
1245
+ "lea 0x8(%0),%0 \n"
1246
+ "lea 0x10(%1),%1 \n" // 4 pixel to 8 pixel
1247
+ "sub $0x8,%2 \n"
1248
+ "jg 1b \n"
1249
+ : "+r"(src_ptr), // %0
1250
+ "+r"(dst_ptr), // %1
1251
+ "+r"(dst_width) // %2
1252
+ : "r"((intptr_t)(src_stride)), // %3
1253
+ "r"((intptr_t)(dst_stride)) // %4
1254
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
1255
+ "xmm7");
1256
+ }
1257
+ #endif
1258
+
1259
+ #ifdef HAS_SCALEROWUP2_LINEAR_SSSE3
1260
+ void ScaleRowUp2_Linear_SSSE3(const uint8_t* src_ptr,
1261
+ uint8_t* dst_ptr,
1262
+ int dst_width) {
1263
+ asm volatile(
1264
+ "pcmpeqw %%xmm4,%%xmm4 \n"
1265
+ "psrlw $15,%%xmm4 \n"
1266
+ "psllw $1,%%xmm4 \n" // all 2
1267
+ "movdqa %3,%%xmm3 \n"
1268
+
1269
+ LABELALIGN
1270
+ "1: \n"
1271
+ "movq (%0),%%xmm0 \n" // 01234567
1272
+ "movq 1(%0),%%xmm1 \n" // 12345678
1273
+ "punpcklwd %%xmm0,%%xmm0 \n" // 0101232345456767
1274
+ "punpcklwd %%xmm1,%%xmm1 \n" // 1212343456567878
1275
+ "movdqa %%xmm0,%%xmm2 \n"
1276
+ "punpckhdq %%xmm1,%%xmm2 \n" // 4545565667677878
1277
+ "punpckldq %%xmm1,%%xmm0 \n" // 0101121223233434
1278
+ "pmaddubsw %%xmm3,%%xmm2 \n" // 3*near+far (hi)
1279
+ "pmaddubsw %%xmm3,%%xmm0 \n" // 3*near+far (lo)
1280
+ "paddw %%xmm4,%%xmm0 \n" // 3*near+far+2 (lo)
1281
+ "paddw %%xmm4,%%xmm2 \n" // 3*near+far+2 (hi)
1282
+ "psrlw $2,%%xmm0 \n" // 3/4*near+1/4*far (lo)
1283
+ "psrlw $2,%%xmm2 \n" // 3/4*near+1/4*far (hi)
1284
+ "packuswb %%xmm2,%%xmm0 \n"
1285
+ "movdqu %%xmm0,(%1) \n"
1286
+ "lea 0x8(%0),%0 \n"
1287
+ "lea 0x10(%1),%1 \n" // 8 sample to 16 sample
1288
+ "sub $0x10,%2 \n"
1289
+ "jg 1b \n"
1290
+ : "+r"(src_ptr), // %0
1291
+ "+r"(dst_ptr), // %1
1292
+ "+r"(dst_width) // %2
1293
+ : "m"(kLinearMadd31) // %3
1294
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4");
1295
+ }
1296
+ #endif
1297
+
1298
+ #ifdef HAS_SCALEROWUP2_BILINEAR_SSSE3
1299
+ void ScaleRowUp2_Bilinear_SSSE3(const uint8_t* src_ptr,
1300
+ ptrdiff_t src_stride,
1301
+ uint8_t* dst_ptr,
1302
+ ptrdiff_t dst_stride,
1303
+ int dst_width) {
1304
+ asm volatile(
1305
+ "pcmpeqw %%xmm6,%%xmm6 \n"
1306
+ "psrlw $15,%%xmm6 \n"
1307
+ "psllw $3,%%xmm6 \n" // all 8
1308
+ "movdqa %5,%%xmm7 \n"
1309
+
1310
+ LABELALIGN
1311
+ "1: \n"
1312
+ "movq (%0),%%xmm0 \n" // 01234567
1313
+ "movq 1(%0),%%xmm1 \n" // 12345678
1314
+ "punpcklwd %%xmm0,%%xmm0 \n" // 0101232345456767
1315
+ "punpcklwd %%xmm1,%%xmm1 \n" // 1212343456567878
1316
+ "movdqa %%xmm0,%%xmm2 \n"
1317
+ "punpckhdq %%xmm1,%%xmm2 \n" // 4545565667677878
1318
+ "punpckldq %%xmm1,%%xmm0 \n" // 0101121223233434
1319
+ "pmaddubsw %%xmm7,%%xmm2 \n" // 3*near+far (1, hi)
1320
+ "pmaddubsw %%xmm7,%%xmm0 \n" // 3*near+far (1, lo)
1321
+
1322
+ "movq (%0,%3),%%xmm1 \n"
1323
+ "movq 1(%0,%3),%%xmm4 \n"
1324
+ "punpcklwd %%xmm1,%%xmm1 \n"
1325
+ "punpcklwd %%xmm4,%%xmm4 \n"
1326
+ "movdqa %%xmm1,%%xmm3 \n"
1327
+ "punpckhdq %%xmm4,%%xmm3 \n"
1328
+ "punpckldq %%xmm4,%%xmm1 \n"
1329
+ "pmaddubsw %%xmm7,%%xmm3 \n" // 3*near+far (2, hi)
1330
+ "pmaddubsw %%xmm7,%%xmm1 \n" // 3*near+far (2, lo)
1331
+
1332
+ // xmm0 xmm2
1333
+ // xmm1 xmm3
1334
+
1335
+ "movdqa %%xmm0,%%xmm4 \n"
1336
+ "movdqa %%xmm1,%%xmm5 \n"
1337
+ "paddw %%xmm0,%%xmm4 \n" // 6*near+2*far (1, lo)
1338
+ "paddw %%xmm6,%%xmm5 \n" // 3*near+far+8 (2, lo)
1339
+ "paddw %%xmm0,%%xmm4 \n" // 9*near+3*far (1, lo)
1340
+ "paddw %%xmm5,%%xmm4 \n" // 9 3 3 1 + 8 (1, lo)
1341
+ "psrlw $4,%%xmm4 \n" // ^ div by 16 (1, lo)
1342
+
1343
+ "movdqa %%xmm1,%%xmm5 \n"
1344
+ "paddw %%xmm1,%%xmm5 \n" // 6*near+2*far (2, lo)
1345
+ "paddw %%xmm6,%%xmm0 \n" // 3*near+far+8 (1, lo)
1346
+ "paddw %%xmm1,%%xmm5 \n" // 9*near+3*far (2, lo)
1347
+ "paddw %%xmm0,%%xmm5 \n" // 9 3 3 1 + 8 (2, lo)
1348
+ "psrlw $4,%%xmm5 \n" // ^ div by 16 (2, lo)
1349
+
1350
+ "movdqa %%xmm2,%%xmm0 \n"
1351
+ "movdqa %%xmm3,%%xmm1 \n"
1352
+ "paddw %%xmm2,%%xmm0 \n" // 6*near+2*far (1, hi)
1353
+ "paddw %%xmm6,%%xmm1 \n" // 3*near+far+8 (2, hi)
1354
+ "paddw %%xmm2,%%xmm0 \n" // 9*near+3*far (1, hi)
1355
+ "paddw %%xmm1,%%xmm0 \n" // 9 3 3 1 + 8 (1, hi)
1356
+ "psrlw $4,%%xmm0 \n" // ^ div by 16 (1, hi)
1357
+
1358
+ "movdqa %%xmm3,%%xmm1 \n"
1359
+ "paddw %%xmm3,%%xmm1 \n" // 6*near+2*far (2, hi)
1360
+ "paddw %%xmm6,%%xmm2 \n" // 3*near+far+8 (1, hi)
1361
+ "paddw %%xmm3,%%xmm1 \n" // 9*near+3*far (2, hi)
1362
+ "paddw %%xmm2,%%xmm1 \n" // 9 3 3 1 + 8 (2, hi)
1363
+ "psrlw $4,%%xmm1 \n" // ^ div by 16 (2, hi)
1364
+
1365
+ "packuswb %%xmm0,%%xmm4 \n"
1366
+ "movdqu %%xmm4,(%1) \n" // store above
1367
+ "packuswb %%xmm1,%%xmm5 \n"
1368
+ "movdqu %%xmm5,(%1,%4) \n" // store below
1369
+
1370
+ "lea 0x8(%0),%0 \n"
1371
+ "lea 0x10(%1),%1 \n" // 8 sample to 16 sample
1372
+ "sub $0x10,%2 \n"
1373
+ "jg 1b \n"
1374
+ : "+r"(src_ptr), // %0
1375
+ "+r"(dst_ptr), // %1
1376
+ "+r"(dst_width) // %2
1377
+ : "r"((intptr_t)(src_stride)), // %3
1378
+ "r"((intptr_t)(dst_stride)), // %4
1379
+ "m"(kLinearMadd31) // %5
1380
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
1381
+ "xmm7");
1382
+ }
1383
+ #endif
1384
+
1385
+ #ifdef HAS_SCALEROWUP2_LINEAR_AVX2
1386
+ void ScaleRowUp2_Linear_AVX2(const uint8_t* src_ptr,
1387
+ uint8_t* dst_ptr,
1388
+ int dst_width) {
1389
+ asm volatile(
1390
+ "vpcmpeqw %%ymm4,%%ymm4,%%ymm4 \n"
1391
+ "vpsrlw $15,%%ymm4,%%ymm4 \n"
1392
+ "vpsllw $1,%%ymm4,%%ymm4 \n" // all 2
1393
+ "vbroadcastf128 %3,%%ymm3 \n"
1394
+
1395
+ LABELALIGN
1396
+ "1: \n"
1397
+ "vmovdqu (%0),%%xmm0 \n" // 0123456789ABCDEF
1398
+ "vmovdqu 1(%0),%%xmm1 \n" // 123456789ABCDEF0
1399
+ "vpermq $0b11011000,%%ymm0,%%ymm0 \n"
1400
+ "vpermq $0b11011000,%%ymm1,%%ymm1 \n"
1401
+ "vpunpcklwd %%ymm0,%%ymm0,%%ymm0 \n"
1402
+ "vpunpcklwd %%ymm1,%%ymm1,%%ymm1 \n"
1403
+ "vpunpckhdq %%ymm1,%%ymm0,%%ymm2 \n"
1404
+ "vpunpckldq %%ymm1,%%ymm0,%%ymm0 \n"
1405
+ "vpmaddubsw %%ymm3,%%ymm2,%%ymm1 \n" // 3*near+far (hi)
1406
+ "vpmaddubsw %%ymm3,%%ymm0,%%ymm0 \n" // 3*near+far (lo)
1407
+ "vpaddw %%ymm4,%%ymm0,%%ymm0 \n" // 3*near+far+2 (lo)
1408
+ "vpaddw %%ymm4,%%ymm1,%%ymm1 \n" // 3*near+far+2 (hi)
1409
+ "vpsrlw $2,%%ymm0,%%ymm0 \n" // 3/4*near+1/4*far (lo)
1410
+ "vpsrlw $2,%%ymm1,%%ymm1 \n" // 3/4*near+1/4*far (hi)
1411
+ "vpackuswb %%ymm1,%%ymm0,%%ymm0 \n"
1412
+ "vmovdqu %%ymm0,(%1) \n"
1413
+
1414
+ "lea 0x10(%0),%0 \n"
1415
+ "lea 0x20(%1),%1 \n" // 16 sample to 32 sample
1416
+ "sub $0x20,%2 \n"
1417
+ "jg 1b \n"
1418
+ "vzeroupper \n"
1419
+ : "+r"(src_ptr), // %0
1420
+ "+r"(dst_ptr), // %1
1421
+ "+r"(dst_width) // %2
1422
+ : "m"(kLinearMadd31) // %3
1423
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4");
1424
+ }
1425
+ #endif
1426
+
1427
+ #ifdef HAS_SCALEROWUP2_BILINEAR_AVX2
1428
+ void ScaleRowUp2_Bilinear_AVX2(const uint8_t* src_ptr,
1429
+ ptrdiff_t src_stride,
1430
+ uint8_t* dst_ptr,
1431
+ ptrdiff_t dst_stride,
1432
+ int dst_width) {
1433
+ asm volatile(
1434
+ "vpcmpeqw %%ymm6,%%ymm6,%%ymm6 \n"
1435
+ "vpsrlw $15,%%ymm6,%%ymm6 \n"
1436
+ "vpsllw $3,%%ymm6,%%ymm6 \n" // all 8
1437
+ "vbroadcastf128 %5,%%ymm7 \n"
1438
+
1439
+ LABELALIGN
1440
+ "1: \n"
1441
+ "vmovdqu (%0),%%xmm0 \n" // 0123456789ABCDEF
1442
+ "vmovdqu 1(%0),%%xmm1 \n" // 123456789ABCDEF0
1443
+ "vpermq $0b11011000,%%ymm0,%%ymm0 \n"
1444
+ "vpermq $0b11011000,%%ymm1,%%ymm1 \n"
1445
+ "vpunpcklwd %%ymm0,%%ymm0,%%ymm0 \n"
1446
+ "vpunpcklwd %%ymm1,%%ymm1,%%ymm1 \n"
1447
+ "vpunpckhdq %%ymm1,%%ymm0,%%ymm2 \n"
1448
+ "vpunpckldq %%ymm1,%%ymm0,%%ymm0 \n"
1449
+ "vpmaddubsw %%ymm7,%%ymm2,%%ymm1 \n" // 3*near+far (1, hi)
1450
+ "vpmaddubsw %%ymm7,%%ymm0,%%ymm0 \n" // 3*near+far (1, lo)
1451
+
1452
+ "vmovdqu (%0,%3),%%xmm2 \n" // 0123456789ABCDEF
1453
+ "vmovdqu 1(%0,%3),%%xmm3 \n" // 123456789ABCDEF0
1454
+ "vpermq $0b11011000,%%ymm2,%%ymm2 \n"
1455
+ "vpermq $0b11011000,%%ymm3,%%ymm3 \n"
1456
+ "vpunpcklwd %%ymm2,%%ymm2,%%ymm2 \n"
1457
+ "vpunpcklwd %%ymm3,%%ymm3,%%ymm3 \n"
1458
+ "vpunpckhdq %%ymm3,%%ymm2,%%ymm4 \n"
1459
+ "vpunpckldq %%ymm3,%%ymm2,%%ymm2 \n"
1460
+ "vpmaddubsw %%ymm7,%%ymm4,%%ymm3 \n" // 3*near+far (2, hi)
1461
+ "vpmaddubsw %%ymm7,%%ymm2,%%ymm2 \n" // 3*near+far (2, lo)
1462
+
1463
+ // ymm0 ymm1
1464
+ // ymm2 ymm3
1465
+
1466
+ "vpaddw %%ymm0,%%ymm0,%%ymm4 \n" // 6*near+2*far (1, lo)
1467
+ "vpaddw %%ymm6,%%ymm2,%%ymm5 \n" // 3*near+far+8 (2, lo)
1468
+ "vpaddw %%ymm4,%%ymm0,%%ymm4 \n" // 9*near+3*far (1, lo)
1469
+ "vpaddw %%ymm4,%%ymm5,%%ymm4 \n" // 9 3 3 1 + 8 (1, lo)
1470
+ "vpsrlw $4,%%ymm4,%%ymm4 \n" // ^ div by 16 (1, lo)
1471
+
1472
+ "vpaddw %%ymm2,%%ymm2,%%ymm5 \n" // 6*near+2*far (2, lo)
1473
+ "vpaddw %%ymm6,%%ymm0,%%ymm0 \n" // 3*near+far+8 (1, lo)
1474
+ "vpaddw %%ymm5,%%ymm2,%%ymm5 \n" // 9*near+3*far (2, lo)
1475
+ "vpaddw %%ymm5,%%ymm0,%%ymm5 \n" // 9 3 3 1 + 8 (2, lo)
1476
+ "vpsrlw $4,%%ymm5,%%ymm5 \n" // ^ div by 16 (2, lo)
1477
+
1478
+ "vpaddw %%ymm1,%%ymm1,%%ymm0 \n" // 6*near+2*far (1, hi)
1479
+ "vpaddw %%ymm6,%%ymm3,%%ymm2 \n" // 3*near+far+8 (2, hi)
1480
+ "vpaddw %%ymm0,%%ymm1,%%ymm0 \n" // 9*near+3*far (1, hi)
1481
+ "vpaddw %%ymm0,%%ymm2,%%ymm0 \n" // 9 3 3 1 + 8 (1, hi)
1482
+ "vpsrlw $4,%%ymm0,%%ymm0 \n" // ^ div by 16 (1, hi)
1483
+
1484
+ "vpaddw %%ymm3,%%ymm3,%%ymm2 \n" // 6*near+2*far (2, hi)
1485
+ "vpaddw %%ymm6,%%ymm1,%%ymm1 \n" // 3*near+far+8 (1, hi)
1486
+ "vpaddw %%ymm2,%%ymm3,%%ymm2 \n" // 9*near+3*far (2, hi)
1487
+ "vpaddw %%ymm2,%%ymm1,%%ymm2 \n" // 9 3 3 1 + 8 (2, hi)
1488
+ "vpsrlw $4,%%ymm2,%%ymm2 \n" // ^ div by 16 (2, hi)
1489
+
1490
+ "vpackuswb %%ymm0,%%ymm4,%%ymm4 \n"
1491
+ "vmovdqu %%ymm4,(%1) \n" // store above
1492
+ "vpackuswb %%ymm2,%%ymm5,%%ymm5 \n"
1493
+ "vmovdqu %%ymm5,(%1,%4) \n" // store below
1494
+
1495
+ "lea 0x10(%0),%0 \n"
1496
+ "lea 0x20(%1),%1 \n" // 16 sample to 32 sample
1497
+ "sub $0x20,%2 \n"
1498
+ "jg 1b \n"
1499
+ "vzeroupper \n"
1500
+ : "+r"(src_ptr), // %0
1501
+ "+r"(dst_ptr), // %1
1502
+ "+r"(dst_width) // %2
1503
+ : "r"((intptr_t)(src_stride)), // %3
1504
+ "r"((intptr_t)(dst_stride)), // %4
1505
+ "m"(kLinearMadd31) // %5
1506
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
1507
+ "xmm7");
1508
+ }
1509
+ #endif
1510
+
1511
+ #ifdef HAS_SCALEROWUP2_LINEAR_12_AVX2
1512
+ void ScaleRowUp2_Linear_12_AVX2(const uint16_t* src_ptr,
1513
+ uint16_t* dst_ptr,
1514
+ int dst_width) {
1515
+ asm volatile(
1516
+ "vbroadcastf128 %3,%%ymm5 \n"
1517
+ "vpcmpeqw %%ymm4,%%ymm4,%%ymm4 \n"
1518
+ "vpsrlw $15,%%ymm4,%%ymm4 \n"
1519
+ "vpsllw $1,%%ymm4,%%ymm4 \n" // all 2
1520
+
1521
+ LABELALIGN
1522
+ "1: \n"
1523
+ "vmovdqu (%0),%%ymm0 \n" // 0123456789ABCDEF (16b)
1524
+ "vmovdqu 2(%0),%%ymm1 \n" // 123456789ABCDEF0 (16b)
1525
+
1526
+ "vpermq $0b11011000,%%ymm0,%%ymm0 \n" // 012389AB4567CDEF
1527
+ "vpermq $0b11011000,%%ymm1,%%ymm1 \n" // 12349ABC5678DEF0
1528
+
1529
+ "vpunpckhwd %%ymm1,%%ymm0,%%ymm2 \n" // 899AABBCCDDEEFF0 (near)
1530
+ "vpunpcklwd %%ymm1,%%ymm0,%%ymm0 \n" // 0112233445566778 (near)
1531
+ "vpshufb %%ymm5,%%ymm2,%%ymm3 \n" // 98A9BACBDCEDFE0F (far)
1532
+ "vpshufb %%ymm5,%%ymm0,%%ymm1 \n" // 1021324354657687 (far)
1533
+
1534
+ "vpaddw %%ymm4,%%ymm1,%%ymm1 \n" // far+2
1535
+ "vpaddw %%ymm4,%%ymm3,%%ymm3 \n" // far+2
1536
+ "vpaddw %%ymm0,%%ymm1,%%ymm1 \n" // near+far+2
1537
+ "vpaddw %%ymm2,%%ymm3,%%ymm3 \n" // near+far+2
1538
+ "vpaddw %%ymm0,%%ymm0,%%ymm0 \n" // 2*near
1539
+ "vpaddw %%ymm2,%%ymm2,%%ymm2 \n" // 2*near
1540
+ "vpaddw %%ymm0,%%ymm1,%%ymm0 \n" // 3*near+far+2
1541
+ "vpaddw %%ymm2,%%ymm3,%%ymm2 \n" // 3*near+far+2
1542
+
1543
+ "vpsrlw $2,%%ymm0,%%ymm0 \n" // 3/4*near+1/4*far
1544
+ "vpsrlw $2,%%ymm2,%%ymm2 \n" // 3/4*near+1/4*far
1545
+ "vmovdqu %%ymm0,(%1) \n"
1546
+ "vmovdqu %%ymm2,32(%1) \n"
1547
+
1548
+ "lea 0x20(%0),%0 \n"
1549
+ "lea 0x40(%1),%1 \n" // 16 sample to 32 sample
1550
+ "sub $0x20,%2 \n"
1551
+ "jg 1b \n"
1552
+ "vzeroupper \n"
1553
+ : "+r"(src_ptr), // %0
1554
+ "+r"(dst_ptr), // %1
1555
+ "+r"(dst_width) // %2
1556
+ : "m"(kLinearShuffleFar) // %3
1557
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
1558
+ }
1559
+ #endif
1560
+
1561
+ #ifdef HAS_SCALEROWUP2_BILINEAR_12_AVX2
1562
+ void ScaleRowUp2_Bilinear_12_AVX2(const uint16_t* src_ptr,
1563
+ ptrdiff_t src_stride,
1564
+ uint16_t* dst_ptr,
1565
+ ptrdiff_t dst_stride,
1566
+ int dst_width) {
1567
+ asm volatile(
1568
+ "vbroadcastf128 %5,%%ymm5 \n"
1569
+ "vpcmpeqw %%ymm4,%%ymm4,%%ymm4 \n"
1570
+ "vpsrlw $15,%%ymm4,%%ymm4 \n"
1571
+ "vpsllw $3,%%ymm4,%%ymm4 \n" // all 8
1572
+
1573
+ LABELALIGN
1574
+ "1: \n"
1575
+
1576
+ "vmovdqu (%0),%%xmm0 \n" // 01234567 (16b)
1577
+ "vmovdqu 2(%0),%%xmm1 \n" // 12345678 (16b)
1578
+ "vpermq $0b11011000,%%ymm0,%%ymm0 \n" // 0123000045670000
1579
+ "vpermq $0b11011000,%%ymm1,%%ymm1 \n" // 1234000056780000
1580
+ "vpunpcklwd %%ymm1,%%ymm0,%%ymm0 \n" // 0112233445566778 (near)
1581
+ "vpshufb %%ymm5,%%ymm0,%%ymm1 \n" // 1021324354657687 (far)
1582
+ "vpaddw %%ymm0,%%ymm1,%%ymm1 \n" // near+far
1583
+ "vpaddw %%ymm0,%%ymm0,%%ymm0 \n" // 2*near
1584
+ "vpaddw %%ymm0,%%ymm1,%%ymm2 \n" // 3*near+far (1)
1585
+
1586
+ "vmovdqu (%0,%3,2),%%xmm0 \n" // 01234567 (16b)
1587
+ "vmovdqu 2(%0,%3,2),%%xmm1 \n" // 12345678 (16b)
1588
+ "vpermq $0b11011000,%%ymm0,%%ymm0 \n" // 0123000045670000
1589
+ "vpermq $0b11011000,%%ymm1,%%ymm1 \n" // 1234000056780000
1590
+ "vpunpcklwd %%ymm1,%%ymm0,%%ymm0 \n" // 0112233445566778 (near)
1591
+ "vpshufb %%ymm5,%%ymm0,%%ymm1 \n" // 1021324354657687 (far)
1592
+ "vpaddw %%ymm0,%%ymm1,%%ymm1 \n" // near+far
1593
+ "vpaddw %%ymm0,%%ymm0,%%ymm0 \n" // 2*near
1594
+ "vpaddw %%ymm0,%%ymm1,%%ymm3 \n" // 3*near+far (2)
1595
+
1596
+ "vpaddw %%ymm2,%%ymm2,%%ymm0 \n" // 6*near+2*far (1)
1597
+ "vpaddw %%ymm4,%%ymm3,%%ymm1 \n" // 3*near+far+8 (2)
1598
+ "vpaddw %%ymm0,%%ymm2,%%ymm0 \n" // 9*near+3*far (1)
1599
+ "vpaddw %%ymm0,%%ymm1,%%ymm0 \n" // 9 3 3 1 + 8 (1)
1600
+ "vpsrlw $4,%%ymm0,%%ymm0 \n" // ^ div by 16
1601
+ "vmovdqu %%ymm0,(%1) \n" // store above
1602
+
1603
+ "vpaddw %%ymm3,%%ymm3,%%ymm0 \n" // 6*near+2*far (2)
1604
+ "vpaddw %%ymm4,%%ymm2,%%ymm1 \n" // 3*near+far+8 (1)
1605
+ "vpaddw %%ymm0,%%ymm3,%%ymm0 \n" // 9*near+3*far (2)
1606
+ "vpaddw %%ymm0,%%ymm1,%%ymm0 \n" // 9 3 3 1 + 8 (2)
1607
+ "vpsrlw $4,%%ymm0,%%ymm0 \n" // ^ div by 16
1608
+ "vmovdqu %%ymm0,(%1,%4,2) \n" // store below
1609
+
1610
+ "lea 0x10(%0),%0 \n"
1611
+ "lea 0x20(%1),%1 \n" // 8 sample to 16 sample
1612
+ "sub $0x10,%2 \n"
1613
+ "jg 1b \n"
1614
+ "vzeroupper \n"
1615
+ : "+r"(src_ptr), // %0
1616
+ "+r"(dst_ptr), // %1
1617
+ "+r"(dst_width) // %2
1618
+ : "r"((intptr_t)(src_stride)), // %3
1619
+ "r"((intptr_t)(dst_stride)), // %4
1620
+ "m"(kLinearShuffleFar) // %5
1621
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
1622
+ }
1623
+ #endif
1624
+
1625
+ #ifdef HAS_SCALEROWUP2_LINEAR_16_AVX2
1626
+ void ScaleRowUp2_Linear_16_AVX2(const uint16_t* src_ptr,
1627
+ uint16_t* dst_ptr,
1628
+ int dst_width) {
1629
+ asm volatile(
1630
+ "vpcmpeqd %%ymm4,%%ymm4,%%ymm4 \n"
1631
+ "vpsrld $31,%%ymm4,%%ymm4 \n"
1632
+ "vpslld $1,%%ymm4,%%ymm4 \n" // all 2
1633
+
1634
+ LABELALIGN
1635
+ "1: \n"
1636
+ "vmovdqu (%0),%%xmm0 \n" // 01234567 (16b, 1u1v)
1637
+ "vmovdqu 2(%0),%%xmm1 \n" // 12345678 (16b, 1u1v)
1638
+
1639
+ "vpmovzxwd %%xmm0,%%ymm0 \n" // 01234567 (32b, 1u1v)
1640
+ "vpmovzxwd %%xmm1,%%ymm1 \n" // 12345678 (32b, 1u1v)
1641
+
1642
+ "vpshufd $0b10110001,%%ymm0,%%ymm2 \n" // 10325476 (lo, far)
1643
+ "vpshufd $0b10110001,%%ymm1,%%ymm3 \n" // 21436587 (hi, far)
1644
+
1645
+ "vpaddd %%ymm4,%%ymm2,%%ymm2 \n" // far+2 (lo)
1646
+ "vpaddd %%ymm4,%%ymm3,%%ymm3 \n" // far+2 (hi)
1647
+ "vpaddd %%ymm0,%%ymm2,%%ymm2 \n" // near+far+2 (lo)
1648
+ "vpaddd %%ymm1,%%ymm3,%%ymm3 \n" // near+far+2 (hi)
1649
+ "vpaddd %%ymm0,%%ymm0,%%ymm0 \n" // 2*near (lo)
1650
+ "vpaddd %%ymm1,%%ymm1,%%ymm1 \n" // 2*near (hi)
1651
+ "vpaddd %%ymm0,%%ymm2,%%ymm0 \n" // 3*near+far+2 (lo)
1652
+ "vpaddd %%ymm1,%%ymm3,%%ymm1 \n" // 3*near+far+2 (hi)
1653
+
1654
+ "vpsrld $2,%%ymm0,%%ymm0 \n" // 3/4*near+1/4*far (lo)
1655
+ "vpsrld $2,%%ymm1,%%ymm1 \n" // 3/4*near+1/4*far (hi)
1656
+ "vpackusdw %%ymm1,%%ymm0,%%ymm0 \n"
1657
+ "vpshufd $0b11011000,%%ymm0,%%ymm0 \n"
1658
+ "vmovdqu %%ymm0,(%1) \n"
1659
+
1660
+ "lea 0x10(%0),%0 \n"
1661
+ "lea 0x20(%1),%1 \n" // 8 pixel to 16 pixel
1662
+ "sub $0x10,%2 \n"
1663
+ "jg 1b \n"
1664
+ "vzeroupper \n"
1665
+ : "+r"(src_ptr), // %0
1666
+ "+r"(dst_ptr), // %1
1667
+ "+r"(dst_width) // %2
1668
+ :
1669
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4");
1670
+ }
1671
+ #endif
1672
+
1673
+ #ifdef HAS_SCALEROWUP2_BILINEAR_16_AVX2
1674
+ void ScaleRowUp2_Bilinear_16_AVX2(const uint16_t* src_ptr,
1675
+ ptrdiff_t src_stride,
1676
+ uint16_t* dst_ptr,
1677
+ ptrdiff_t dst_stride,
1678
+ int dst_width) {
1679
+ asm volatile(
1680
+ "vpcmpeqd %%ymm6,%%ymm6,%%ymm6 \n"
1681
+ "vpsrld $31,%%ymm6,%%ymm6 \n"
1682
+ "vpslld $3,%%ymm6,%%ymm6 \n" // all 8
1683
+
1684
+ LABELALIGN
1685
+ "1: \n"
1686
+
1687
+ "vmovdqu (%0),%%xmm0 \n" // 01234567 (16b, 1u1v)
1688
+ "vmovdqu 2(%0),%%xmm1 \n" // 12345678 (16b, 1u1v)
1689
+ "vpmovzxwd %%xmm0,%%ymm0 \n" // 01234567 (32b, 1u1v)
1690
+ "vpmovzxwd %%xmm1,%%ymm1 \n" // 12345678 (32b, 1u1v)
1691
+ "vpshufd $0b10110001,%%ymm0,%%ymm2 \n" // 10325476 (lo, far)
1692
+ "vpshufd $0b10110001,%%ymm1,%%ymm3 \n" // 21436587 (hi, far)
1693
+ "vpaddd %%ymm0,%%ymm2,%%ymm2 \n" // near+far (lo)
1694
+ "vpaddd %%ymm1,%%ymm3,%%ymm3 \n" // near+far (hi)
1695
+ "vpaddd %%ymm0,%%ymm0,%%ymm0 \n" // 2*near (lo)
1696
+ "vpaddd %%ymm1,%%ymm1,%%ymm1 \n" // 2*near (hi)
1697
+ "vpaddd %%ymm0,%%ymm2,%%ymm0 \n" // 3*near+far (1, lo)
1698
+ "vpaddd %%ymm1,%%ymm3,%%ymm1 \n" // 3*near+far (1, hi)
1699
+
1700
+ "vmovdqu (%0,%3,2),%%xmm2 \n" // 01234567 (16b, 1u1v)
1701
+ "vmovdqu 2(%0,%3,2),%%xmm3 \n" // 12345678 (16b, 1u1v)
1702
+ "vpmovzxwd %%xmm2,%%ymm2 \n" // 01234567 (32b, 1u1v)
1703
+ "vpmovzxwd %%xmm3,%%ymm3 \n" // 12345678 (32b, 1u1v)
1704
+ "vpshufd $0b10110001,%%ymm2,%%ymm4 \n" // 10325476 (lo, far)
1705
+ "vpshufd $0b10110001,%%ymm3,%%ymm5 \n" // 21436587 (hi, far)
1706
+ "vpaddd %%ymm2,%%ymm4,%%ymm4 \n" // near+far (lo)
1707
+ "vpaddd %%ymm3,%%ymm5,%%ymm5 \n" // near+far (hi)
1708
+ "vpaddd %%ymm2,%%ymm2,%%ymm2 \n" // 2*near (lo)
1709
+ "vpaddd %%ymm3,%%ymm3,%%ymm3 \n" // 2*near (hi)
1710
+ "vpaddd %%ymm2,%%ymm4,%%ymm2 \n" // 3*near+far (2, lo)
1711
+ "vpaddd %%ymm3,%%ymm5,%%ymm3 \n" // 3*near+far (2, hi)
1712
+
1713
+ "vpaddd %%ymm0,%%ymm0,%%ymm4 \n" // 6*near+2*far (1, lo)
1714
+ "vpaddd %%ymm6,%%ymm2,%%ymm5 \n" // 3*near+far+8 (2, lo)
1715
+ "vpaddd %%ymm4,%%ymm0,%%ymm4 \n" // 9*near+3*far (1, lo)
1716
+ "vpaddd %%ymm4,%%ymm5,%%ymm4 \n" // 9 3 3 1 + 8 (1, lo)
1717
+ "vpsrld $4,%%ymm4,%%ymm4 \n" // ^ div by 16 (1, lo)
1718
+
1719
+ "vpaddd %%ymm2,%%ymm2,%%ymm5 \n" // 6*near+2*far (2, lo)
1720
+ "vpaddd %%ymm6,%%ymm0,%%ymm0 \n" // 3*near+far+8 (1, lo)
1721
+ "vpaddd %%ymm5,%%ymm2,%%ymm5 \n" // 9*near+3*far (2, lo)
1722
+ "vpaddd %%ymm5,%%ymm0,%%ymm5 \n" // 9 3 3 1 + 8 (2, lo)
1723
+ "vpsrld $4,%%ymm5,%%ymm5 \n" // ^ div by 16 (2, lo)
1724
+
1725
+ "vpaddd %%ymm1,%%ymm1,%%ymm0 \n" // 6*near+2*far (1, hi)
1726
+ "vpaddd %%ymm6,%%ymm3,%%ymm2 \n" // 3*near+far+8 (2, hi)
1727
+ "vpaddd %%ymm0,%%ymm1,%%ymm0 \n" // 9*near+3*far (1, hi)
1728
+ "vpaddd %%ymm0,%%ymm2,%%ymm0 \n" // 9 3 3 1 + 8 (1, hi)
1729
+ "vpsrld $4,%%ymm0,%%ymm0 \n" // ^ div by 16 (1, hi)
1730
+
1731
+ "vpaddd %%ymm3,%%ymm3,%%ymm2 \n" // 6*near+2*far (2, hi)
1732
+ "vpaddd %%ymm6,%%ymm1,%%ymm1 \n" // 3*near+far+8 (1, hi)
1733
+ "vpaddd %%ymm2,%%ymm3,%%ymm2 \n" // 9*near+3*far (2, hi)
1734
+ "vpaddd %%ymm2,%%ymm1,%%ymm2 \n" // 9 3 3 1 + 8 (2, hi)
1735
+ "vpsrld $4,%%ymm2,%%ymm2 \n" // ^ div by 16 (2, hi)
1736
+
1737
+ "vpackusdw %%ymm0,%%ymm4,%%ymm4 \n"
1738
+ "vpshufd $0b11011000,%%ymm4,%%ymm4 \n"
1739
+ "vmovdqu %%ymm4,(%1) \n" // store above
1740
+ "vpackusdw %%ymm2,%%ymm5,%%ymm5 \n"
1741
+ "vpshufd $0b11011000,%%ymm5,%%ymm5 \n"
1742
+ "vmovdqu %%ymm5,(%1,%4,2) \n" // store below
1743
+
1744
+ "lea 0x10(%0),%0 \n"
1745
+ "lea 0x20(%1),%1 \n" // 8 pixel to 16 pixel
1746
+ "sub $0x10,%2 \n"
1747
+ "jg 1b \n"
1748
+ "vzeroupper \n"
1749
+ : "+r"(src_ptr), // %0
1750
+ "+r"(dst_ptr), // %1
1751
+ "+r"(dst_width) // %2
1752
+ : "r"((intptr_t)(src_stride)), // %3
1753
+ "r"((intptr_t)(dst_stride)) // %4
1754
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6");
1755
+ }
1756
+ #endif
1757
+
1758
+ // Reads 16xN bytes and produces 16 shorts at a time.
1759
+ void ScaleAddRow_SSE2(const uint8_t* src_ptr,
1760
+ uint16_t* dst_ptr,
1761
+ int src_width) {
1762
+ asm volatile("pxor %%xmm5,%%xmm5 \n"
1763
+
1764
+ // 16 pixel loop.
1765
+ LABELALIGN
1766
+ "1: \n"
1767
+ "movdqu (%0),%%xmm3 \n"
1768
+ "lea 0x10(%0),%0 \n" // src_ptr += 16
1769
+ "movdqu (%1),%%xmm0 \n"
1770
+ "movdqu 0x10(%1),%%xmm1 \n"
1771
+ "movdqa %%xmm3,%%xmm2 \n"
1772
+ "punpcklbw %%xmm5,%%xmm2 \n"
1773
+ "punpckhbw %%xmm5,%%xmm3 \n"
1774
+ "paddusw %%xmm2,%%xmm0 \n"
1775
+ "paddusw %%xmm3,%%xmm1 \n"
1776
+ "movdqu %%xmm0,(%1) \n"
1777
+ "movdqu %%xmm1,0x10(%1) \n"
1778
+ "lea 0x20(%1),%1 \n"
1779
+ "sub $0x10,%2 \n"
1780
+ "jg 1b \n"
1781
+ : "+r"(src_ptr), // %0
1782
+ "+r"(dst_ptr), // %1
1783
+ "+r"(src_width) // %2
1784
+ :
1785
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm5");
1786
+ }
1787
+
1788
+ #ifdef HAS_SCALEADDROW_AVX2
1789
+ // Reads 32 bytes and accumulates to 32 shorts at a time.
1790
+ void ScaleAddRow_AVX2(const uint8_t* src_ptr,
1791
+ uint16_t* dst_ptr,
1792
+ int src_width) {
1793
+ asm volatile("vpxor %%ymm5,%%ymm5,%%ymm5 \n"
1794
+
1795
+ LABELALIGN
1796
+ "1: \n"
1797
+ "vmovdqu (%0),%%ymm3 \n"
1798
+ "lea 0x20(%0),%0 \n" // src_ptr += 32
1799
+ "vpermq $0xd8,%%ymm3,%%ymm3 \n"
1800
+ "vpunpcklbw %%ymm5,%%ymm3,%%ymm2 \n"
1801
+ "vpunpckhbw %%ymm5,%%ymm3,%%ymm3 \n"
1802
+ "vpaddusw (%1),%%ymm2,%%ymm0 \n"
1803
+ "vpaddusw 0x20(%1),%%ymm3,%%ymm1 \n"
1804
+ "vmovdqu %%ymm0,(%1) \n"
1805
+ "vmovdqu %%ymm1,0x20(%1) \n"
1806
+ "lea 0x40(%1),%1 \n"
1807
+ "sub $0x20,%2 \n"
1808
+ "jg 1b \n"
1809
+ "vzeroupper \n"
1810
+ : "+r"(src_ptr), // %0
1811
+ "+r"(dst_ptr), // %1
1812
+ "+r"(src_width) // %2
1813
+ :
1814
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm5");
1815
+ }
1816
+ #endif // HAS_SCALEADDROW_AVX2
1817
+
1818
+ // Constant for making pixels signed to avoid pmaddubsw
1819
+ // saturation.
1820
+ static const uvec8 kFsub80 = {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1821
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
1822
+
1823
+ // Constant for making pixels unsigned and adding .5 for rounding.
1824
+ static const uvec16 kFadd40 = {0x4040, 0x4040, 0x4040, 0x4040,
1825
+ 0x4040, 0x4040, 0x4040, 0x4040};
1826
+
1827
+ // Bilinear column filtering. SSSE3 version.
1828
+ void ScaleFilterCols_SSSE3(uint8_t* dst_ptr,
1829
+ const uint8_t* src_ptr,
1830
+ int dst_width,
1831
+ int x,
1832
+ int dx) {
1833
+ intptr_t x0, x1, temp_pixel;
1834
+ asm volatile(
1835
+ "movd %6,%%xmm2 \n"
1836
+ "movd %7,%%xmm3 \n"
1837
+ "movl $0x04040000,%k2 \n"
1838
+ "movd %k2,%%xmm5 \n"
1839
+ "pcmpeqb %%xmm6,%%xmm6 \n"
1840
+ "psrlw $0x9,%%xmm6 \n" // 0x007f007f
1841
+ "pcmpeqb %%xmm7,%%xmm7 \n"
1842
+ "psrlw $15,%%xmm7 \n" // 0x00010001
1843
+
1844
+ "pextrw $0x1,%%xmm2,%k3 \n"
1845
+ "subl $0x2,%5 \n"
1846
+ "jl 29f \n"
1847
+ "movdqa %%xmm2,%%xmm0 \n"
1848
+ "paddd %%xmm3,%%xmm0 \n"
1849
+ "punpckldq %%xmm0,%%xmm2 \n"
1850
+ "punpckldq %%xmm3,%%xmm3 \n"
1851
+ "paddd %%xmm3,%%xmm3 \n"
1852
+ "pextrw $0x3,%%xmm2,%k4 \n"
1853
+
1854
+ LABELALIGN
1855
+ "2: \n"
1856
+ "movdqa %%xmm2,%%xmm1 \n"
1857
+ "paddd %%xmm3,%%xmm2 \n"
1858
+ "movzwl 0x00(%1,%3,1),%k2 \n"
1859
+ "movd %k2,%%xmm0 \n"
1860
+ "psrlw $0x9,%%xmm1 \n"
1861
+ "movzwl 0x00(%1,%4,1),%k2 \n"
1862
+ "movd %k2,%%xmm4 \n"
1863
+ "pshufb %%xmm5,%%xmm1 \n"
1864
+ "punpcklwd %%xmm4,%%xmm0 \n"
1865
+ "psubb %8,%%xmm0 \n" // make pixels signed.
1866
+ "pxor %%xmm6,%%xmm1 \n" // 128 - f = (f ^ 127 ) +
1867
+ // 1
1868
+ "paddusb %%xmm7,%%xmm1 \n"
1869
+ "pmaddubsw %%xmm0,%%xmm1 \n"
1870
+ "pextrw $0x1,%%xmm2,%k3 \n"
1871
+ "pextrw $0x3,%%xmm2,%k4 \n"
1872
+ "paddw %9,%%xmm1 \n" // make pixels unsigned.
1873
+ "psrlw $0x7,%%xmm1 \n"
1874
+ "packuswb %%xmm1,%%xmm1 \n"
1875
+ "movd %%xmm1,%k2 \n"
1876
+ "mov %w2,(%0) \n"
1877
+ "lea 0x2(%0),%0 \n"
1878
+ "subl $0x2,%5 \n"
1879
+ "jge 2b \n"
1880
+
1881
+ LABELALIGN
1882
+ "29: \n"
1883
+ "addl $0x1,%5 \n"
1884
+ "jl 99f \n"
1885
+ "movzwl 0x00(%1,%3,1),%k2 \n"
1886
+ "movd %k2,%%xmm0 \n"
1887
+ "psrlw $0x9,%%xmm2 \n"
1888
+ "pshufb %%xmm5,%%xmm2 \n"
1889
+ "psubb %8,%%xmm0 \n" // make pixels signed.
1890
+ "pxor %%xmm6,%%xmm2 \n"
1891
+ "paddusb %%xmm7,%%xmm2 \n"
1892
+ "pmaddubsw %%xmm0,%%xmm2 \n"
1893
+ "paddw %9,%%xmm2 \n" // make pixels unsigned.
1894
+ "psrlw $0x7,%%xmm2 \n"
1895
+ "packuswb %%xmm2,%%xmm2 \n"
1896
+ "movd %%xmm2,%k2 \n"
1897
+ "mov %b2,(%0) \n"
1898
+ "99: \n"
1899
+ : "+r"(dst_ptr), // %0
1900
+ "+r"(src_ptr), // %1
1901
+ "=&a"(temp_pixel), // %2
1902
+ "=&r"(x0), // %3
1903
+ "=&r"(x1), // %4
1904
+ #if defined(__x86_64__)
1905
+ "+rm"(dst_width) // %5
1906
+ #else
1907
+ "+m"(dst_width) // %5
1908
+ #endif
1909
+ : "rm"(x), // %6
1910
+ "rm"(dx), // %7
1911
+ #if defined(__x86_64__)
1912
+ "x"(kFsub80), // %8
1913
+ "x"(kFadd40) // %9
1914
+ #else
1915
+ "m"(kFsub80), // %8
1916
+ "m"(kFadd40) // %9
1917
+ #endif
1918
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
1919
+ "xmm7");
1920
+ }
1921
+
1922
+ // Reads 4 pixels, duplicates them and writes 8 pixels.
1923
+ // Alignment requirement: src_argb 16 byte aligned, dst_argb 16 byte aligned.
1924
+ void ScaleColsUp2_SSE2(uint8_t* dst_ptr,
1925
+ const uint8_t* src_ptr,
1926
+ int dst_width,
1927
+ int x,
1928
+ int dx) {
1929
+ (void)x;
1930
+ (void)dx;
1931
+ asm volatile(
1932
+ "1: \n"
1933
+ "movdqu (%1),%%xmm0 \n"
1934
+ "lea 0x10(%1),%1 \n"
1935
+ "movdqa %%xmm0,%%xmm1 \n"
1936
+ "punpcklbw %%xmm0,%%xmm0 \n"
1937
+ "punpckhbw %%xmm1,%%xmm1 \n"
1938
+ "movdqu %%xmm0,(%0) \n"
1939
+ "movdqu %%xmm1,0x10(%0) \n"
1940
+ "lea 0x20(%0),%0 \n"
1941
+ "sub $0x20,%2 \n"
1942
+ "jg 1b \n"
1943
+
1944
+ : "+r"(dst_ptr), // %0
1945
+ "+r"(src_ptr), // %1
1946
+ "+r"(dst_width) // %2
1947
+ :
1948
+ : "memory", "cc", "xmm0", "xmm1");
1949
+ }
1950
+
1951
+ void ScaleARGBRowDown2_SSE2(const uint8_t* src_argb,
1952
+ ptrdiff_t src_stride,
1953
+ uint8_t* dst_argb,
1954
+ int dst_width) {
1955
+ (void)src_stride;
1956
+ asm volatile(
1957
+ "1: \n"
1958
+ "movdqu (%0),%%xmm0 \n"
1959
+ "movdqu 0x10(%0),%%xmm1 \n"
1960
+ "lea 0x20(%0),%0 \n"
1961
+ "shufps $0xdd,%%xmm1,%%xmm0 \n"
1962
+ "movdqu %%xmm0,(%1) \n"
1963
+ "lea 0x10(%1),%1 \n"
1964
+ "sub $0x4,%2 \n"
1965
+ "jg 1b \n"
1966
+ : "+r"(src_argb), // %0
1967
+ "+r"(dst_argb), // %1
1968
+ "+r"(dst_width) // %2
1969
+ :
1970
+ : "memory", "cc", "xmm0", "xmm1");
1971
+ }
1972
+
1973
+ void ScaleARGBRowDown2Linear_SSE2(const uint8_t* src_argb,
1974
+ ptrdiff_t src_stride,
1975
+ uint8_t* dst_argb,
1976
+ int dst_width) {
1977
+ (void)src_stride;
1978
+ asm volatile(
1979
+ "1: \n"
1980
+ "movdqu (%0),%%xmm0 \n"
1981
+ "movdqu 0x10(%0),%%xmm1 \n"
1982
+ "lea 0x20(%0),%0 \n"
1983
+ "movdqa %%xmm0,%%xmm2 \n"
1984
+ "shufps $0x88,%%xmm1,%%xmm0 \n"
1985
+ "shufps $0xdd,%%xmm1,%%xmm2 \n"
1986
+ "pavgb %%xmm2,%%xmm0 \n"
1987
+ "movdqu %%xmm0,(%1) \n"
1988
+ "lea 0x10(%1),%1 \n"
1989
+ "sub $0x4,%2 \n"
1990
+ "jg 1b \n"
1991
+ : "+r"(src_argb), // %0
1992
+ "+r"(dst_argb), // %1
1993
+ "+r"(dst_width) // %2
1994
+ :
1995
+ : "memory", "cc", "xmm0", "xmm1");
1996
+ }
1997
+
1998
+ void ScaleARGBRowDown2Box_SSE2(const uint8_t* src_argb,
1999
+ ptrdiff_t src_stride,
2000
+ uint8_t* dst_argb,
2001
+ int dst_width) {
2002
+ asm volatile(
2003
+ "1: \n"
2004
+ "movdqu (%0),%%xmm0 \n"
2005
+ "movdqu 0x10(%0),%%xmm1 \n"
2006
+ "movdqu 0x00(%0,%3,1),%%xmm2 \n"
2007
+ "movdqu 0x10(%0,%3,1),%%xmm3 \n"
2008
+ "lea 0x20(%0),%0 \n"
2009
+ "pavgb %%xmm2,%%xmm0 \n"
2010
+ "pavgb %%xmm3,%%xmm1 \n"
2011
+ "movdqa %%xmm0,%%xmm2 \n"
2012
+ "shufps $0x88,%%xmm1,%%xmm0 \n"
2013
+ "shufps $0xdd,%%xmm1,%%xmm2 \n"
2014
+ "pavgb %%xmm2,%%xmm0 \n"
2015
+ "movdqu %%xmm0,(%1) \n"
2016
+ "lea 0x10(%1),%1 \n"
2017
+ "sub $0x4,%2 \n"
2018
+ "jg 1b \n"
2019
+ : "+r"(src_argb), // %0
2020
+ "+r"(dst_argb), // %1
2021
+ "+r"(dst_width) // %2
2022
+ : "r"((intptr_t)(src_stride)) // %3
2023
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3");
2024
+ }
2025
+
2026
+ // Reads 4 pixels at a time.
2027
+ // Alignment requirement: dst_argb 16 byte aligned.
2028
+ void ScaleARGBRowDownEven_SSE2(const uint8_t* src_argb,
2029
+ ptrdiff_t src_stride,
2030
+ int src_stepx,
2031
+ uint8_t* dst_argb,
2032
+ int dst_width) {
2033
+ intptr_t src_stepx_x4 = (intptr_t)(src_stepx);
2034
+ intptr_t src_stepx_x12;
2035
+ (void)src_stride;
2036
+ asm volatile(
2037
+ "lea 0x00(,%1,4),%1 \n"
2038
+ "lea 0x00(%1,%1,2),%4 \n"
2039
+
2040
+ LABELALIGN
2041
+ "1: \n"
2042
+ "movd (%0),%%xmm0 \n"
2043
+ "movd 0x00(%0,%1,1),%%xmm1 \n"
2044
+ "punpckldq %%xmm1,%%xmm0 \n"
2045
+ "movd 0x00(%0,%1,2),%%xmm2 \n"
2046
+ "movd 0x00(%0,%4,1),%%xmm3 \n"
2047
+ "lea 0x00(%0,%1,4),%0 \n"
2048
+ "punpckldq %%xmm3,%%xmm2 \n"
2049
+ "punpcklqdq %%xmm2,%%xmm0 \n"
2050
+ "movdqu %%xmm0,(%2) \n"
2051
+ "lea 0x10(%2),%2 \n"
2052
+ "sub $0x4,%3 \n"
2053
+ "jg 1b \n"
2054
+ : "+r"(src_argb), // %0
2055
+ "+r"(src_stepx_x4), // %1
2056
+ "+r"(dst_argb), // %2
2057
+ "+r"(dst_width), // %3
2058
+ "=&r"(src_stepx_x12) // %4
2059
+ :
2060
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3");
2061
+ }
2062
+
2063
+ // Blends four 2x2 to 4x1.
2064
+ // Alignment requirement: dst_argb 16 byte aligned.
2065
+ void ScaleARGBRowDownEvenBox_SSE2(const uint8_t* src_argb,
2066
+ ptrdiff_t src_stride,
2067
+ int src_stepx,
2068
+ uint8_t* dst_argb,
2069
+ int dst_width) {
2070
+ intptr_t src_stepx_x4 = (intptr_t)(src_stepx);
2071
+ intptr_t src_stepx_x12;
2072
+ intptr_t row1 = (intptr_t)(src_stride);
2073
+ asm volatile(
2074
+ "lea 0x00(,%1,4),%1 \n"
2075
+ "lea 0x00(%1,%1,2),%4 \n"
2076
+ "lea 0x00(%0,%5,1),%5 \n"
2077
+
2078
+ LABELALIGN
2079
+ "1: \n"
2080
+ "movq (%0),%%xmm0 \n"
2081
+ "movhps 0x00(%0,%1,1),%%xmm0 \n"
2082
+ "movq 0x00(%0,%1,2),%%xmm1 \n"
2083
+ "movhps 0x00(%0,%4,1),%%xmm1 \n"
2084
+ "lea 0x00(%0,%1,4),%0 \n"
2085
+ "movq (%5),%%xmm2 \n"
2086
+ "movhps 0x00(%5,%1,1),%%xmm2 \n"
2087
+ "movq 0x00(%5,%1,2),%%xmm3 \n"
2088
+ "movhps 0x00(%5,%4,1),%%xmm3 \n"
2089
+ "lea 0x00(%5,%1,4),%5 \n"
2090
+ "pavgb %%xmm2,%%xmm0 \n"
2091
+ "pavgb %%xmm3,%%xmm1 \n"
2092
+ "movdqa %%xmm0,%%xmm2 \n"
2093
+ "shufps $0x88,%%xmm1,%%xmm0 \n"
2094
+ "shufps $0xdd,%%xmm1,%%xmm2 \n"
2095
+ "pavgb %%xmm2,%%xmm0 \n"
2096
+ "movdqu %%xmm0,(%2) \n"
2097
+ "lea 0x10(%2),%2 \n"
2098
+ "sub $0x4,%3 \n"
2099
+ "jg 1b \n"
2100
+ : "+r"(src_argb), // %0
2101
+ "+r"(src_stepx_x4), // %1
2102
+ "+r"(dst_argb), // %2
2103
+ "+rm"(dst_width), // %3
2104
+ "=&r"(src_stepx_x12), // %4
2105
+ "+r"(row1) // %5
2106
+ :
2107
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3");
2108
+ }
2109
+
2110
+ void ScaleARGBCols_SSE2(uint8_t* dst_argb,
2111
+ const uint8_t* src_argb,
2112
+ int dst_width,
2113
+ int x,
2114
+ int dx) {
2115
+ intptr_t x0, x1;
2116
+ asm volatile(
2117
+ "movd %5,%%xmm2 \n"
2118
+ "movd %6,%%xmm3 \n"
2119
+ "pshufd $0x0,%%xmm2,%%xmm2 \n"
2120
+ "pshufd $0x11,%%xmm3,%%xmm0 \n"
2121
+ "paddd %%xmm0,%%xmm2 \n"
2122
+ "paddd %%xmm3,%%xmm3 \n"
2123
+ "pshufd $0x5,%%xmm3,%%xmm0 \n"
2124
+ "paddd %%xmm0,%%xmm2 \n"
2125
+ "paddd %%xmm3,%%xmm3 \n"
2126
+ "pshufd $0x0,%%xmm3,%%xmm3 \n"
2127
+ "pextrw $0x1,%%xmm2,%k0 \n"
2128
+ "pextrw $0x3,%%xmm2,%k1 \n"
2129
+ "cmp $0x0,%4 \n"
2130
+ "jl 99f \n"
2131
+ "sub $0x4,%4 \n"
2132
+ "jl 49f \n"
2133
+
2134
+ LABELALIGN
2135
+ "40: \n"
2136
+ "movd 0x00(%3,%0,4),%%xmm0 \n"
2137
+ "movd 0x00(%3,%1,4),%%xmm1 \n"
2138
+ "pextrw $0x5,%%xmm2,%k0 \n"
2139
+ "pextrw $0x7,%%xmm2,%k1 \n"
2140
+ "paddd %%xmm3,%%xmm2 \n"
2141
+ "punpckldq %%xmm1,%%xmm0 \n"
2142
+ "movd 0x00(%3,%0,4),%%xmm1 \n"
2143
+ "movd 0x00(%3,%1,4),%%xmm4 \n"
2144
+ "pextrw $0x1,%%xmm2,%k0 \n"
2145
+ "pextrw $0x3,%%xmm2,%k1 \n"
2146
+ "punpckldq %%xmm4,%%xmm1 \n"
2147
+ "punpcklqdq %%xmm1,%%xmm0 \n"
2148
+ "movdqu %%xmm0,(%2) \n"
2149
+ "lea 0x10(%2),%2 \n"
2150
+ "sub $0x4,%4 \n"
2151
+ "jge 40b \n"
2152
+
2153
+ "49: \n"
2154
+ "test $0x2,%4 \n"
2155
+ "je 29f \n"
2156
+ "movd 0x00(%3,%0,4),%%xmm0 \n"
2157
+ "movd 0x00(%3,%1,4),%%xmm1 \n"
2158
+ "pextrw $0x5,%%xmm2,%k0 \n"
2159
+ "punpckldq %%xmm1,%%xmm0 \n"
2160
+ "movq %%xmm0,(%2) \n"
2161
+ "lea 0x8(%2),%2 \n"
2162
+ "29: \n"
2163
+ "test $0x1,%4 \n"
2164
+ "je 99f \n"
2165
+ "movd 0x00(%3,%0,4),%%xmm0 \n"
2166
+ "movd %%xmm0,(%2) \n"
2167
+ "99: \n"
2168
+ : "=&a"(x0), // %0
2169
+ "=&d"(x1), // %1
2170
+ "+r"(dst_argb), // %2
2171
+ "+r"(src_argb), // %3
2172
+ "+r"(dst_width) // %4
2173
+ : "rm"(x), // %5
2174
+ "rm"(dx) // %6
2175
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4");
2176
+ }
2177
+
2178
+ // Reads 4 pixels, duplicates them and writes 8 pixels.
2179
+ // Alignment requirement: src_argb 16 byte aligned, dst_argb 16 byte aligned.
2180
+ void ScaleARGBColsUp2_SSE2(uint8_t* dst_argb,
2181
+ const uint8_t* src_argb,
2182
+ int dst_width,
2183
+ int x,
2184
+ int dx) {
2185
+ (void)x;
2186
+ (void)dx;
2187
+ asm volatile(
2188
+ "1: \n"
2189
+ "movdqu (%1),%%xmm0 \n"
2190
+ "lea 0x10(%1),%1 \n"
2191
+ "movdqa %%xmm0,%%xmm1 \n"
2192
+ "punpckldq %%xmm0,%%xmm0 \n"
2193
+ "punpckhdq %%xmm1,%%xmm1 \n"
2194
+ "movdqu %%xmm0,(%0) \n"
2195
+ "movdqu %%xmm1,0x10(%0) \n"
2196
+ "lea 0x20(%0),%0 \n"
2197
+ "sub $0x8,%2 \n"
2198
+ "jg 1b \n"
2199
+
2200
+ : "+r"(dst_argb), // %0
2201
+ "+r"(src_argb), // %1
2202
+ "+r"(dst_width) // %2
2203
+ :
2204
+ : "memory", "cc", "xmm0", "xmm1");
2205
+ }
2206
+
2207
+ // Shuffle table for arranging 2 pixels into pairs for pmaddubsw
2208
+ static const uvec8 kShuffleColARGB = {
2209
+ 0u, 4u, 1u, 5u, 2u, 6u, 3u, 7u, // bbggrraa 1st pixel
2210
+ 8u, 12u, 9u, 13u, 10u, 14u, 11u, 15u // bbggrraa 2nd pixel
2211
+ };
2212
+
2213
+ // Shuffle table for duplicating 2 fractions into 8 bytes each
2214
+ static const uvec8 kShuffleFractions = {
2215
+ 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 4u, 4u, 4u, 4u, 4u, 4u, 4u, 4u,
2216
+ };
2217
+
2218
+ // Bilinear row filtering combines 4x2 -> 4x1. SSSE3 version
2219
+ void ScaleARGBFilterCols_SSSE3(uint8_t* dst_argb,
2220
+ const uint8_t* src_argb,
2221
+ int dst_width,
2222
+ int x,
2223
+ int dx) {
2224
+ intptr_t x0, x1;
2225
+ asm volatile(
2226
+ "movdqa %0,%%xmm4 \n"
2227
+ "movdqa %1,%%xmm5 \n"
2228
+ :
2229
+ : "m"(kShuffleColARGB), // %0
2230
+ "m"(kShuffleFractions) // %1
2231
+ );
2232
+
2233
+ asm volatile(
2234
+ "movd %5,%%xmm2 \n"
2235
+ "movd %6,%%xmm3 \n"
2236
+ "pcmpeqb %%xmm6,%%xmm6 \n"
2237
+ "psrlw $0x9,%%xmm6 \n"
2238
+ "pextrw $0x1,%%xmm2,%k3 \n"
2239
+ "sub $0x2,%2 \n"
2240
+ "jl 29f \n"
2241
+ "movdqa %%xmm2,%%xmm0 \n"
2242
+ "paddd %%xmm3,%%xmm0 \n"
2243
+ "punpckldq %%xmm0,%%xmm2 \n"
2244
+ "punpckldq %%xmm3,%%xmm3 \n"
2245
+ "paddd %%xmm3,%%xmm3 \n"
2246
+ "pextrw $0x3,%%xmm2,%k4 \n"
2247
+
2248
+ LABELALIGN
2249
+ "2: \n"
2250
+ "movdqa %%xmm2,%%xmm1 \n"
2251
+ "paddd %%xmm3,%%xmm2 \n"
2252
+ "movq 0x00(%1,%3,4),%%xmm0 \n"
2253
+ "psrlw $0x9,%%xmm1 \n"
2254
+ "movhps 0x00(%1,%4,4),%%xmm0 \n"
2255
+ "pshufb %%xmm5,%%xmm1 \n"
2256
+ "pshufb %%xmm4,%%xmm0 \n"
2257
+ "pxor %%xmm6,%%xmm1 \n"
2258
+ "pmaddubsw %%xmm1,%%xmm0 \n"
2259
+ "psrlw $0x7,%%xmm0 \n"
2260
+ "pextrw $0x1,%%xmm2,%k3 \n"
2261
+ "pextrw $0x3,%%xmm2,%k4 \n"
2262
+ "packuswb %%xmm0,%%xmm0 \n"
2263
+ "movq %%xmm0,(%0) \n"
2264
+ "lea 0x8(%0),%0 \n"
2265
+ "sub $0x2,%2 \n"
2266
+ "jge 2b \n"
2267
+
2268
+ LABELALIGN
2269
+ "29: \n"
2270
+ "add $0x1,%2 \n"
2271
+ "jl 99f \n"
2272
+ "psrlw $0x9,%%xmm2 \n"
2273
+ "movq 0x00(%1,%3,4),%%xmm0 \n"
2274
+ "pshufb %%xmm5,%%xmm2 \n"
2275
+ "pshufb %%xmm4,%%xmm0 \n"
2276
+ "pxor %%xmm6,%%xmm2 \n"
2277
+ "pmaddubsw %%xmm2,%%xmm0 \n"
2278
+ "psrlw $0x7,%%xmm0 \n"
2279
+ "packuswb %%xmm0,%%xmm0 \n"
2280
+ "movd %%xmm0,(%0) \n"
2281
+
2282
+ LABELALIGN "99: \n"
2283
+
2284
+ : "+r"(dst_argb), // %0
2285
+ "+r"(src_argb), // %1
2286
+ "+rm"(dst_width), // %2
2287
+ "=&r"(x0), // %3
2288
+ "=&r"(x1) // %4
2289
+ : "rm"(x), // %5
2290
+ "rm"(dx) // %6
2291
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6");
2292
+ }
2293
+
2294
+ // Divide num by div and return as 16.16 fixed point result.
2295
+ int FixedDiv_X86(int num, int div) {
2296
+ asm volatile(
2297
+ "cdq \n"
2298
+ "shld $0x10,%%eax,%%edx \n"
2299
+ "shl $0x10,%%eax \n"
2300
+ "idiv %1 \n"
2301
+ "mov %0, %%eax \n"
2302
+ : "+a"(num) // %0
2303
+ : "c"(div) // %1
2304
+ : "memory", "cc", "edx");
2305
+ return num;
2306
+ }
2307
+
2308
+ // Divide num - 1 by div - 1 and return as 16.16 fixed point result.
2309
+ int FixedDiv1_X86(int num, int div) {
2310
+ asm volatile(
2311
+ "cdq \n"
2312
+ "shld $0x10,%%eax,%%edx \n"
2313
+ "shl $0x10,%%eax \n"
2314
+ "sub $0x10001,%%eax \n"
2315
+ "sbb $0x0,%%edx \n"
2316
+ "sub $0x1,%1 \n"
2317
+ "idiv %1 \n"
2318
+ "mov %0, %%eax \n"
2319
+ : "+a"(num) // %0
2320
+ : "c"(div) // %1
2321
+ : "memory", "cc", "edx");
2322
+ return num;
2323
+ }
2324
+
2325
+ #if defined(HAS_SCALEUVROWDOWN2BOX_SSSE3) || \
2326
+ defined(HAS_SCALEUVROWDOWN2BOX_AVX2)
2327
+
2328
+ // Shuffle table for splitting UV into upper and lower part of register.
2329
+ static const uvec8 kShuffleSplitUV = {0u, 2u, 4u, 6u, 8u, 10u, 12u, 14u,
2330
+ 1u, 3u, 5u, 7u, 9u, 11u, 13u, 15u};
2331
+ static const uvec8 kShuffleMergeUV = {0u, 8u, 2u, 10u, 4u, 12u,
2332
+ 6u, 14u, 0x80, 0x80, 0x80, 0x80,
2333
+ 0x80, 0x80, 0x80, 0x80};
2334
+ #endif
2335
+
2336
+ #ifdef HAS_SCALEUVROWDOWN2BOX_SSSE3
2337
+
2338
+ void ScaleUVRowDown2Box_SSSE3(const uint8_t* src_ptr,
2339
+ ptrdiff_t src_stride,
2340
+ uint8_t* dst_ptr,
2341
+ int dst_width) {
2342
+ asm volatile(
2343
+ "pcmpeqb %%xmm4,%%xmm4 \n" // 01010101
2344
+ "psrlw $0xf,%%xmm4 \n"
2345
+ "packuswb %%xmm4,%%xmm4 \n"
2346
+ "pxor %%xmm5, %%xmm5 \n" // zero
2347
+ "movdqa %4,%%xmm1 \n" // split shuffler
2348
+ "movdqa %5,%%xmm3 \n" // merge shuffler
2349
+
2350
+ LABELALIGN
2351
+ "1: \n"
2352
+ "movdqu (%0),%%xmm0 \n" // 8 UV row 0
2353
+ "movdqu 0x00(%0,%3,1),%%xmm2 \n" // 8 UV row 1
2354
+ "lea 0x10(%0),%0 \n"
2355
+ "pshufb %%xmm1,%%xmm0 \n" // uuuuvvvv
2356
+ "pshufb %%xmm1,%%xmm2 \n"
2357
+ "pmaddubsw %%xmm4,%%xmm0 \n" // horizontal add
2358
+ "pmaddubsw %%xmm4,%%xmm2 \n"
2359
+ "paddw %%xmm2,%%xmm0 \n" // vertical add
2360
+ "psrlw $0x1,%%xmm0 \n" // round
2361
+ "pavgw %%xmm5,%%xmm0 \n"
2362
+ "pshufb %%xmm3,%%xmm0 \n" // merge uv
2363
+ "movq %%xmm0,(%1) \n"
2364
+ "lea 0x8(%1),%1 \n" // 4 UV
2365
+ "sub $0x4,%2 \n"
2366
+ "jg 1b \n"
2367
+ : "+r"(src_ptr), // %0
2368
+ "+r"(dst_ptr), // %1
2369
+ "+r"(dst_width) // %2
2370
+ : "r"((intptr_t)(src_stride)), // %3
2371
+ "m"(kShuffleSplitUV), // %4
2372
+ "m"(kShuffleMergeUV) // %5
2373
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
2374
+ }
2375
+ #endif // HAS_SCALEUVROWDOWN2BOX_SSSE3
2376
+
2377
+ #ifdef HAS_SCALEUVROWDOWN2BOX_AVX2
2378
+ void ScaleUVRowDown2Box_AVX2(const uint8_t* src_ptr,
2379
+ ptrdiff_t src_stride,
2380
+ uint8_t* dst_ptr,
2381
+ int dst_width) {
2382
+ asm volatile(
2383
+ "vpcmpeqb %%ymm4,%%ymm4,%%ymm4 \n" // 01010101
2384
+ "vpabsb %%ymm4,%%ymm4 \n"
2385
+ "vpxor %%ymm5,%%ymm5,%%ymm5 \n" // zero
2386
+ "vbroadcastf128 %4,%%ymm1 \n" // split shuffler
2387
+ "vbroadcastf128 %5,%%ymm3 \n" // merge shuffler
2388
+
2389
+ LABELALIGN
2390
+ "1: \n"
2391
+ "vmovdqu (%0),%%ymm0 \n" // 16 UV row 0
2392
+ "vmovdqu 0x00(%0,%3,1),%%ymm2 \n" // 16 UV row 1
2393
+ "lea 0x20(%0),%0 \n"
2394
+ "vpshufb %%ymm1,%%ymm0,%%ymm0 \n" // uuuuvvvv
2395
+ "vpshufb %%ymm1,%%ymm2,%%ymm2 \n"
2396
+ "vpmaddubsw %%ymm4,%%ymm0,%%ymm0 \n" // horizontal add
2397
+ "vpmaddubsw %%ymm4,%%ymm2,%%ymm2 \n"
2398
+ "vpaddw %%ymm2,%%ymm0,%%ymm0 \n" // vertical add
2399
+ "vpsrlw $0x1,%%ymm0,%%ymm0 \n" // round
2400
+ "vpavgw %%ymm5,%%ymm0,%%ymm0 \n"
2401
+ "vpshufb %%ymm3,%%ymm0,%%ymm0 \n" // merge uv
2402
+ "vpermq $0xd8,%%ymm0,%%ymm0 \n" // combine qwords
2403
+ "vmovdqu %%xmm0,(%1) \n"
2404
+ "lea 0x10(%1),%1 \n" // 8 UV
2405
+ "sub $0x8,%2 \n"
2406
+ "jg 1b \n"
2407
+ "vzeroupper \n"
2408
+ : "+r"(src_ptr), // %0
2409
+ "+r"(dst_ptr), // %1
2410
+ "+r"(dst_width) // %2
2411
+ : "r"((intptr_t)(src_stride)), // %3
2412
+ "m"(kShuffleSplitUV), // %4
2413
+ "m"(kShuffleMergeUV) // %5
2414
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
2415
+ }
2416
+ #endif // HAS_SCALEUVROWDOWN2BOX_AVX2
2417
+
2418
+ static const uvec8 kUVLinearMadd31 = {3, 1, 3, 1, 1, 3, 1, 3,
2419
+ 3, 1, 3, 1, 1, 3, 1, 3};
2420
+
2421
+ #ifdef HAS_SCALEUVROWUP2_LINEAR_SSSE3
2422
+ void ScaleUVRowUp2_Linear_SSSE3(const uint8_t* src_ptr,
2423
+ uint8_t* dst_ptr,
2424
+ int dst_width) {
2425
+ asm volatile(
2426
+ "pcmpeqw %%xmm4,%%xmm4 \n"
2427
+ "psrlw $15,%%xmm4 \n"
2428
+ "psllw $1,%%xmm4 \n" // all 2
2429
+ "movdqa %3,%%xmm3 \n"
2430
+
2431
+ LABELALIGN
2432
+ "1: \n"
2433
+ "movq (%0),%%xmm0 \n" // 00112233 (1u1v)
2434
+ "movq 2(%0),%%xmm1 \n" // 11223344 (1u1v)
2435
+ "punpcklbw %%xmm1,%%xmm0 \n" // 0101121223233434 (2u2v)
2436
+ "movdqa %%xmm0,%%xmm2 \n"
2437
+ "punpckhdq %%xmm0,%%xmm2 \n" // 2323232334343434 (2u2v)
2438
+ "punpckldq %%xmm0,%%xmm0 \n" // 0101010112121212 (2u2v)
2439
+ "pmaddubsw %%xmm3,%%xmm2 \n" // 3*near+far (1u1v16, hi)
2440
+ "pmaddubsw %%xmm3,%%xmm0 \n" // 3*near+far (1u1v16, lo)
2441
+ "paddw %%xmm4,%%xmm0 \n" // 3*near+far+2 (lo)
2442
+ "paddw %%xmm4,%%xmm2 \n" // 3*near+far+2 (hi)
2443
+ "psrlw $2,%%xmm0 \n" // 3/4*near+1/4*far (lo)
2444
+ "psrlw $2,%%xmm2 \n" // 3/4*near+1/4*far (hi)
2445
+ "packuswb %%xmm2,%%xmm0 \n"
2446
+ "movdqu %%xmm0,(%1) \n"
2447
+
2448
+ "lea 0x8(%0),%0 \n"
2449
+ "lea 0x10(%1),%1 \n" // 4 uv to 8 uv
2450
+ "sub $0x8,%2 \n"
2451
+ "jg 1b \n"
2452
+ : "+r"(src_ptr), // %0
2453
+ "+r"(dst_ptr), // %1
2454
+ "+r"(dst_width) // %2
2455
+ : "m"(kUVLinearMadd31) // %3
2456
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6");
2457
+ }
2458
+ #endif
2459
+
2460
+ #ifdef HAS_SCALEUVROWUP2_BILINEAR_SSSE3
2461
+ void ScaleUVRowUp2_Bilinear_SSSE3(const uint8_t* src_ptr,
2462
+ ptrdiff_t src_stride,
2463
+ uint8_t* dst_ptr,
2464
+ ptrdiff_t dst_stride,
2465
+ int dst_width) {
2466
+ asm volatile(
2467
+ "pcmpeqw %%xmm6,%%xmm6 \n"
2468
+ "psrlw $15,%%xmm6 \n"
2469
+ "psllw $3,%%xmm6 \n" // all 8
2470
+ "movdqa %5,%%xmm7 \n"
2471
+
2472
+ LABELALIGN
2473
+ "1: \n"
2474
+ "movq (%0),%%xmm0 \n" // 00112233 (1u1v)
2475
+ "movq 2(%0),%%xmm1 \n" // 11223344 (1u1v)
2476
+ "punpcklbw %%xmm1,%%xmm0 \n" // 0101121223233434 (2u2v)
2477
+ "movdqa %%xmm0,%%xmm2 \n"
2478
+ "punpckhdq %%xmm0,%%xmm2 \n" // 2323232334343434 (2u2v)
2479
+ "punpckldq %%xmm0,%%xmm0 \n" // 0101010112121212 (2u2v)
2480
+ "pmaddubsw %%xmm7,%%xmm2 \n" // 3*near+far (1u1v16, hi)
2481
+ "pmaddubsw %%xmm7,%%xmm0 \n" // 3*near+far (1u1v16, lo)
2482
+
2483
+ "movq (%0,%3),%%xmm1 \n"
2484
+ "movq 2(%0,%3),%%xmm4 \n"
2485
+ "punpcklbw %%xmm4,%%xmm1 \n"
2486
+ "movdqa %%xmm1,%%xmm3 \n"
2487
+ "punpckhdq %%xmm1,%%xmm3 \n"
2488
+ "punpckldq %%xmm1,%%xmm1 \n"
2489
+ "pmaddubsw %%xmm7,%%xmm3 \n" // 3*near+far (2, hi)
2490
+ "pmaddubsw %%xmm7,%%xmm1 \n" // 3*near+far (2, lo)
2491
+
2492
+ // xmm0 xmm2
2493
+ // xmm1 xmm3
2494
+
2495
+ "movdqa %%xmm0,%%xmm4 \n"
2496
+ "movdqa %%xmm1,%%xmm5 \n"
2497
+ "paddw %%xmm0,%%xmm4 \n" // 6*near+2*far (1, lo)
2498
+ "paddw %%xmm6,%%xmm5 \n" // 3*near+far+8 (2, lo)
2499
+ "paddw %%xmm0,%%xmm4 \n" // 9*near+3*far (1, lo)
2500
+ "paddw %%xmm5,%%xmm4 \n" // 9 3 3 1 + 8 (1, lo)
2501
+ "psrlw $4,%%xmm4 \n" // ^ div by 16 (1, lo)
2502
+
2503
+ "movdqa %%xmm1,%%xmm5 \n"
2504
+ "paddw %%xmm1,%%xmm5 \n" // 6*near+2*far (2, lo)
2505
+ "paddw %%xmm6,%%xmm0 \n" // 3*near+far+8 (1, lo)
2506
+ "paddw %%xmm1,%%xmm5 \n" // 9*near+3*far (2, lo)
2507
+ "paddw %%xmm0,%%xmm5 \n" // 9 3 3 1 + 8 (2, lo)
2508
+ "psrlw $4,%%xmm5 \n" // ^ div by 16 (2, lo)
2509
+
2510
+ "movdqa %%xmm2,%%xmm0 \n"
2511
+ "movdqa %%xmm3,%%xmm1 \n"
2512
+ "paddw %%xmm2,%%xmm0 \n" // 6*near+2*far (1, hi)
2513
+ "paddw %%xmm6,%%xmm1 \n" // 3*near+far+8 (2, hi)
2514
+ "paddw %%xmm2,%%xmm0 \n" // 9*near+3*far (1, hi)
2515
+ "paddw %%xmm1,%%xmm0 \n" // 9 3 3 1 + 8 (1, hi)
2516
+ "psrlw $4,%%xmm0 \n" // ^ div by 16 (1, hi)
2517
+
2518
+ "movdqa %%xmm3,%%xmm1 \n"
2519
+ "paddw %%xmm3,%%xmm1 \n" // 6*near+2*far (2, hi)
2520
+ "paddw %%xmm6,%%xmm2 \n" // 3*near+far+8 (1, hi)
2521
+ "paddw %%xmm3,%%xmm1 \n" // 9*near+3*far (2, hi)
2522
+ "paddw %%xmm2,%%xmm1 \n" // 9 3 3 1 + 8 (2, hi)
2523
+ "psrlw $4,%%xmm1 \n" // ^ div by 16 (2, hi)
2524
+
2525
+ "packuswb %%xmm0,%%xmm4 \n"
2526
+ "movdqu %%xmm4,(%1) \n" // store above
2527
+ "packuswb %%xmm1,%%xmm5 \n"
2528
+ "movdqu %%xmm5,(%1,%4) \n" // store below
2529
+
2530
+ "lea 0x8(%0),%0 \n"
2531
+ "lea 0x10(%1),%1 \n" // 4 uv to 8 uv
2532
+ "sub $0x8,%2 \n"
2533
+ "jg 1b \n"
2534
+ : "+r"(src_ptr), // %0
2535
+ "+r"(dst_ptr), // %1
2536
+ "+r"(dst_width) // %2
2537
+ : "r"((intptr_t)(src_stride)), // %3
2538
+ "r"((intptr_t)(dst_stride)), // %4
2539
+ "m"(kUVLinearMadd31) // %5
2540
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
2541
+ "xmm7");
2542
+ }
2543
+ #endif
2544
+
2545
+ #ifdef HAS_SCALEUVROWUP2_LINEAR_AVX2
2546
+
2547
+ void ScaleUVRowUp2_Linear_AVX2(const uint8_t* src_ptr,
2548
+ uint8_t* dst_ptr,
2549
+ int dst_width) {
2550
+ asm volatile(
2551
+ "vpcmpeqw %%ymm4,%%ymm4,%%ymm4 \n"
2552
+ "vpsrlw $15,%%ymm4,%%ymm4 \n"
2553
+ "vpsllw $1,%%ymm4,%%ymm4 \n" // all 2
2554
+ "vbroadcastf128 %3,%%ymm3 \n"
2555
+
2556
+ LABELALIGN
2557
+ "1: \n"
2558
+ "vmovdqu (%0),%%xmm0 \n"
2559
+ "vmovdqu 2(%0),%%xmm1 \n"
2560
+ "vpermq $0b11011000,%%ymm0,%%ymm0 \n"
2561
+ "vpermq $0b11011000,%%ymm1,%%ymm1 \n"
2562
+ "vpunpcklbw %%ymm1,%%ymm0,%%ymm0 \n"
2563
+ "vpunpckhdq %%ymm0,%%ymm0,%%ymm2 \n"
2564
+ "vpunpckldq %%ymm0,%%ymm0,%%ymm0 \n"
2565
+ "vpmaddubsw %%ymm3,%%ymm2,%%ymm1 \n" // 3*near+far (hi)
2566
+ "vpmaddubsw %%ymm3,%%ymm0,%%ymm0 \n" // 3*near+far (lo)
2567
+ "vpaddw %%ymm4,%%ymm0,%%ymm0 \n" // 3*near+far+2 (lo)
2568
+ "vpaddw %%ymm4,%%ymm1,%%ymm1 \n" // 3*near+far+2 (hi)
2569
+ "vpsrlw $2,%%ymm0,%%ymm0 \n" // 3/4*near+1/4*far (lo)
2570
+ "vpsrlw $2,%%ymm1,%%ymm1 \n" // 3/4*near+1/4*far (hi)
2571
+ "vpackuswb %%ymm1,%%ymm0,%%ymm0 \n"
2572
+ "vmovdqu %%ymm0,(%1) \n"
2573
+
2574
+ "lea 0x10(%0),%0 \n"
2575
+ "lea 0x20(%1),%1 \n" // 8 uv to 16 uv
2576
+ "sub $0x10,%2 \n"
2577
+ "jg 1b \n"
2578
+ "vzeroupper \n"
2579
+ : "+r"(src_ptr), // %0
2580
+ "+r"(dst_ptr), // %1
2581
+ "+r"(dst_width) // %2
2582
+ : "m"(kUVLinearMadd31) // %3
2583
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4");
2584
+ }
2585
+ #endif
2586
+
2587
+ #ifdef HAS_SCALEUVROWUP2_BILINEAR_AVX2
2588
+ void ScaleUVRowUp2_Bilinear_AVX2(const uint8_t* src_ptr,
2589
+ ptrdiff_t src_stride,
2590
+ uint8_t* dst_ptr,
2591
+ ptrdiff_t dst_stride,
2592
+ int dst_width) {
2593
+ asm volatile(
2594
+ "vpcmpeqw %%ymm6,%%ymm6,%%ymm6 \n"
2595
+ "vpsrlw $15,%%ymm6,%%ymm6 \n"
2596
+ "vpsllw $3,%%ymm6,%%ymm6 \n" // all 8
2597
+ "vbroadcastf128 %5,%%ymm7 \n"
2598
+
2599
+ LABELALIGN
2600
+ "1: \n"
2601
+ "vmovdqu (%0),%%xmm0 \n"
2602
+ "vmovdqu 2(%0),%%xmm1 \n"
2603
+ "vpermq $0b11011000,%%ymm0,%%ymm0 \n"
2604
+ "vpermq $0b11011000,%%ymm1,%%ymm1 \n"
2605
+ "vpunpcklbw %%ymm1,%%ymm0,%%ymm0 \n"
2606
+ "vpunpckhdq %%ymm0,%%ymm0,%%ymm2 \n"
2607
+ "vpunpckldq %%ymm0,%%ymm0,%%ymm0 \n"
2608
+ "vpmaddubsw %%ymm7,%%ymm2,%%ymm1 \n" // 3*near+far (1, hi)
2609
+ "vpmaddubsw %%ymm7,%%ymm0,%%ymm0 \n" // 3*near+far (1, lo)
2610
+
2611
+ "vmovdqu (%0,%3),%%xmm2 \n" // 0123456789ABCDEF
2612
+ "vmovdqu 2(%0,%3),%%xmm3 \n" // 123456789ABCDEF0
2613
+ "vpermq $0b11011000,%%ymm2,%%ymm2 \n"
2614
+ "vpermq $0b11011000,%%ymm3,%%ymm3 \n"
2615
+ "vpunpcklbw %%ymm3,%%ymm2,%%ymm2 \n"
2616
+ "vpunpckhdq %%ymm2,%%ymm2,%%ymm4 \n"
2617
+ "vpunpckldq %%ymm2,%%ymm2,%%ymm2 \n"
2618
+ "vpmaddubsw %%ymm7,%%ymm4,%%ymm3 \n" // 3*near+far (2, hi)
2619
+ "vpmaddubsw %%ymm7,%%ymm2,%%ymm2 \n" // 3*near+far (2, lo)
2620
+
2621
+ // ymm0 ymm1
2622
+ // ymm2 ymm3
2623
+
2624
+ "vpaddw %%ymm0,%%ymm0,%%ymm4 \n" // 6*near+2*far (1, lo)
2625
+ "vpaddw %%ymm6,%%ymm2,%%ymm5 \n" // 3*near+far+8 (2, lo)
2626
+ "vpaddw %%ymm4,%%ymm0,%%ymm4 \n" // 9*near+3*far (1, lo)
2627
+ "vpaddw %%ymm4,%%ymm5,%%ymm4 \n" // 9 3 3 1 + 8 (1, lo)
2628
+ "vpsrlw $4,%%ymm4,%%ymm4 \n" // ^ div by 16 (1, lo)
2629
+
2630
+ "vpaddw %%ymm2,%%ymm2,%%ymm5 \n" // 6*near+2*far (2, lo)
2631
+ "vpaddw %%ymm6,%%ymm0,%%ymm0 \n" // 3*near+far+8 (1, lo)
2632
+ "vpaddw %%ymm5,%%ymm2,%%ymm5 \n" // 9*near+3*far (2, lo)
2633
+ "vpaddw %%ymm5,%%ymm0,%%ymm5 \n" // 9 3 3 1 + 8 (2, lo)
2634
+ "vpsrlw $4,%%ymm5,%%ymm5 \n" // ^ div by 16 (2, lo)
2635
+
2636
+ "vpaddw %%ymm1,%%ymm1,%%ymm0 \n" // 6*near+2*far (1, hi)
2637
+ "vpaddw %%ymm6,%%ymm3,%%ymm2 \n" // 3*near+far+8 (2, hi)
2638
+ "vpaddw %%ymm0,%%ymm1,%%ymm0 \n" // 9*near+3*far (1, hi)
2639
+ "vpaddw %%ymm0,%%ymm2,%%ymm0 \n" // 9 3 3 1 + 8 (1, hi)
2640
+ "vpsrlw $4,%%ymm0,%%ymm0 \n" // ^ div by 16 (1, hi)
2641
+
2642
+ "vpaddw %%ymm3,%%ymm3,%%ymm2 \n" // 6*near+2*far (2, hi)
2643
+ "vpaddw %%ymm6,%%ymm1,%%ymm1 \n" // 3*near+far+8 (1, hi)
2644
+ "vpaddw %%ymm2,%%ymm3,%%ymm2 \n" // 9*near+3*far (2, hi)
2645
+ "vpaddw %%ymm2,%%ymm1,%%ymm2 \n" // 9 3 3 1 + 8 (2, hi)
2646
+ "vpsrlw $4,%%ymm2,%%ymm2 \n" // ^ div by 16 (2, hi)
2647
+
2648
+ "vpackuswb %%ymm0,%%ymm4,%%ymm4 \n"
2649
+ "vmovdqu %%ymm4,(%1) \n" // store above
2650
+ "vpackuswb %%ymm2,%%ymm5,%%ymm5 \n"
2651
+ "vmovdqu %%ymm5,(%1,%4) \n" // store below
2652
+
2653
+ "lea 0x10(%0),%0 \n"
2654
+ "lea 0x20(%1),%1 \n" // 8 uv to 16 uv
2655
+ "sub $0x10,%2 \n"
2656
+ "jg 1b \n"
2657
+ "vzeroupper \n"
2658
+ : "+r"(src_ptr), // %0
2659
+ "+r"(dst_ptr), // %1
2660
+ "+r"(dst_width) // %2
2661
+ : "r"((intptr_t)(src_stride)), // %3
2662
+ "r"((intptr_t)(dst_stride)), // %4
2663
+ "m"(kUVLinearMadd31) // %5
2664
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
2665
+ "xmm7");
2666
+ }
2667
+ #endif
2668
+
2669
+ #ifdef HAS_SCALEUVROWUP2_LINEAR_16_SSE41
2670
+ void ScaleUVRowUp2_Linear_16_SSE41(const uint16_t* src_ptr,
2671
+ uint16_t* dst_ptr,
2672
+ int dst_width) {
2673
+ asm volatile(
2674
+ "pxor %%xmm5,%%xmm5 \n"
2675
+ "pcmpeqd %%xmm4,%%xmm4 \n"
2676
+ "psrld $31,%%xmm4 \n"
2677
+ "pslld $1,%%xmm4 \n" // all 2
2678
+
2679
+ LABELALIGN
2680
+ "1: \n"
2681
+ "movq (%0),%%xmm0 \n" // 0011 (16b, 1u1v)
2682
+ "movq 4(%0),%%xmm1 \n" // 1122 (16b, 1u1v)
2683
+
2684
+ "punpcklwd %%xmm5,%%xmm0 \n" // 0011 (32b, 1u1v)
2685
+ "punpcklwd %%xmm5,%%xmm1 \n" // 1122 (32b, 1u1v)
2686
+
2687
+ "movdqa %%xmm0,%%xmm2 \n"
2688
+ "movdqa %%xmm1,%%xmm3 \n"
2689
+
2690
+ "pshufd $0b01001110,%%xmm2,%%xmm2 \n" // 1100 (lo, far)
2691
+ "pshufd $0b01001110,%%xmm3,%%xmm3 \n" // 2211 (hi, far)
2692
+
2693
+ "paddd %%xmm4,%%xmm2 \n" // far+2 (lo)
2694
+ "paddd %%xmm4,%%xmm3 \n" // far+2 (hi)
2695
+ "paddd %%xmm0,%%xmm2 \n" // near+far+2 (lo)
2696
+ "paddd %%xmm1,%%xmm3 \n" // near+far+2 (hi)
2697
+ "paddd %%xmm0,%%xmm0 \n" // 2*near (lo)
2698
+ "paddd %%xmm1,%%xmm1 \n" // 2*near (hi)
2699
+ "paddd %%xmm2,%%xmm0 \n" // 3*near+far+2 (lo)
2700
+ "paddd %%xmm3,%%xmm1 \n" // 3*near+far+2 (hi)
2701
+
2702
+ "psrld $2,%%xmm0 \n" // 3/4*near+1/4*far (lo)
2703
+ "psrld $2,%%xmm1 \n" // 3/4*near+1/4*far (hi)
2704
+ "packusdw %%xmm1,%%xmm0 \n"
2705
+ "movdqu %%xmm0,(%1) \n"
2706
+
2707
+ "lea 0x8(%0),%0 \n"
2708
+ "lea 0x10(%1),%1 \n" // 2 uv to 4 uv
2709
+ "sub $0x4,%2 \n"
2710
+ "jg 1b \n"
2711
+ : "+r"(src_ptr), // %0
2712
+ "+r"(dst_ptr), // %1
2713
+ "+r"(dst_width) // %2
2714
+ :
2715
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5");
2716
+ }
2717
+ #endif
2718
+
2719
+ #ifdef HAS_SCALEUVROWUP2_BILINEAR_16_SSE41
2720
+ void ScaleUVRowUp2_Bilinear_16_SSE41(const uint16_t* src_ptr,
2721
+ ptrdiff_t src_stride,
2722
+ uint16_t* dst_ptr,
2723
+ ptrdiff_t dst_stride,
2724
+ int dst_width) {
2725
+ asm volatile(
2726
+ "pxor %%xmm7,%%xmm7 \n"
2727
+ "pcmpeqd %%xmm6,%%xmm6 \n"
2728
+ "psrld $31,%%xmm6 \n"
2729
+ "pslld $3,%%xmm6 \n" // all 8
2730
+
2731
+ LABELALIGN
2732
+ "1: \n"
2733
+ "movq (%0),%%xmm0 \n" // 0011 (16b, 1u1v)
2734
+ "movq 4(%0),%%xmm1 \n" // 1122 (16b, 1u1v)
2735
+ "punpcklwd %%xmm7,%%xmm0 \n" // 0011 (near) (32b, 1u1v)
2736
+ "punpcklwd %%xmm7,%%xmm1 \n" // 1122 (near) (32b, 1u1v)
2737
+ "movdqa %%xmm0,%%xmm2 \n"
2738
+ "movdqa %%xmm1,%%xmm3 \n"
2739
+ "pshufd $0b01001110,%%xmm2,%%xmm2 \n" // 1100 (far) (1, lo)
2740
+ "pshufd $0b01001110,%%xmm3,%%xmm3 \n" // 2211 (far) (1, hi)
2741
+ "paddd %%xmm0,%%xmm2 \n" // near+far (1, lo)
2742
+ "paddd %%xmm1,%%xmm3 \n" // near+far (1, hi)
2743
+ "paddd %%xmm0,%%xmm0 \n" // 2*near (1, lo)
2744
+ "paddd %%xmm1,%%xmm1 \n" // 2*near (1, hi)
2745
+ "paddd %%xmm2,%%xmm0 \n" // 3*near+far (1, lo)
2746
+ "paddd %%xmm3,%%xmm1 \n" // 3*near+far (1, hi)
2747
+
2748
+ "movq (%0,%3,2),%%xmm2 \n"
2749
+ "movq 4(%0,%3,2),%%xmm3 \n"
2750
+ "punpcklwd %%xmm7,%%xmm2 \n"
2751
+ "punpcklwd %%xmm7,%%xmm3 \n"
2752
+ "movdqa %%xmm2,%%xmm4 \n"
2753
+ "movdqa %%xmm3,%%xmm5 \n"
2754
+ "pshufd $0b01001110,%%xmm4,%%xmm4 \n" // 1100 (far) (2, lo)
2755
+ "pshufd $0b01001110,%%xmm5,%%xmm5 \n" // 2211 (far) (2, hi)
2756
+ "paddd %%xmm2,%%xmm4 \n" // near+far (2, lo)
2757
+ "paddd %%xmm3,%%xmm5 \n" // near+far (2, hi)
2758
+ "paddd %%xmm2,%%xmm2 \n" // 2*near (2, lo)
2759
+ "paddd %%xmm3,%%xmm3 \n" // 2*near (2, hi)
2760
+ "paddd %%xmm4,%%xmm2 \n" // 3*near+far (2, lo)
2761
+ "paddd %%xmm5,%%xmm3 \n" // 3*near+far (2, hi)
2762
+
2763
+ "movdqa %%xmm0,%%xmm4 \n"
2764
+ "movdqa %%xmm2,%%xmm5 \n"
2765
+ "paddd %%xmm0,%%xmm4 \n" // 6*near+2*far (1, lo)
2766
+ "paddd %%xmm6,%%xmm5 \n" // 3*near+far+8 (2, lo)
2767
+ "paddd %%xmm0,%%xmm4 \n" // 9*near+3*far (1, lo)
2768
+ "paddd %%xmm5,%%xmm4 \n" // 9 3 3 1 + 8 (1, lo)
2769
+ "psrld $4,%%xmm4 \n" // ^ div by 16 (1, lo)
2770
+
2771
+ "movdqa %%xmm2,%%xmm5 \n"
2772
+ "paddd %%xmm2,%%xmm5 \n" // 6*near+2*far (2, lo)
2773
+ "paddd %%xmm6,%%xmm0 \n" // 3*near+far+8 (1, lo)
2774
+ "paddd %%xmm2,%%xmm5 \n" // 9*near+3*far (2, lo)
2775
+ "paddd %%xmm0,%%xmm5 \n" // 9 3 3 1 + 8 (2, lo)
2776
+ "psrld $4,%%xmm5 \n" // ^ div by 16 (2, lo)
2777
+
2778
+ "movdqa %%xmm1,%%xmm0 \n"
2779
+ "movdqa %%xmm3,%%xmm2 \n"
2780
+ "paddd %%xmm1,%%xmm0 \n" // 6*near+2*far (1, hi)
2781
+ "paddd %%xmm6,%%xmm2 \n" // 3*near+far+8 (2, hi)
2782
+ "paddd %%xmm1,%%xmm0 \n" // 9*near+3*far (1, hi)
2783
+ "paddd %%xmm2,%%xmm0 \n" // 9 3 3 1 + 8 (1, hi)
2784
+ "psrld $4,%%xmm0 \n" // ^ div by 16 (1, hi)
2785
+
2786
+ "movdqa %%xmm3,%%xmm2 \n"
2787
+ "paddd %%xmm3,%%xmm2 \n" // 6*near+2*far (2, hi)
2788
+ "paddd %%xmm6,%%xmm1 \n" // 3*near+far+8 (1, hi)
2789
+ "paddd %%xmm3,%%xmm2 \n" // 9*near+3*far (2, hi)
2790
+ "paddd %%xmm1,%%xmm2 \n" // 9 3 3 1 + 8 (2, hi)
2791
+ "psrld $4,%%xmm2 \n" // ^ div by 16 (2, hi)
2792
+
2793
+ "packusdw %%xmm0,%%xmm4 \n"
2794
+ "movdqu %%xmm4,(%1) \n" // store above
2795
+ "packusdw %%xmm2,%%xmm5 \n"
2796
+ "movdqu %%xmm5,(%1,%4,2) \n" // store below
2797
+
2798
+ "lea 0x8(%0),%0 \n"
2799
+ "lea 0x10(%1),%1 \n" // 2 uv to 4 uv
2800
+ "sub $0x4,%2 \n"
2801
+ "jg 1b \n"
2802
+ : "+r"(src_ptr), // %0
2803
+ "+r"(dst_ptr), // %1
2804
+ "+r"(dst_width) // %2
2805
+ : "r"((intptr_t)(src_stride)), // %3
2806
+ "r"((intptr_t)(dst_stride)) // %4
2807
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6",
2808
+ "xmm7");
2809
+ }
2810
+ #endif
2811
+
2812
+ #ifdef HAS_SCALEUVROWUP2_LINEAR_16_AVX2
2813
+ void ScaleUVRowUp2_Linear_16_AVX2(const uint16_t* src_ptr,
2814
+ uint16_t* dst_ptr,
2815
+ int dst_width) {
2816
+ asm volatile(
2817
+ "vpcmpeqd %%ymm4,%%ymm4,%%ymm4 \n"
2818
+ "vpsrld $31,%%ymm4,%%ymm4 \n"
2819
+ "vpslld $1,%%ymm4,%%ymm4 \n" // all 2
2820
+
2821
+ LABELALIGN
2822
+ "1: \n"
2823
+ "vmovdqu (%0),%%xmm0 \n" // 00112233 (16b, 1u1v)
2824
+ "vmovdqu 4(%0),%%xmm1 \n" // 11223344 (16b, 1u1v)
2825
+
2826
+ "vpmovzxwd %%xmm0,%%ymm0 \n" // 01234567 (32b, 1u1v)
2827
+ "vpmovzxwd %%xmm1,%%ymm1 \n" // 12345678 (32b, 1u1v)
2828
+
2829
+ "vpshufd $0b01001110,%%ymm0,%%ymm2 \n" // 11003322 (lo, far)
2830
+ "vpshufd $0b01001110,%%ymm1,%%ymm3 \n" // 22114433 (hi, far)
2831
+
2832
+ "vpaddd %%ymm4,%%ymm2,%%ymm2 \n" // far+2 (lo)
2833
+ "vpaddd %%ymm4,%%ymm3,%%ymm3 \n" // far+2 (hi)
2834
+ "vpaddd %%ymm0,%%ymm2,%%ymm2 \n" // near+far+2 (lo)
2835
+ "vpaddd %%ymm1,%%ymm3,%%ymm3 \n" // near+far+2 (hi)
2836
+ "vpaddd %%ymm0,%%ymm0,%%ymm0 \n" // 2*near (lo)
2837
+ "vpaddd %%ymm1,%%ymm1,%%ymm1 \n" // 2*near (hi)
2838
+ "vpaddd %%ymm0,%%ymm2,%%ymm0 \n" // 3*near+far+2 (lo)
2839
+ "vpaddd %%ymm1,%%ymm3,%%ymm1 \n" // 3*near+far+2 (hi)
2840
+
2841
+ "vpsrld $2,%%ymm0,%%ymm0 \n" // 3/4*near+1/4*far (lo)
2842
+ "vpsrld $2,%%ymm1,%%ymm1 \n" // 3/4*near+1/4*far (hi)
2843
+ "vpackusdw %%ymm1,%%ymm0,%%ymm0 \n"
2844
+ "vmovdqu %%ymm0,(%1) \n"
2845
+
2846
+ "lea 0x10(%0),%0 \n"
2847
+ "lea 0x20(%1),%1 \n" // 4 uv to 8 uv
2848
+ "sub $0x8,%2 \n"
2849
+ "jg 1b \n"
2850
+ "vzeroupper \n"
2851
+ : "+r"(src_ptr), // %0
2852
+ "+r"(dst_ptr), // %1
2853
+ "+r"(dst_width) // %2
2854
+ :
2855
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4");
2856
+ }
2857
+ #endif
2858
+
2859
+ #ifdef HAS_SCALEUVROWUP2_BILINEAR_16_AVX2
2860
+ void ScaleUVRowUp2_Bilinear_16_AVX2(const uint16_t* src_ptr,
2861
+ ptrdiff_t src_stride,
2862
+ uint16_t* dst_ptr,
2863
+ ptrdiff_t dst_stride,
2864
+ int dst_width) {
2865
+ asm volatile(
2866
+ "vpcmpeqd %%ymm6,%%ymm6,%%ymm6 \n"
2867
+ "vpsrld $31,%%ymm6,%%ymm6 \n"
2868
+ "vpslld $3,%%ymm6,%%ymm6 \n" // all 8
2869
+
2870
+ LABELALIGN
2871
+ "1: \n"
2872
+
2873
+ "vmovdqu (%0),%%xmm0 \n" // 00112233 (16b, 1u1v)
2874
+ "vmovdqu 4(%0),%%xmm1 \n" // 11223344 (16b, 1u1v)
2875
+ "vpmovzxwd %%xmm0,%%ymm0 \n" // 01234567 (32b, 1u1v)
2876
+ "vpmovzxwd %%xmm1,%%ymm1 \n" // 12345678 (32b, 1u1v)
2877
+ "vpshufd $0b01001110,%%ymm0,%%ymm2 \n" // 11003322 (lo, far)
2878
+ "vpshufd $0b01001110,%%ymm1,%%ymm3 \n" // 22114433 (hi, far)
2879
+ "vpaddd %%ymm0,%%ymm2,%%ymm2 \n" // near+far (lo)
2880
+ "vpaddd %%ymm1,%%ymm3,%%ymm3 \n" // near+far (hi)
2881
+ "vpaddd %%ymm0,%%ymm0,%%ymm0 \n" // 2*near (lo)
2882
+ "vpaddd %%ymm1,%%ymm1,%%ymm1 \n" // 2*near (hi)
2883
+ "vpaddd %%ymm0,%%ymm2,%%ymm0 \n" // 3*near+far (lo)
2884
+ "vpaddd %%ymm1,%%ymm3,%%ymm1 \n" // 3*near+far (hi)
2885
+
2886
+ "vmovdqu (%0,%3,2),%%xmm2 \n" // 00112233 (16b, 1u1v)
2887
+ "vmovdqu 4(%0,%3,2),%%xmm3 \n" // 11223344 (16b, 1u1v)
2888
+ "vpmovzxwd %%xmm2,%%ymm2 \n" // 01234567 (32b, 1u1v)
2889
+ "vpmovzxwd %%xmm3,%%ymm3 \n" // 12345678 (32b, 1u1v)
2890
+ "vpshufd $0b01001110,%%ymm2,%%ymm4 \n" // 11003322 (lo, far)
2891
+ "vpshufd $0b01001110,%%ymm3,%%ymm5 \n" // 22114433 (hi, far)
2892
+ "vpaddd %%ymm2,%%ymm4,%%ymm4 \n" // near+far (lo)
2893
+ "vpaddd %%ymm3,%%ymm5,%%ymm5 \n" // near+far (hi)
2894
+ "vpaddd %%ymm2,%%ymm2,%%ymm2 \n" // 2*near (lo)
2895
+ "vpaddd %%ymm3,%%ymm3,%%ymm3 \n" // 2*near (hi)
2896
+ "vpaddd %%ymm2,%%ymm4,%%ymm2 \n" // 3*near+far (lo)
2897
+ "vpaddd %%ymm3,%%ymm5,%%ymm3 \n" // 3*near+far (hi)
2898
+
2899
+ "vpaddd %%ymm0,%%ymm0,%%ymm4 \n" // 6*near+2*far (1, lo)
2900
+ "vpaddd %%ymm6,%%ymm2,%%ymm5 \n" // 3*near+far+8 (2, lo)
2901
+ "vpaddd %%ymm4,%%ymm0,%%ymm4 \n" // 9*near+3*far (1, lo)
2902
+ "vpaddd %%ymm4,%%ymm5,%%ymm4 \n" // 9 3 3 1 + 8 (1, lo)
2903
+ "vpsrld $4,%%ymm4,%%ymm4 \n" // ^ div by 16 (1, lo)
2904
+
2905
+ "vpaddd %%ymm2,%%ymm2,%%ymm5 \n" // 6*near+2*far (2, lo)
2906
+ "vpaddd %%ymm6,%%ymm0,%%ymm0 \n" // 3*near+far+8 (1, lo)
2907
+ "vpaddd %%ymm5,%%ymm2,%%ymm5 \n" // 9*near+3*far (2, lo)
2908
+ "vpaddd %%ymm5,%%ymm0,%%ymm5 \n" // 9 3 3 1 + 8 (2, lo)
2909
+ "vpsrld $4,%%ymm5,%%ymm5 \n" // ^ div by 16 (2, lo)
2910
+
2911
+ "vpaddd %%ymm1,%%ymm1,%%ymm0 \n" // 6*near+2*far (1, hi)
2912
+ "vpaddd %%ymm6,%%ymm3,%%ymm2 \n" // 3*near+far+8 (2, hi)
2913
+ "vpaddd %%ymm0,%%ymm1,%%ymm0 \n" // 9*near+3*far (1, hi)
2914
+ "vpaddd %%ymm0,%%ymm2,%%ymm0 \n" // 9 3 3 1 + 8 (1, hi)
2915
+ "vpsrld $4,%%ymm0,%%ymm0 \n" // ^ div by 16 (1, hi)
2916
+
2917
+ "vpaddd %%ymm3,%%ymm3,%%ymm2 \n" // 6*near+2*far (2, hi)
2918
+ "vpaddd %%ymm6,%%ymm1,%%ymm1 \n" // 3*near+far+8 (1, hi)
2919
+ "vpaddd %%ymm2,%%ymm3,%%ymm2 \n" // 9*near+3*far (2, hi)
2920
+ "vpaddd %%ymm2,%%ymm1,%%ymm2 \n" // 9 3 3 1 + 8 (2, hi)
2921
+ "vpsrld $4,%%ymm2,%%ymm2 \n" // ^ div by 16 (2, hi)
2922
+
2923
+ "vpackusdw %%ymm0,%%ymm4,%%ymm4 \n"
2924
+ "vmovdqu %%ymm4,(%1) \n" // store above
2925
+ "vpackusdw %%ymm2,%%ymm5,%%ymm5 \n"
2926
+ "vmovdqu %%ymm5,(%1,%4,2) \n" // store below
2927
+
2928
+ "lea 0x10(%0),%0 \n"
2929
+ "lea 0x20(%1),%1 \n" // 4 uv to 8 uv
2930
+ "sub $0x8,%2 \n"
2931
+ "jg 1b \n"
2932
+ "vzeroupper \n"
2933
+ : "+r"(src_ptr), // %0
2934
+ "+r"(dst_ptr), // %1
2935
+ "+r"(dst_width) // %2
2936
+ : "r"((intptr_t)(src_stride)), // %3
2937
+ "r"((intptr_t)(dst_stride)) // %4
2938
+ : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6");
2939
+ }
2940
+ #endif
2941
+
2942
+ #endif // defined(__x86_64__) || defined(__i386__)
2943
+
2944
+ #ifdef __cplusplus
2945
+ } // extern "C"
2946
+ } // namespace libyuv
2947
+ #endif