react-native-windows 0.81.34 → 0.81.35
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.
- package/Directory.Build.props +1 -16
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/React.Cpp.props +3 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -10
- package/ReactCommon/packages.lock.win32.json +0 -10
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +11 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +12 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/{fmt → external/fmt}/cgmanifest.json +1 -1
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +61 -0
- package/external/folly/LICENSE +200 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +3 -3
- package/template/cpp-app/proj/MyApp.sln +0 -33
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-app/proj/MyApp.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -383
- package/Folly/Folly.vcxproj.filters +0 -558
- package/Folly/Folly.win32.vcxproj +0 -11
- package/Folly/packages.lock.win32.json +0 -20
- package/fmt/fmt.vcxproj +0 -163
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/fmt.win32.vcxproj +0 -10
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <folly/Portability.h>
|
|
20
|
+
#include <folly/algorithm/simd/Ignore.h>
|
|
21
|
+
#include <folly/algorithm/simd/Movemask.h>
|
|
22
|
+
#include <folly/algorithm/simd/detail/SimdPlatform.h>
|
|
23
|
+
#include <folly/lang/Bits.h>
|
|
24
|
+
|
|
25
|
+
#include <array>
|
|
26
|
+
|
|
27
|
+
#if FOLLY_X64 && FOLLY_SSE_PREREQ(4, 2)
|
|
28
|
+
#include <immintrin.h>
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
#if FOLLY_AARCH64
|
|
32
|
+
#include <arm_neon.h>
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
namespace folly {
|
|
36
|
+
namespace simd::detail {
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* SimdPlatform<T>
|
|
40
|
+
*
|
|
41
|
+
* Common interface for some SIMD operations between: sse4.2, avx2,
|
|
42
|
+
* arm-neon.
|
|
43
|
+
*
|
|
44
|
+
* Supported types for T at the moment are uint8_16/uint16_t/uint32_t/uint64_t
|
|
45
|
+
*
|
|
46
|
+
* If it's not one of the supported platforms:
|
|
47
|
+
* std::same_as<SimdPlatform<T>, void>
|
|
48
|
+
* There is also a macro: FOLLY_DETAIL_HAS_SIMD_PLATFORM set to 1 or 0
|
|
49
|
+
*
|
|
50
|
+
**/
|
|
51
|
+
|
|
52
|
+
#if FOLLY_X64 && FOLLY_SSE_PREREQ(4, 2) || FOLLY_AARCH64
|
|
53
|
+
|
|
54
|
+
template <typename Platform>
|
|
55
|
+
struct SimdPlatformCommon {
|
|
56
|
+
/**
|
|
57
|
+
* sclar_t - type of scalar we operate on (uint8_t, uint16_t etc)
|
|
58
|
+
* reg_t - type of a simd register (__m128i)
|
|
59
|
+
* logical_t - type of a simd logical register (matches reg_t so far)
|
|
60
|
+
**/
|
|
61
|
+
using scalar_t = typename Platform::scalar_t;
|
|
62
|
+
using reg_t = typename Platform::reg_t;
|
|
63
|
+
using logical_t = typename Platform::logical_t;
|
|
64
|
+
|
|
65
|
+
static constexpr int kCardinal = sizeof(reg_t) / sizeof(scalar_t);
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* loads:
|
|
69
|
+
* precondition: at least one element should be not ignored.
|
|
70
|
+
*
|
|
71
|
+
* loada - load from an aligned (to sizeof(reg_t)) address
|
|
72
|
+
* loadu - load from an unaligned address
|
|
73
|
+
* unsafeLoadu - load from an unaligned address that disables sanitizers.
|
|
74
|
+
* This is for reading a register within a page
|
|
75
|
+
* but maybe outside of the array's boundary.
|
|
76
|
+
*
|
|
77
|
+
* Ignored values can be garbage.
|
|
78
|
+
**/
|
|
79
|
+
template <typename Ignore>
|
|
80
|
+
static reg_t loada(const scalar_t* ptr, Ignore);
|
|
81
|
+
static reg_t loadu(const scalar_t* ptr, ignore_none);
|
|
82
|
+
static reg_t unsafeLoadu(const scalar_t* ptr, ignore_none);
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Comparing reg_t against the scalar.
|
|
86
|
+
*
|
|
87
|
+
* NOTE: less_equal only implemented for uint8_t
|
|
88
|
+
* for now.
|
|
89
|
+
**/
|
|
90
|
+
static logical_t equal(reg_t reg, scalar_t x);
|
|
91
|
+
static logical_t less_equal(reg_t reg, scalar_t x);
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* logical reduction
|
|
95
|
+
**/
|
|
96
|
+
template <typename Ignore>
|
|
97
|
+
static bool any(logical_t logical, Ignore ignore);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* logical operations
|
|
101
|
+
**/
|
|
102
|
+
static logical_t logical_or(logical_t x, logical_t y);
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Converting register to an array for debugging
|
|
106
|
+
**/
|
|
107
|
+
static auto toArray(reg_t x);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
template <typename Platform>
|
|
111
|
+
template <typename Ignore>
|
|
112
|
+
FOLLY_ERASE auto SimdPlatformCommon<Platform>::loada(
|
|
113
|
+
const scalar_t* ptr, Ignore) -> reg_t {
|
|
114
|
+
if constexpr (std::is_same_v<ignore_none, Ignore>) {
|
|
115
|
+
// There is not point to aligned load instructions
|
|
116
|
+
// on modern cpus. Arm doesn't even have any.
|
|
117
|
+
return loadu(ptr, ignore_none{});
|
|
118
|
+
} else {
|
|
119
|
+
// We have a precondition: at least one element is loaded.
|
|
120
|
+
// From this we can prove that we can unsafely load from
|
|
121
|
+
// and aligned address.
|
|
122
|
+
//
|
|
123
|
+
// Here is an explanation from Stephen Canon:
|
|
124
|
+
// https://stackoverflow.com/questions/25566302/vectorized-strlen-getting-away-with-reading-unallocated-memory
|
|
125
|
+
return unsafeLoadu(ptr, ignore_none{});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
template <typename Platform>
|
|
130
|
+
FOLLY_ERASE auto SimdPlatformCommon<Platform>::loadu(
|
|
131
|
+
const scalar_t* ptr, ignore_none) -> reg_t {
|
|
132
|
+
return Platform::loadu(ptr);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
template <typename Platform>
|
|
136
|
+
FOLLY_ERASE auto SimdPlatformCommon<Platform>::unsafeLoadu(
|
|
137
|
+
const scalar_t* ptr, ignore_none) -> reg_t {
|
|
138
|
+
return Platform::unsafeLoadu(ptr);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
template <typename Platform>
|
|
142
|
+
FOLLY_ERASE auto SimdPlatformCommon<Platform>::equal(reg_t reg, scalar_t x)
|
|
143
|
+
-> logical_t {
|
|
144
|
+
return Platform::equal(reg, Platform::broadcast(x));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
template <typename Platform>
|
|
148
|
+
FOLLY_ERASE auto SimdPlatformCommon<Platform>::less_equal(reg_t reg, scalar_t x)
|
|
149
|
+
-> logical_t {
|
|
150
|
+
static_assert(std::is_same_v<scalar_t, std::uint8_t>, "not implemented");
|
|
151
|
+
return Platform::less_equal(reg, Platform::broadcast(x));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
template <typename Platform>
|
|
155
|
+
template <typename Ignore>
|
|
156
|
+
FOLLY_ERASE bool SimdPlatformCommon<Platform>::any(
|
|
157
|
+
logical_t logical, Ignore ignore) {
|
|
158
|
+
if constexpr (std::is_same_v<Ignore, ignore_none>) {
|
|
159
|
+
return Platform::any(logical);
|
|
160
|
+
} else {
|
|
161
|
+
return movemask<scalar_t>(logical, ignore).first;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
template <typename Platform>
|
|
166
|
+
FOLLY_ERASE auto SimdPlatformCommon<Platform>::logical_or(
|
|
167
|
+
logical_t x, logical_t y) -> logical_t {
|
|
168
|
+
return Platform::logical_or(x, y);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
template <typename Platform>
|
|
172
|
+
FOLLY_ERASE auto SimdPlatformCommon<Platform>::toArray(reg_t x) {
|
|
173
|
+
std::array<scalar_t, kCardinal> res;
|
|
174
|
+
std::memcpy(&res, &x, sizeof(x));
|
|
175
|
+
return res;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
#endif
|
|
179
|
+
|
|
180
|
+
#if FOLLY_X64 && FOLLY_SSE_PREREQ(4, 2)
|
|
181
|
+
|
|
182
|
+
template <typename T>
|
|
183
|
+
struct SimdSse42PlatformSpecific {
|
|
184
|
+
using scalar_t = T;
|
|
185
|
+
using reg_t = __m128i;
|
|
186
|
+
using logical_t = reg_t;
|
|
187
|
+
|
|
188
|
+
FOLLY_ERASE
|
|
189
|
+
static reg_t loadu(const scalar_t* p) {
|
|
190
|
+
return _mm_loadu_si128(reinterpret_cast<const reg_t*>(p));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
FOLLY_DISABLE_SANITIZERS
|
|
194
|
+
FOLLY_ERASE
|
|
195
|
+
static reg_t unsafeLoadu(const scalar_t* p) {
|
|
196
|
+
return _mm_loadu_si128(reinterpret_cast<const reg_t*>(p));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
FOLLY_ERASE
|
|
200
|
+
static reg_t broadcast(scalar_t x) {
|
|
201
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
202
|
+
return _mm_set1_epi8(x);
|
|
203
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
204
|
+
return _mm_set1_epi16(x);
|
|
205
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
206
|
+
return _mm_set1_epi32(x);
|
|
207
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
208
|
+
return _mm_set1_epi64x(x);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
FOLLY_ERASE
|
|
213
|
+
static logical_t equal(reg_t x, reg_t y) {
|
|
214
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
215
|
+
return _mm_cmpeq_epi8(x, y);
|
|
216
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
217
|
+
return _mm_cmpeq_epi16(x, y);
|
|
218
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
219
|
+
return _mm_cmpeq_epi32(x, y);
|
|
220
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
221
|
+
return _mm_cmpeq_epi64(x, y);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
FOLLY_ERASE
|
|
226
|
+
static logical_t less_equal(reg_t x, reg_t y) {
|
|
227
|
+
static_assert(
|
|
228
|
+
std::is_same_v<std::uint8_t, scalar_t>, "other types not implemented");
|
|
229
|
+
// No unsigned comparisons on x86
|
|
230
|
+
// less equal <=> equal (min)
|
|
231
|
+
reg_t min = _mm_min_epu8(x, y);
|
|
232
|
+
return equal(x, min);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
FOLLY_ERASE
|
|
236
|
+
static logical_t logical_or(logical_t x, logical_t y) {
|
|
237
|
+
return _mm_or_si128(x, y);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
FOLLY_ERASE
|
|
241
|
+
static bool any(logical_t log) { return movemask<std::uint8_t>(log).first; }
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
#define FOLLY_DETAIL_HAS_SIMD_PLATFORM 1
|
|
245
|
+
|
|
246
|
+
template <typename T>
|
|
247
|
+
using SimdSse42Platform = SimdPlatformCommon<SimdSse42PlatformSpecific<T>>;
|
|
248
|
+
|
|
249
|
+
#if defined(__AVX2__)
|
|
250
|
+
|
|
251
|
+
template <typename T>
|
|
252
|
+
struct SimdAvx2PlatformSpecific {
|
|
253
|
+
using scalar_t = T;
|
|
254
|
+
using reg_t = __m256i;
|
|
255
|
+
using logical_t = reg_t;
|
|
256
|
+
|
|
257
|
+
FOLLY_ERASE
|
|
258
|
+
static reg_t loadu(const scalar_t* p) {
|
|
259
|
+
return _mm256_loadu_si256(reinterpret_cast<const reg_t*>(p));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
FOLLY_DISABLE_SANITIZERS
|
|
263
|
+
FOLLY_ERASE
|
|
264
|
+
static reg_t unsafeLoadu(const scalar_t* p) {
|
|
265
|
+
return _mm256_loadu_si256(reinterpret_cast<const reg_t*>(p));
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
FOLLY_ERASE
|
|
269
|
+
static reg_t broadcast(scalar_t x) {
|
|
270
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
271
|
+
return _mm256_set1_epi8(x);
|
|
272
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
273
|
+
return _mm256_set1_epi16(x);
|
|
274
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
275
|
+
return _mm256_set1_epi32(x);
|
|
276
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
277
|
+
return _mm256_set1_epi64x(x);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
FOLLY_ERASE
|
|
282
|
+
static logical_t equal(reg_t x, reg_t y) {
|
|
283
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
284
|
+
return _mm256_cmpeq_epi8(x, y);
|
|
285
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
286
|
+
return _mm256_cmpeq_epi16(x, y);
|
|
287
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
288
|
+
return _mm256_cmpeq_epi32(x, y);
|
|
289
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
290
|
+
return _mm256_cmpeq_epi64(x, y);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
FOLLY_ERASE
|
|
295
|
+
static logical_t less_equal(reg_t x, reg_t y) {
|
|
296
|
+
static_assert(
|
|
297
|
+
std::is_same_v<std::uint8_t, scalar_t>, "other types not implemented");
|
|
298
|
+
// See SSE comment
|
|
299
|
+
reg_t min = _mm256_min_epu8(x, y);
|
|
300
|
+
return _mm256_cmpeq_epi8(x, min);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
FOLLY_ERASE
|
|
304
|
+
static logical_t logical_or(logical_t x, logical_t y) {
|
|
305
|
+
return _mm256_or_si256(x, y);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
FOLLY_ERASE
|
|
309
|
+
static bool any(logical_t log) {
|
|
310
|
+
return simd::movemask<std::uint8_t>(log).first;
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
template <typename T>
|
|
315
|
+
using SimdAvx2Platform = SimdPlatformCommon<SimdAvx2PlatformSpecific<T>>;
|
|
316
|
+
|
|
317
|
+
template <typename T>
|
|
318
|
+
using SimdPlatform = SimdAvx2Platform<T>;
|
|
319
|
+
|
|
320
|
+
#else
|
|
321
|
+
|
|
322
|
+
template <typename T>
|
|
323
|
+
using SimdPlatform = SimdPlatformCommon<SimdSse42PlatformSpecific<T>>;
|
|
324
|
+
|
|
325
|
+
#endif
|
|
326
|
+
|
|
327
|
+
#elif FOLLY_AARCH64
|
|
328
|
+
|
|
329
|
+
template <typename T>
|
|
330
|
+
struct SimdAarch64PlatformSpecific {
|
|
331
|
+
using scalar_t = T;
|
|
332
|
+
|
|
333
|
+
FOLLY_ERASE
|
|
334
|
+
static auto loadu(const scalar_t* p) {
|
|
335
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
336
|
+
return vld1q_u8(p);
|
|
337
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
338
|
+
return vld1q_u16(p);
|
|
339
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
340
|
+
return vld1q_u32(p);
|
|
341
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
342
|
+
return vld1q_u64(p);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
using reg_t = decltype(loadu(nullptr));
|
|
347
|
+
using logical_t = reg_t;
|
|
348
|
+
|
|
349
|
+
FOLLY_DISABLE_SANITIZERS
|
|
350
|
+
FOLLY_ERASE
|
|
351
|
+
static reg_t unsafeLoadu(const scalar_t* p) {
|
|
352
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
353
|
+
return vld1q_u8(p);
|
|
354
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
355
|
+
return vld1q_u16(p);
|
|
356
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
357
|
+
return vld1q_u32(p);
|
|
358
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
359
|
+
return vld1q_u64(p);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
FOLLY_ERASE
|
|
364
|
+
static reg_t broadcast(scalar_t x) {
|
|
365
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
366
|
+
return vdupq_n_u8(x);
|
|
367
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
368
|
+
return vdupq_n_u16(x);
|
|
369
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
370
|
+
return vdupq_n_u32(x);
|
|
371
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
372
|
+
return vdupq_n_u64(x);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
FOLLY_ERASE
|
|
377
|
+
static logical_t equal(reg_t x, reg_t y) {
|
|
378
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
379
|
+
return vceqq_u8(x, y);
|
|
380
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
381
|
+
return vceqq_u16(x, y);
|
|
382
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
383
|
+
return vceqq_u32(x, y);
|
|
384
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
385
|
+
return vceqq_u64(x, y);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
FOLLY_ERASE
|
|
390
|
+
static logical_t less_equal(reg_t x, reg_t y) {
|
|
391
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
392
|
+
return vcleq_u8(x, y);
|
|
393
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
394
|
+
return vcleq_u16(x, y);
|
|
395
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
396
|
+
return vcleq_u32(x, y);
|
|
397
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
398
|
+
return vcleq_u64(x, y);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
FOLLY_ALWAYS_INLINE
|
|
403
|
+
static logical_t logical_or(logical_t x, logical_t y) {
|
|
404
|
+
if constexpr (std::is_same_v<scalar_t, std::uint8_t>) {
|
|
405
|
+
return vorrq_u8(x, y);
|
|
406
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint16_t>) {
|
|
407
|
+
return vorrq_u16(x, y);
|
|
408
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint32_t>) {
|
|
409
|
+
return vorrq_u32(x, y);
|
|
410
|
+
} else if constexpr (std::is_same_v<scalar_t, std::uint64_t>) {
|
|
411
|
+
return vorrq_u64(x, y);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
FOLLY_ALWAYS_INLINE
|
|
416
|
+
static bool any(logical_t log) {
|
|
417
|
+
// https://github.com/dotnet/runtime/pull/75864
|
|
418
|
+
auto u32 = bit_cast<uint32x4_t>(log);
|
|
419
|
+
u32 = vpmaxq_u32(u32, u32);
|
|
420
|
+
auto u64 = bit_cast<uint64x2_t>(u32);
|
|
421
|
+
return vgetq_lane_u64(u64, 0);
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
#define FOLLY_DETAIL_HAS_SIMD_PLATFORM 1
|
|
426
|
+
|
|
427
|
+
template <typename T>
|
|
428
|
+
using SimdAarch64Platform = SimdPlatformCommon<SimdAarch64PlatformSpecific<T>>;
|
|
429
|
+
|
|
430
|
+
template <typename T>
|
|
431
|
+
using SimdPlatform = SimdAarch64Platform<T>;
|
|
432
|
+
|
|
433
|
+
#define FOLLY_DETAIL_HAS_SIMD_PLATFORM 1
|
|
434
|
+
|
|
435
|
+
#else
|
|
436
|
+
|
|
437
|
+
#define FOLLY_DETAIL_HAS_SIMD_PLATFORM 0
|
|
438
|
+
|
|
439
|
+
template <typename T>
|
|
440
|
+
using SimdPlatform = void;
|
|
441
|
+
|
|
442
|
+
#endif
|
|
443
|
+
|
|
444
|
+
} // namespace simd::detail
|
|
445
|
+
} // namespace folly
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <folly/CPortability.h>
|
|
20
|
+
#include <folly/Memory.h>
|
|
21
|
+
#include <folly/Traits.h>
|
|
22
|
+
#include <folly/container/span.h>
|
|
23
|
+
|
|
24
|
+
#include <concepts>
|
|
25
|
+
#include <type_traits>
|
|
26
|
+
|
|
27
|
+
namespace folly::simd::detail {
|
|
28
|
+
|
|
29
|
+
template <typename T>
|
|
30
|
+
auto findSimdFriendlyEquivalent() {
|
|
31
|
+
if constexpr (std::is_enum_v<T>) {
|
|
32
|
+
return findSimdFriendlyEquivalent<std::underlying_type_t<T>>();
|
|
33
|
+
} else if constexpr (std::is_pointer_v<T>) {
|
|
34
|
+
// We use signed numbers for pointers because x86 support for signed
|
|
35
|
+
// numbers is better and we can get away with it, in terms of correctness.
|
|
36
|
+
return int_bits_t<sizeof(T) * 8>{};
|
|
37
|
+
} else if constexpr (std::is_floating_point_v<T>) {
|
|
38
|
+
if constexpr (sizeof(T) == 4) {
|
|
39
|
+
return float{};
|
|
40
|
+
} else {
|
|
41
|
+
return double{};
|
|
42
|
+
}
|
|
43
|
+
} else if constexpr (std::is_signed_v<T>) {
|
|
44
|
+
return int_bits_t<sizeof(T) * 8>{};
|
|
45
|
+
} else if constexpr (std::is_unsigned_v<T>) {
|
|
46
|
+
return uint_bits_t<sizeof(T) * 8>{};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
template <typename T>
|
|
51
|
+
constexpr bool has_simd_friendly_equivalent_scalar =
|
|
52
|
+
!std::is_same_v<void, decltype(findSimdFriendlyEquivalent<T>())>;
|
|
53
|
+
|
|
54
|
+
template <typename T>
|
|
55
|
+
using simd_friendly_equivalent_scalar_t = std::enable_if_t<
|
|
56
|
+
has_simd_friendly_equivalent_scalar<T>,
|
|
57
|
+
like_t<T, decltype(findSimdFriendlyEquivalent<std::remove_const_t<T>>())>>;
|
|
58
|
+
|
|
59
|
+
template <typename T>
|
|
60
|
+
constexpr bool has_integral_simd_friendly_equivalent_scalar_v =
|
|
61
|
+
std::is_integral_v< // void will return false
|
|
62
|
+
decltype(findSimdFriendlyEquivalent<std::remove_const_t<T>>())>;
|
|
63
|
+
|
|
64
|
+
template <typename T>
|
|
65
|
+
using unsigned_simd_friendly_equivalent_scalar_t = std::enable_if_t<
|
|
66
|
+
has_integral_simd_friendly_equivalent_scalar_v<T>,
|
|
67
|
+
like_t<T, uint_bits_t<sizeof(T) * 8>>>;
|
|
68
|
+
|
|
69
|
+
template <typename R>
|
|
70
|
+
using span_for = decltype(folly::span(std::declval<const R&>()));
|
|
71
|
+
|
|
72
|
+
struct AsSimdFriendlyFn {
|
|
73
|
+
template <typename T, std::size_t extent>
|
|
74
|
+
FOLLY_ERASE auto operator()(folly::span<T, extent> s) const
|
|
75
|
+
-> folly::span<simd_friendly_equivalent_scalar_t<T>, extent> {
|
|
76
|
+
return reinterpret_span_cast<simd_friendly_equivalent_scalar_t<T>>(s);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
template <typename R>
|
|
80
|
+
FOLLY_ERASE auto operator()(R&& r) const
|
|
81
|
+
-> decltype(operator()(span_for<R>(r))) {
|
|
82
|
+
return operator()(folly::span(r));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
template <typename T>
|
|
86
|
+
FOLLY_ERASE constexpr auto operator()(T x) const
|
|
87
|
+
-> simd_friendly_equivalent_scalar_t<T> {
|
|
88
|
+
using res_t = simd_friendly_equivalent_scalar_t<T>;
|
|
89
|
+
if constexpr (!std::is_pointer_v<T>) {
|
|
90
|
+
return static_cast<res_t>(x);
|
|
91
|
+
} else {
|
|
92
|
+
return reinterpret_cast<res_t>(x);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
inline constexpr AsSimdFriendlyFn asSimdFriendly;
|
|
97
|
+
|
|
98
|
+
struct AsSimdFriendlyUintFn {
|
|
99
|
+
template <typename T, std::size_t extent>
|
|
100
|
+
FOLLY_ERASE auto operator()(folly::span<T, extent> s) const
|
|
101
|
+
-> folly::span<unsigned_simd_friendly_equivalent_scalar_t<T>, extent> {
|
|
102
|
+
return reinterpret_span_cast<unsigned_simd_friendly_equivalent_scalar_t<T>>(
|
|
103
|
+
s);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
template <typename R>
|
|
107
|
+
FOLLY_ERASE auto operator()(R&& r) const
|
|
108
|
+
-> decltype(operator()(span_for<R>(r))) {
|
|
109
|
+
return operator()(folly::span(r));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
template <typename T>
|
|
113
|
+
FOLLY_ERASE constexpr auto operator()(T x) const
|
|
114
|
+
-> unsigned_simd_friendly_equivalent_scalar_t<T> {
|
|
115
|
+
using res_t = unsigned_simd_friendly_equivalent_scalar_t<T>;
|
|
116
|
+
if constexpr (!std::is_pointer_v<T>) {
|
|
117
|
+
return static_cast<res_t>(x);
|
|
118
|
+
} else {
|
|
119
|
+
return reinterpret_cast<res_t>(x);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
inline constexpr AsSimdFriendlyUintFn asSimdFriendlyUint;
|
|
124
|
+
|
|
125
|
+
} // namespace folly::simd::detail
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <folly/Portability.h>
|
|
20
|
+
#include <folly/Traits.h>
|
|
21
|
+
|
|
22
|
+
#include <array>
|
|
23
|
+
#include <type_traits>
|
|
24
|
+
|
|
25
|
+
namespace folly::simd::detail {
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* UnrollUtils
|
|
29
|
+
*
|
|
30
|
+
* Unfortunately compilers often don't unroll the loops with small
|
|
31
|
+
* fixed number of iterations and/or not unroll them properly.
|
|
32
|
+
*
|
|
33
|
+
* This is a collection of helpers that use templates to do some
|
|
34
|
+
* common unrolled loops.
|
|
35
|
+
*/
|
|
36
|
+
struct UnrollUtils {
|
|
37
|
+
public:
|
|
38
|
+
/**
|
|
39
|
+
* arrayMap(x, op)
|
|
40
|
+
*
|
|
41
|
+
* Typical "map" from functional languages: apply op for each element,
|
|
42
|
+
* return an array of results.
|
|
43
|
+
*/
|
|
44
|
+
template <typename T, std::size_t N, typename Op>
|
|
45
|
+
FOLLY_NODISCARD FOLLY_ALWAYS_INLINE static constexpr auto arrayMap(
|
|
46
|
+
const std::array<T, N>& x, Op op) {
|
|
47
|
+
return arrayMapImpl(x, op, std::make_index_sequence<N>());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* arrayReduce(x, op)
|
|
52
|
+
*
|
|
53
|
+
* std::reduce(x.begin(), x.end(), op) but unrolled and orders operations
|
|
54
|
+
* to minimize dependencies.
|
|
55
|
+
*
|
|
56
|
+
* (a + b) + (c + d)
|
|
57
|
+
*/
|
|
58
|
+
template <typename T, std::size_t N, typename Op>
|
|
59
|
+
FOLLY_NODISCARD FOLLY_ALWAYS_INLINE static constexpr T arrayReduce(
|
|
60
|
+
const std::array<T, N>& x, Op op) {
|
|
61
|
+
return arrayReduceImpl<0, N>(x, op);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* unrollUntil<N>(op)
|
|
66
|
+
*
|
|
67
|
+
* Do operation N times or until it returns true to break.
|
|
68
|
+
* Op accepts integral_constant<i> so it can keep track of a step begin
|
|
69
|
+
* executed.
|
|
70
|
+
*
|
|
71
|
+
* Returns wether true if it was interrupted (you can know if the op breaked)
|
|
72
|
+
*/
|
|
73
|
+
template <std::size_t N, typename Op>
|
|
74
|
+
FOLLY_ALWAYS_INLINE static constexpr bool unrollUntil(Op op) {
|
|
75
|
+
return unrollUntilImpl(op, std::make_index_sequence<N>{});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private:
|
|
79
|
+
template <typename T, std::size_t N, typename Op, std::size_t... i>
|
|
80
|
+
FOLLY_ALWAYS_INLINE static constexpr auto arrayMapImpl(
|
|
81
|
+
const std::array<T, N>& x, Op op, std::index_sequence<i...>) {
|
|
82
|
+
using U = decltype(op(std::declval<const T&>()));
|
|
83
|
+
|
|
84
|
+
FOLLY_PUSH_WARNING
|
|
85
|
+
// This is a very common gcc issue,
|
|
86
|
+
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97222 apparently discarding
|
|
87
|
+
// it here is fine and done through out.
|
|
88
|
+
FOLLY_GCC_DISABLE_WARNING("-Wignored-attributes")
|
|
89
|
+
std::array<U, N> res{{op(x[i])...}};
|
|
90
|
+
FOLLY_POP_WARNING
|
|
91
|
+
return res;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
template <
|
|
95
|
+
std::size_t f,
|
|
96
|
+
std::size_t l,
|
|
97
|
+
typename T,
|
|
98
|
+
std::size_t N,
|
|
99
|
+
typename Op>
|
|
100
|
+
FOLLY_ALWAYS_INLINE static constexpr std::enable_if_t<l - f == 1, T>
|
|
101
|
+
arrayReduceImpl(std::array<T, N> const& x, Op) {
|
|
102
|
+
return x[f];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
template <
|
|
106
|
+
std::size_t f,
|
|
107
|
+
std::size_t l,
|
|
108
|
+
typename T,
|
|
109
|
+
std::size_t N,
|
|
110
|
+
typename Op>
|
|
111
|
+
FOLLY_ALWAYS_INLINE static constexpr std::enable_if_t<l - f != 1, T>
|
|
112
|
+
arrayReduceImpl(std::array<T, N> const& x, Op op) {
|
|
113
|
+
constexpr std::size_t n = l - f;
|
|
114
|
+
T leftSum = arrayReduceImpl<f, f + n / 2>(x, op);
|
|
115
|
+
T rightSum = arrayReduceImpl<f + n / 2, l>(x, op);
|
|
116
|
+
return op(leftSum, rightSum);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
template <typename Op, std::size_t... i>
|
|
120
|
+
FOLLY_ALWAYS_INLINE static constexpr bool unrollUntilImpl(
|
|
121
|
+
Op op, std::index_sequence<i...>) {
|
|
122
|
+
return (... || op(index_constant<i>{}));
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
} // namespace folly::simd::detail
|