react-native-executorch 0.4.10 → 0.5.0-nightly-6f4dd53-20251211
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/README.md +77 -71
- package/android/CMakeLists.txt +29 -0
- package/android/build.gradle +76 -13
- package/android/libs/classes.jar +0 -0
- package/android/src/main/cpp/CMakeLists.txt +109 -0
- package/android/src/main/cpp/ETInstallerModule.cpp +76 -0
- package/android/src/main/cpp/ETInstallerModule.h +43 -0
- package/android/src/main/java/com/swmansion/rnexecutorch/ETInstaller.kt +66 -0
- package/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt +6 -124
- package/common/ada/ada.cpp +17406 -0
- package/common/ada/ada.h +10274 -0
- package/common/pfft/pfft.c +2205 -0
- package/common/pfft/pfft.h +185 -0
- package/common/rnexecutorch/Log.h +489 -0
- package/common/rnexecutorch/RnExecutorchInstaller.cpp +113 -0
- package/common/rnexecutorch/RnExecutorchInstaller.h +87 -0
- package/common/rnexecutorch/TokenizerModule.cpp +52 -0
- package/common/rnexecutorch/TokenizerModule.h +29 -0
- package/common/rnexecutorch/data_processing/FFT.cpp +21 -0
- package/common/rnexecutorch/data_processing/FFT.h +23 -0
- package/common/rnexecutorch/data_processing/FileUtils.h +30 -0
- package/common/rnexecutorch/data_processing/ImageProcessing.cpp +240 -0
- package/common/rnexecutorch/data_processing/ImageProcessing.h +55 -0
- package/common/rnexecutorch/data_processing/Numerical.cpp +111 -0
- package/common/rnexecutorch/data_processing/Numerical.h +77 -0
- package/common/rnexecutorch/data_processing/base64.cpp +110 -0
- package/common/rnexecutorch/data_processing/base64.h +46 -0
- package/common/rnexecutorch/data_processing/dsp.cpp +19 -0
- package/common/rnexecutorch/data_processing/dsp.h +12 -0
- package/common/rnexecutorch/data_processing/gzip.cpp +47 -0
- package/common/rnexecutorch/data_processing/gzip.h +7 -0
- package/common/rnexecutorch/host_objects/JSTensorViewIn.h +12 -0
- package/common/rnexecutorch/host_objects/JSTensorViewOut.h +22 -0
- package/common/rnexecutorch/host_objects/JsiConversions.h +418 -0
- package/common/rnexecutorch/host_objects/ModelHostObject.h +313 -0
- package/common/rnexecutorch/jsi/JsiHostObject.cpp +108 -0
- package/common/rnexecutorch/jsi/JsiHostObject.h +87 -0
- package/common/rnexecutorch/jsi/OwningArrayBuffer.h +57 -0
- package/common/rnexecutorch/jsi/Promise.cpp +20 -0
- package/common/rnexecutorch/jsi/Promise.h +69 -0
- package/common/rnexecutorch/jsi/RuntimeAwareCache.h +58 -0
- package/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.cpp +53 -0
- package/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.h +35 -0
- package/common/rnexecutorch/metaprogramming/ConstructorHelpers.h +133 -0
- package/common/rnexecutorch/metaprogramming/FunctionHelpers.h +50 -0
- package/common/rnexecutorch/metaprogramming/TypeConcepts.h +37 -0
- package/common/rnexecutorch/models/BaseModel.cpp +183 -0
- package/common/rnexecutorch/models/BaseModel.h +61 -0
- package/common/rnexecutorch/models/classification/Classification.cpp +72 -0
- package/common/rnexecutorch/models/classification/Classification.h +31 -0
- package/{ios/RnExecutorch/models/classification/Constants.mm → common/rnexecutorch/models/classification/Constants.h} +7 -2
- package/common/rnexecutorch/models/embeddings/BaseEmbeddings.cpp +19 -0
- package/common/rnexecutorch/models/embeddings/BaseEmbeddings.h +17 -0
- package/common/rnexecutorch/models/embeddings/image/ImageEmbeddings.cpp +45 -0
- package/common/rnexecutorch/models/embeddings/image/ImageEmbeddings.h +28 -0
- package/common/rnexecutorch/models/embeddings/text/TextEmbeddings.cpp +60 -0
- package/common/rnexecutorch/models/embeddings/text/TextEmbeddings.h +31 -0
- package/{ios/RnExecutorch/models/image_segmentation/Constants.mm → common/rnexecutorch/models/image_segmentation/Constants.h} +7 -2
- package/common/rnexecutorch/models/image_segmentation/ImageSegmentation.cpp +168 -0
- package/common/rnexecutorch/models/image_segmentation/ImageSegmentation.h +50 -0
- package/common/rnexecutorch/models/llm/LLM.cpp +98 -0
- package/common/rnexecutorch/models/llm/LLM.h +38 -0
- package/{ios/RnExecutorch/utils/Constants.mm → common/rnexecutorch/models/object_detection/Constants.h} +9 -2
- package/common/rnexecutorch/models/object_detection/ObjectDetection.cpp +82 -0
- package/common/rnexecutorch/models/object_detection/ObjectDetection.h +37 -0
- package/common/rnexecutorch/models/object_detection/Types.h +13 -0
- package/{ios/RnExecutorch/utils/ObjectDetectionUtils.mm → common/rnexecutorch/models/object_detection/Utils.cpp} +17 -35
- package/common/rnexecutorch/models/object_detection/Utils.h +11 -0
- package/common/rnexecutorch/models/ocr/CTCLabelConverter.cpp +88 -0
- package/common/rnexecutorch/models/ocr/CTCLabelConverter.h +29 -0
- package/common/rnexecutorch/models/ocr/Constants.h +41 -0
- package/common/rnexecutorch/models/ocr/Detector.cpp +100 -0
- package/common/rnexecutorch/models/ocr/Detector.h +30 -0
- package/common/rnexecutorch/models/ocr/OCR.cpp +53 -0
- package/common/rnexecutorch/models/ocr/OCR.h +44 -0
- package/common/rnexecutorch/models/ocr/RecognitionHandler.cpp +108 -0
- package/common/rnexecutorch/models/ocr/RecognitionHandler.h +42 -0
- package/common/rnexecutorch/models/ocr/Recognizer.cpp +80 -0
- package/common/rnexecutorch/models/ocr/Recognizer.h +36 -0
- package/common/rnexecutorch/models/ocr/Types.h +35 -0
- package/common/rnexecutorch/models/ocr/utils/DetectorUtils.cpp +710 -0
- package/common/rnexecutorch/models/ocr/utils/DetectorUtils.h +81 -0
- package/common/rnexecutorch/models/ocr/utils/RecognitionHandlerUtils.cpp +159 -0
- package/common/rnexecutorch/models/ocr/utils/RecognitionHandlerUtils.h +72 -0
- package/common/rnexecutorch/models/ocr/utils/RecognizerUtils.cpp +204 -0
- package/common/rnexecutorch/models/ocr/utils/RecognizerUtils.h +71 -0
- package/common/rnexecutorch/models/speech_to_text/SpeechToText.cpp +125 -0
- package/common/rnexecutorch/models/speech_to_text/SpeechToText.h +57 -0
- package/common/rnexecutorch/models/speech_to_text/asr/ASR.cpp +303 -0
- package/common/rnexecutorch/models/speech_to_text/asr/ASR.h +61 -0
- package/common/rnexecutorch/models/speech_to_text/stream/HypothesisBuffer.cpp +82 -0
- package/common/rnexecutorch/models/speech_to_text/stream/HypothesisBuffer.h +25 -0
- package/common/rnexecutorch/models/speech_to_text/stream/OnlineASRProcessor.cpp +99 -0
- package/common/rnexecutorch/models/speech_to_text/stream/OnlineASRProcessor.h +33 -0
- package/common/rnexecutorch/models/speech_to_text/types/DecodingOptions.h +15 -0
- package/common/rnexecutorch/models/speech_to_text/types/GenerationResult.h +12 -0
- package/common/rnexecutorch/models/speech_to_text/types/ProcessResult.h +12 -0
- package/common/rnexecutorch/models/speech_to_text/types/Segment.h +14 -0
- package/common/rnexecutorch/models/speech_to_text/types/Word.h +13 -0
- package/common/rnexecutorch/models/style_transfer/StyleTransfer.cpp +55 -0
- package/common/rnexecutorch/models/style_transfer/StyleTransfer.h +35 -0
- package/common/rnexecutorch/models/text_to_image/Constants.h +9 -0
- package/common/rnexecutorch/models/text_to_image/Decoder.cpp +32 -0
- package/common/rnexecutorch/models/text_to_image/Decoder.h +24 -0
- package/common/rnexecutorch/models/text_to_image/Encoder.cpp +44 -0
- package/common/rnexecutorch/models/text_to_image/Encoder.h +32 -0
- package/common/rnexecutorch/models/text_to_image/Scheduler.cpp +152 -0
- package/common/rnexecutorch/models/text_to_image/Scheduler.h +41 -0
- package/common/rnexecutorch/models/text_to_image/TextToImage.cpp +141 -0
- package/common/rnexecutorch/models/text_to_image/TextToImage.h +64 -0
- package/common/rnexecutorch/models/text_to_image/UNet.cpp +38 -0
- package/common/rnexecutorch/models/text_to_image/UNet.h +28 -0
- package/common/rnexecutorch/models/vertical_ocr/VerticalDetector.cpp +93 -0
- package/common/rnexecutorch/models/vertical_ocr/VerticalDetector.h +49 -0
- package/common/rnexecutorch/models/vertical_ocr/VerticalOCR.cpp +180 -0
- package/common/rnexecutorch/models/vertical_ocr/VerticalOCR.h +85 -0
- package/common/rnexecutorch/models/voice_activity_detection/Constants.h +27 -0
- package/common/rnexecutorch/models/voice_activity_detection/Types.h +12 -0
- package/common/rnexecutorch/models/voice_activity_detection/Utils.cpp +15 -0
- package/common/rnexecutorch/models/voice_activity_detection/Utils.h +13 -0
- package/common/rnexecutorch/models/voice_activity_detection/VoiceActivityDetection.cpp +160 -0
- package/common/rnexecutorch/models/voice_activity_detection/VoiceActivityDetection.h +36 -0
- package/common/rnexecutorch/tests/CMakeLists.txt +30 -0
- package/common/rnexecutorch/tests/LogTest.cpp +530 -0
- package/common/rnexecutorch/tests/NumericalTest.cpp +110 -0
- package/common/rnexecutorch/tests/README.md +37 -0
- package/common/rnexecutorch/threads/GlobalThreadPool.h +84 -0
- package/common/rnexecutorch/threads/HighPerformanceThreadPool.h +364 -0
- package/common/rnexecutorch/threads/utils/ThreadUtils.h +29 -0
- package/common/runner/arange_util.cpp +44 -0
- package/common/runner/arange_util.h +37 -0
- package/common/runner/constants.h +28 -0
- package/common/runner/io_manager.h +240 -0
- package/common/runner/irunner.h +119 -0
- package/common/runner/kernel_includes.h +23 -0
- package/common/runner/runner.cpp +369 -0
- package/common/runner/runner.h +85 -0
- package/common/runner/sampler.cpp +201 -0
- package/common/runner/sampler.h +67 -0
- package/common/runner/stats.h +161 -0
- package/common/runner/text_decoder_runner.cpp +79 -0
- package/common/runner/text_decoder_runner.h +126 -0
- package/common/runner/text_prefiller.cpp +125 -0
- package/common/runner/text_prefiller.h +85 -0
- package/common/runner/text_token_generator.h +205 -0
- package/common/runner/util.h +153 -0
- package/ios/RnExecutorch/ETInstaller.h +8 -0
- package/ios/RnExecutorch/ETInstaller.mm +56 -0
- package/ios/RnExecutorch.xcodeproj/project.pbxproj +73 -23
- package/lib/module/Error.js +3 -0
- package/lib/module/Error.js.map +1 -1
- package/lib/module/common/Logger.js +23 -0
- package/lib/module/common/Logger.js.map +1 -0
- package/lib/module/constants/directories.js +1 -1
- package/lib/module/constants/directories.js.map +1 -1
- package/lib/module/constants/llmDefaults.js +8 -0
- package/lib/module/constants/llmDefaults.js.map +1 -1
- package/lib/module/constants/modelUrls.js +356 -84
- package/lib/module/constants/modelUrls.js.map +1 -1
- package/lib/module/constants/ocr/models.js +181 -286
- package/lib/module/constants/ocr/models.js.map +1 -1
- package/lib/module/constants/ocr/symbols.js +66 -65
- package/lib/module/constants/ocr/symbols.js.map +1 -1
- package/lib/module/controllers/LLMController.js +53 -23
- package/lib/module/controllers/LLMController.js.map +1 -1
- package/lib/module/controllers/OCRController.js +17 -10
- package/lib/module/controllers/OCRController.js.map +1 -1
- package/lib/module/controllers/VerticalOCRController.js +17 -10
- package/lib/module/controllers/VerticalOCRController.js.map +1 -1
- package/lib/module/hooks/computer_vision/useClassification.js +4 -4
- package/lib/module/hooks/computer_vision/useClassification.js.map +1 -1
- package/lib/module/hooks/computer_vision/useImageEmbeddings.js +13 -0
- package/lib/module/hooks/computer_vision/useImageEmbeddings.js.map +1 -0
- package/lib/module/hooks/computer_vision/useImageSegmentation.js +2 -2
- package/lib/module/hooks/computer_vision/useImageSegmentation.js.map +1 -1
- package/lib/module/hooks/computer_vision/useOCR.js +16 -17
- package/lib/module/hooks/computer_vision/useOCR.js.map +1 -1
- package/lib/module/hooks/computer_vision/useObjectDetection.js +3 -3
- package/lib/module/hooks/computer_vision/useObjectDetection.js.map +1 -1
- package/lib/module/hooks/computer_vision/useStyleTransfer.js +3 -3
- package/lib/module/hooks/computer_vision/useStyleTransfer.js.map +1 -1
- package/lib/module/hooks/computer_vision/useTextToImage.js +57 -0
- package/lib/module/hooks/computer_vision/useTextToImage.js.map +1 -0
- package/lib/module/hooks/computer_vision/useVerticalOCR.js +18 -19
- package/lib/module/hooks/computer_vision/useVerticalOCR.js.map +1 -1
- package/lib/module/hooks/general/useExecutorchModule.js +1 -1
- package/lib/module/hooks/general/useExecutorchModule.js.map +1 -1
- package/lib/module/hooks/natural_language_processing/useLLM.js +30 -29
- package/lib/module/hooks/natural_language_processing/useLLM.js.map +1 -1
- package/lib/module/hooks/natural_language_processing/useSpeechToText.js +72 -33
- package/lib/module/hooks/natural_language_processing/useSpeechToText.js.map +1 -1
- package/lib/module/hooks/natural_language_processing/useTextEmbeddings.js +2 -3
- package/lib/module/hooks/natural_language_processing/useTextEmbeddings.js.map +1 -1
- package/lib/module/hooks/natural_language_processing/useTokenizer.js +19 -18
- package/lib/module/hooks/natural_language_processing/useTokenizer.js.map +1 -1
- package/lib/module/hooks/natural_language_processing/useVAD.js +13 -0
- package/lib/module/hooks/natural_language_processing/useVAD.js.map +1 -0
- package/lib/module/hooks/useModule.js +13 -9
- package/lib/module/hooks/useModule.js.map +1 -1
- package/lib/module/index.js +21 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/modules/BaseModule.js +9 -14
- package/lib/module/modules/BaseModule.js.map +1 -1
- package/lib/module/modules/computer_vision/ClassificationModule.js +11 -6
- package/lib/module/modules/computer_vision/ClassificationModule.js.map +1 -1
- package/lib/module/modules/computer_vision/ImageEmbeddingsModule.js +19 -0
- package/lib/module/modules/computer_vision/ImageEmbeddingsModule.js.map +1 -0
- package/lib/module/modules/computer_vision/ImageSegmentationModule.js +20 -18
- package/lib/module/modules/computer_vision/ImageSegmentationModule.js.map +1 -1
- package/lib/module/modules/computer_vision/OCRModule.js +13 -10
- package/lib/module/modules/computer_vision/OCRModule.js.map +1 -1
- package/lib/module/modules/computer_vision/ObjectDetectionModule.js +11 -6
- package/lib/module/modules/computer_vision/ObjectDetectionModule.js.map +1 -1
- package/lib/module/modules/computer_vision/StyleTransferModule.js +11 -6
- package/lib/module/modules/computer_vision/StyleTransferModule.js.map +1 -1
- package/lib/module/modules/computer_vision/TextToImageModule.js +48 -0
- package/lib/module/modules/computer_vision/TextToImageModule.js.map +1 -0
- package/lib/module/modules/computer_vision/VerticalOCRModule.js +15 -10
- package/lib/module/modules/computer_vision/VerticalOCRModule.js.map +1 -1
- package/lib/module/modules/general/ExecutorchModule.js +8 -34
- package/lib/module/modules/general/ExecutorchModule.js.map +1 -1
- package/lib/module/modules/natural_language_processing/LLMModule.js +25 -24
- package/lib/module/modules/natural_language_processing/LLMModule.js.map +1 -1
- package/lib/module/modules/natural_language_processing/SpeechToTextModule.js +109 -27
- package/lib/module/modules/natural_language_processing/SpeechToTextModule.js.map +1 -1
- package/lib/module/modules/natural_language_processing/TextEmbeddingsModule.js +13 -6
- package/lib/module/modules/natural_language_processing/TextEmbeddingsModule.js.map +1 -1
- package/lib/module/modules/natural_language_processing/TokenizerModule.js +20 -14
- package/lib/module/modules/natural_language_processing/TokenizerModule.js.map +1 -1
- package/lib/module/modules/natural_language_processing/VADModule.js +19 -0
- package/lib/module/modules/natural_language_processing/VADModule.js.map +1 -0
- package/lib/module/native/NativeETInstaller.js +5 -0
- package/lib/module/native/NativeETInstaller.js.map +1 -0
- package/lib/module/native/RnExecutorchModules.js +2 -12
- package/lib/module/native/RnExecutorchModules.js.map +1 -1
- package/lib/module/types/common.js +25 -8
- package/lib/module/types/common.js.map +1 -1
- package/lib/module/types/llm.js.map +1 -1
- package/lib/module/types/stt.js +1 -79
- package/lib/module/types/stt.js.map +1 -1
- package/lib/module/types/vad.js +2 -0
- package/lib/module/types/vad.js.map +1 -0
- package/lib/module/utils/ResourceFetcher.js +275 -114
- package/lib/module/utils/ResourceFetcher.js.map +1 -1
- package/lib/module/utils/ResourceFetcherUtils.js +155 -0
- package/lib/module/utils/ResourceFetcherUtils.js.map +1 -0
- package/lib/module/utils/llm.js +41 -1
- package/lib/module/utils/llm.js.map +1 -1
- package/lib/typescript/Error.d.ts +3 -0
- package/lib/typescript/Error.d.ts.map +1 -1
- package/lib/typescript/common/Logger.d.ts +9 -0
- package/lib/typescript/common/Logger.d.ts.map +1 -0
- package/lib/typescript/constants/llmDefaults.d.ts +1 -0
- package/lib/typescript/constants/llmDefaults.d.ts.map +1 -1
- package/lib/typescript/constants/modelUrls.d.ts +263 -79
- package/lib/typescript/constants/modelUrls.d.ts.map +1 -1
- package/lib/typescript/constants/ocr/models.d.ts +882 -284
- package/lib/typescript/constants/ocr/models.d.ts.map +1 -1
- package/lib/typescript/constants/ocr/symbols.d.ts +1 -1
- package/lib/typescript/constants/ocr/symbols.d.ts.map +1 -1
- package/lib/typescript/controllers/LLMController.d.ts +8 -7
- package/lib/typescript/controllers/LLMController.d.ts.map +1 -1
- package/lib/typescript/controllers/OCRController.d.ts +5 -6
- package/lib/typescript/controllers/OCRController.d.ts.map +1 -1
- package/lib/typescript/controllers/VerticalOCRController.d.ts +5 -6
- package/lib/typescript/controllers/VerticalOCRController.d.ts.map +1 -1
- package/lib/typescript/hooks/computer_vision/useClassification.d.ts +8 -6
- package/lib/typescript/hooks/computer_vision/useClassification.d.ts.map +1 -1
- package/lib/typescript/hooks/computer_vision/useImageEmbeddings.d.ts +16 -0
- package/lib/typescript/hooks/computer_vision/useImageEmbeddings.d.ts.map +1 -0
- package/lib/typescript/hooks/computer_vision/useImageSegmentation.d.ts +5 -3
- package/lib/typescript/hooks/computer_vision/useImageSegmentation.d.ts.map +1 -1
- package/lib/typescript/hooks/computer_vision/useOCR.d.ts +5 -5
- package/lib/typescript/hooks/computer_vision/useOCR.d.ts.map +1 -1
- package/lib/typescript/hooks/computer_vision/useObjectDetection.d.ts +5 -3
- package/lib/typescript/hooks/computer_vision/useObjectDetection.d.ts.map +1 -1
- package/lib/typescript/hooks/computer_vision/useStyleTransfer.d.ts +5 -3
- package/lib/typescript/hooks/computer_vision/useStyleTransfer.d.ts.map +1 -1
- package/lib/typescript/hooks/computer_vision/useTextToImage.d.ts +22 -0
- package/lib/typescript/hooks/computer_vision/useTextToImage.d.ts.map +1 -0
- package/lib/typescript/hooks/computer_vision/useVerticalOCR.d.ts +4 -6
- package/lib/typescript/hooks/computer_vision/useVerticalOCR.d.ts.map +1 -1
- package/lib/typescript/hooks/general/useExecutorchModule.d.ts +1 -1
- package/lib/typescript/hooks/natural_language_processing/useLLM.d.ts +6 -4
- package/lib/typescript/hooks/natural_language_processing/useLLM.d.ts.map +1 -1
- package/lib/typescript/hooks/natural_language_processing/useSpeechToText.d.ts +15 -22
- package/lib/typescript/hooks/natural_language_processing/useSpeechToText.d.ts.map +1 -1
- package/lib/typescript/hooks/natural_language_processing/useTextEmbeddings.d.ts +9 -5
- package/lib/typescript/hooks/natural_language_processing/useTextEmbeddings.d.ts.map +1 -1
- package/lib/typescript/hooks/natural_language_processing/useTokenizer.d.ts +6 -4
- package/lib/typescript/hooks/natural_language_processing/useTokenizer.d.ts.map +1 -1
- package/lib/typescript/hooks/natural_language_processing/useVAD.d.ts +16 -0
- package/lib/typescript/hooks/natural_language_processing/useVAD.d.ts.map +1 -0
- package/lib/typescript/hooks/useModule.d.ts +8 -5
- package/lib/typescript/hooks/useModule.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +26 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/modules/BaseModule.d.ts +7 -6
- package/lib/typescript/modules/BaseModule.d.ts.map +1 -1
- package/lib/typescript/modules/computer_vision/ClassificationModule.d.ts +4 -4
- package/lib/typescript/modules/computer_vision/ClassificationModule.d.ts.map +1 -1
- package/lib/typescript/modules/computer_vision/ImageEmbeddingsModule.d.ts +9 -0
- package/lib/typescript/modules/computer_vision/ImageEmbeddingsModule.d.ts.map +1 -0
- package/lib/typescript/modules/computer_vision/ImageSegmentationModule.d.ts +7 -27
- package/lib/typescript/modules/computer_vision/ImageSegmentationModule.d.ts.map +1 -1
- package/lib/typescript/modules/computer_vision/OCRModule.d.ts +8 -7
- package/lib/typescript/modules/computer_vision/OCRModule.d.ts.map +1 -1
- package/lib/typescript/modules/computer_vision/ObjectDetectionModule.d.ts +5 -3
- package/lib/typescript/modules/computer_vision/ObjectDetectionModule.d.ts.map +1 -1
- package/lib/typescript/modules/computer_vision/StyleTransferModule.d.ts +4 -3
- package/lib/typescript/modules/computer_vision/StyleTransferModule.d.ts.map +1 -1
- package/lib/typescript/modules/computer_vision/TextToImageModule.d.ts +16 -0
- package/lib/typescript/modules/computer_vision/TextToImageModule.d.ts.map +1 -0
- package/lib/typescript/modules/computer_vision/VerticalOCRModule.d.ts +7 -8
- package/lib/typescript/modules/computer_vision/VerticalOCRModule.d.ts.map +1 -1
- package/lib/typescript/modules/general/ExecutorchModule.d.ts +4 -7
- package/lib/typescript/modules/general/ExecutorchModule.d.ts.map +1 -1
- package/lib/typescript/modules/natural_language_processing/LLMModule.d.ts +19 -17
- package/lib/typescript/modules/natural_language_processing/LLMModule.d.ts.map +1 -1
- package/lib/typescript/modules/natural_language_processing/SpeechToTextModule.d.ts +17 -13
- package/lib/typescript/modules/natural_language_processing/SpeechToTextModule.d.ts.map +1 -1
- package/lib/typescript/modules/natural_language_processing/TextEmbeddingsModule.d.ts +5 -3
- package/lib/typescript/modules/natural_language_processing/TextEmbeddingsModule.d.ts.map +1 -1
- package/lib/typescript/modules/natural_language_processing/TokenizerModule.d.ts +10 -9
- package/lib/typescript/modules/natural_language_processing/TokenizerModule.d.ts.map +1 -1
- package/lib/typescript/modules/natural_language_processing/VADModule.d.ts +10 -0
- package/lib/typescript/modules/natural_language_processing/VADModule.d.ts.map +1 -0
- package/lib/typescript/native/{NativeStyleTransfer.d.ts → NativeETInstaller.d.ts} +2 -3
- package/lib/typescript/native/NativeETInstaller.d.ts.map +1 -0
- package/lib/typescript/native/RnExecutorchModules.d.ts +3 -23
- package/lib/typescript/native/RnExecutorchModules.d.ts.map +1 -1
- package/lib/typescript/types/common.d.ts +30 -2
- package/lib/typescript/types/common.d.ts.map +1 -1
- package/lib/typescript/types/llm.d.ts +9 -1
- package/lib/typescript/types/llm.d.ts.map +1 -1
- package/lib/typescript/types/stt.d.ts +9 -88
- package/lib/typescript/types/stt.d.ts.map +1 -1
- package/lib/typescript/types/vad.d.ts +5 -0
- package/lib/typescript/types/vad.d.ts.map +1 -0
- package/lib/typescript/utils/ResourceFetcher.d.ts +47 -10
- package/lib/typescript/utils/ResourceFetcher.d.ts.map +1 -1
- package/lib/typescript/utils/ResourceFetcherUtils.d.ts +55 -0
- package/lib/typescript/utils/ResourceFetcherUtils.d.ts.map +1 -0
- package/lib/typescript/utils/llm.d.ts +4 -0
- package/lib/typescript/utils/llm.d.ts.map +1 -1
- package/package.json +32 -68
- package/react-native-executorch.podspec +62 -4
- package/src/Error.ts +3 -0
- package/src/common/Logger.ts +25 -0
- package/src/constants/directories.ts +1 -1
- package/src/constants/llmDefaults.ts +11 -0
- package/src/constants/modelUrls.ts +433 -168
- package/src/constants/ocr/models.ts +826 -395
- package/src/constants/ocr/symbols.ts +66 -65
- package/src/controllers/LLMController.ts +76 -36
- package/src/controllers/OCRController.ts +25 -16
- package/src/controllers/VerticalOCRController.ts +25 -15
- package/src/hooks/computer_vision/useClassification.ts +8 -9
- package/src/hooks/computer_vision/useImageEmbeddings.ts +15 -0
- package/src/hooks/computer_vision/useImageSegmentation.ts +3 -6
- package/src/hooks/computer_vision/useOCR.ts +32 -25
- package/src/hooks/computer_vision/useObjectDetection.ts +4 -7
- package/src/hooks/computer_vision/useStyleTransfer.ts +4 -4
- package/src/hooks/computer_vision/useTextToImage.ts +92 -0
- package/src/hooks/computer_vision/useVerticalOCR.ts +33 -31
- package/src/hooks/general/useExecutorchModule.ts +1 -1
- package/src/hooks/natural_language_processing/useLLM.ts +54 -31
- package/src/hooks/natural_language_processing/useSpeechToText.ts +96 -88
- package/src/hooks/natural_language_processing/useTextEmbeddings.ts +9 -9
- package/src/hooks/natural_language_processing/useTokenizer.ts +21 -21
- package/src/hooks/natural_language_processing/useVAD.ts +15 -0
- package/src/hooks/useModule.ts +23 -13
- package/src/index.ts +126 -0
- package/src/modules/BaseModule.ts +17 -22
- package/src/modules/computer_vision/ClassificationModule.ts +18 -9
- package/src/modules/computer_vision/ImageEmbeddingsModule.ts +26 -0
- package/src/modules/computer_vision/ImageSegmentationModule.ts +34 -26
- package/src/modules/computer_vision/OCRModule.ts +23 -15
- package/src/modules/computer_vision/ObjectDetectionModule.ts +22 -9
- package/src/modules/computer_vision/StyleTransferModule.ts +18 -9
- package/src/modules/computer_vision/TextToImageModule.ts +93 -0
- package/src/modules/computer_vision/VerticalOCRModule.ts +25 -21
- package/src/modules/general/ExecutorchModule.ts +16 -46
- package/src/modules/natural_language_processing/LLMModule.ts +41 -32
- package/src/modules/natural_language_processing/SpeechToTextModule.ts +164 -66
- package/src/modules/natural_language_processing/TextEmbeddingsModule.ts +25 -10
- package/src/modules/natural_language_processing/TokenizerModule.ts +27 -17
- package/src/modules/natural_language_processing/VADModule.ts +27 -0
- package/src/native/NativeETInstaller.ts +8 -0
- package/src/native/RnExecutorchModules.ts +4 -50
- package/src/types/common.ts +40 -12
- package/src/types/llm.ts +10 -0
- package/src/types/stt.ts +87 -90
- package/src/types/vad.ts +4 -0
- package/src/utils/ResourceFetcher.ts +342 -120
- package/src/utils/ResourceFetcherUtils.ts +184 -0
- package/src/utils/llm.ts +65 -1
- package/third-party/android/libs/cpuinfo/arm64-v8a/libcpuinfo.so +0 -0
- package/third-party/android/libs/executorch/arm64-v8a/libexecutorch.so +0 -0
- package/third-party/android/libs/executorch/x86_64/libexecutorch.so +0 -0
- package/third-party/android/libs/opencv/arm64-v8a/libopencv_core.a +0 -0
- package/third-party/android/libs/opencv/arm64-v8a/libopencv_features2d.a +0 -0
- package/third-party/android/libs/opencv/arm64-v8a/libopencv_highgui.a +0 -0
- package/third-party/android/libs/opencv/arm64-v8a/libopencv_imgproc.a +0 -0
- package/third-party/android/libs/opencv/arm64-v8a/libopencv_photo.a +0 -0
- package/third-party/android/libs/opencv/arm64-v8a/libopencv_video.a +0 -0
- package/third-party/android/libs/opencv/x86_64/libopencv_core.a +0 -0
- package/third-party/android/libs/opencv/x86_64/libopencv_features2d.a +0 -0
- package/third-party/android/libs/opencv/x86_64/libopencv_highgui.a +0 -0
- package/third-party/android/libs/opencv/x86_64/libopencv_imgproc.a +0 -0
- package/third-party/android/libs/opencv/x86_64/libopencv_photo.a +0 -0
- package/third-party/android/libs/opencv/x86_64/libopencv_video.a +0 -0
- package/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv.a +0 -0
- package/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_hal.a +0 -0
- package/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_thread.a +0 -0
- package/third-party/android/libs/pthreadpool/arm64-v8a/libpthreadpool.so +0 -0
- package/third-party/android/libs/tokenizers-cpp/arm64-v8a/libsentencepiece.a +0 -0
- package/third-party/android/libs/tokenizers-cpp/arm64-v8a/libtokenizers_c.a +0 -0
- package/third-party/android/libs/tokenizers-cpp/arm64-v8a/libtokenizers_cpp.a +0 -0
- package/{ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/ExecutorchLib → third-party/android/libs/tokenizers-cpp/x86_64/libsentencepiece.a} +0 -0
- package/third-party/android/libs/tokenizers-cpp/x86_64/libtokenizers_c.a +0 -0
- package/third-party/android/libs/tokenizers-cpp/x86_64/libtokenizers_cpp.a +0 -0
- package/third-party/include/c10/macros/Export.h +1 -0
- package/third-party/include/c10/macros/Macros.h +1 -0
- package/third-party/include/c10/util/BFloat16-inl.h +1 -0
- package/third-party/include/c10/util/BFloat16-math.h +266 -0
- package/third-party/include/c10/util/BFloat16.h +1 -0
- package/third-party/include/c10/util/Half-inl.h +1 -0
- package/third-party/include/c10/util/Half.h +8 -0
- package/third-party/include/c10/util/TypeSafeSignMath.h +1 -0
- package/third-party/include/c10/util/bit_cast.h +1 -0
- package/third-party/include/c10/util/complex.h +72 -0
- package/third-party/include/c10/util/complex_math.h +399 -0
- package/third-party/include/c10/util/complex_utils.h +41 -0
- package/third-party/include/c10/util/floating_point_utils.h +1 -0
- package/third-party/include/c10/util/irange.h +107 -0
- package/third-party/include/c10/util/llvmMathExtras.h +866 -0
- package/third-party/include/c10/util/overflows.h +95 -0
- package/third-party/include/c10/util/safe_numerics.h +97 -0
- package/third-party/include/cpuinfo/cpuinfo.h +2305 -0
- package/third-party/include/executorch/ExecuTorch.h +13 -0
- package/third-party/include/executorch/ExecuTorchError.h +90 -0
- package/third-party/include/executorch/ExecuTorchLLM/ExecuTorchLLM.h +12 -0
- package/third-party/include/executorch/ExecuTorchLLM/ExecuTorchLLMConfig.h +56 -0
- package/third-party/include/executorch/ExecuTorchLLM/ExecuTorchLLMError.h +16 -0
- package/third-party/include/executorch/ExecuTorchLLM/ExecuTorchLLMMultimodalRunner.h +227 -0
- package/third-party/include/executorch/ExecuTorchLLM/ExecuTorchLLMTextRunner.h +97 -0
- package/third-party/include/executorch/ExecuTorchLLM/module.modulemap +4 -0
- package/third-party/include/executorch/ExecuTorchLog.h +77 -0
- package/third-party/include/executorch/ExecuTorchModule.h +563 -0
- package/third-party/include/executorch/ExecuTorchTensor.h +1421 -0
- package/third-party/include/executorch/ExecuTorchValue.h +265 -0
- package/third-party/include/executorch/extension/module/bundled_module.h +131 -0
- package/third-party/include/executorch/extension/module/module.h +649 -0
- package/third-party/include/executorch/extension/tensor/tensor.h +14 -0
- package/third-party/include/executorch/extension/tensor/tensor_accessor.h +190 -0
- package/third-party/include/executorch/extension/tensor/tensor_ptr.h +409 -0
- package/third-party/include/executorch/extension/tensor/tensor_ptr_maker.h +653 -0
- package/third-party/include/executorch/extension/threadpool/cpuinfo_utils.h +24 -0
- package/third-party/include/executorch/extension/threadpool/threadpool.h +95 -0
- package/third-party/include/executorch/runtime/backend/backend_execution_context.h +71 -0
- package/third-party/include/executorch/runtime/backend/backend_init_context.h +84 -0
- package/third-party/include/executorch/runtime/backend/backend_option_context.h +34 -0
- package/third-party/include/executorch/runtime/backend/interface.h +227 -0
- package/third-party/include/executorch/runtime/backend/options.h +206 -0
- package/third-party/include/executorch/runtime/core/array_ref.h +235 -0
- package/third-party/include/executorch/runtime/core/data_loader.h +136 -0
- package/third-party/include/executorch/runtime/core/defines.h +20 -0
- package/third-party/include/executorch/runtime/core/error.h +256 -0
- package/third-party/include/executorch/runtime/core/evalue.h +515 -0
- package/third-party/include/executorch/runtime/core/event_tracer.h +580 -0
- package/third-party/include/executorch/runtime/core/event_tracer_hooks.h +332 -0
- package/third-party/include/executorch/runtime/core/event_tracer_hooks_delegate.h +197 -0
- package/third-party/include/executorch/runtime/core/exec_aten/exec_aten.h +170 -0
- package/third-party/include/executorch/runtime/core/exec_aten/util/dim_order_util.h +264 -0
- package/third-party/include/executorch/runtime/core/exec_aten/util/scalar_type_util.h +1313 -0
- package/third-party/include/executorch/runtime/core/exec_aten/util/tensor_dimension_limit.h +21 -0
- package/third-party/include/executorch/runtime/core/exec_aten/util/tensor_shape_to_c_string.h +69 -0
- package/third-party/include/executorch/runtime/core/exec_aten/util/tensor_util.h +1251 -0
- package/third-party/include/executorch/runtime/core/freeable_buffer.h +107 -0
- package/third-party/include/executorch/runtime/core/function_ref.h +100 -0
- package/third-party/include/executorch/runtime/core/hierarchical_allocator.h +107 -0
- package/third-party/include/executorch/runtime/core/memory_allocator.h +208 -0
- package/third-party/include/executorch/runtime/core/named_data_map.h +76 -0
- package/third-party/include/executorch/runtime/core/portable_type/bfloat16.h +27 -0
- package/third-party/include/executorch/runtime/core/portable_type/bfloat16_math.h +14 -0
- package/third-party/include/executorch/runtime/core/portable_type/bits_types.h +83 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Export.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Macros.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-inl.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-math.h +266 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half-inl.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half.h +8 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/TypeSafeSignMath.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/bit_cast.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/complex.h +72 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/complex_math.h +399 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/complex_utils.h +41 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/floating_point_utils.h +1 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/irange.h +107 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/llvmMathExtras.h +866 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/overflows.h +95 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/safe_numerics.h +97 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/macros/Export.h +154 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/macros/Macros.h +553 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/BFloat16.h +477 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/Half.h +781 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/TypeSafeSignMath.h +141 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/bit_cast.h +49 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/complex.h +593 -0
- package/third-party/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/floating_point_utils.h +38 -0
- package/third-party/include/executorch/runtime/core/portable_type/complex.h +21 -0
- package/third-party/include/executorch/runtime/core/portable_type/device.h +70 -0
- package/third-party/include/executorch/runtime/core/portable_type/half.h +27 -0
- package/third-party/include/executorch/runtime/core/portable_type/optional.h +36 -0
- package/third-party/include/executorch/runtime/core/portable_type/qint_types.h +83 -0
- package/third-party/include/executorch/runtime/core/portable_type/scalar.h +110 -0
- package/third-party/include/executorch/runtime/core/portable_type/scalar_type.h +154 -0
- package/third-party/include/executorch/runtime/core/portable_type/string_view.h +29 -0
- package/third-party/include/executorch/runtime/core/portable_type/tensor.h +142 -0
- package/third-party/include/executorch/runtime/core/portable_type/tensor_impl.h +281 -0
- package/third-party/include/executorch/runtime/core/portable_type/tensor_options.h +60 -0
- package/third-party/include/executorch/runtime/core/result.h +258 -0
- package/third-party/include/executorch/runtime/core/span.h +97 -0
- package/third-party/include/executorch/runtime/core/tag.h +90 -0
- package/third-party/include/executorch/runtime/core/tensor_layout.h +79 -0
- package/third-party/include/executorch/runtime/core/tensor_shape_dynamism.h +39 -0
- package/third-party/include/executorch/runtime/executor/memory_manager.h +113 -0
- package/third-party/include/executorch/runtime/executor/merged_data_map.h +142 -0
- package/third-party/include/executorch/runtime/executor/method.h +412 -0
- package/third-party/include/executorch/runtime/executor/method_meta.h +298 -0
- package/third-party/include/executorch/runtime/executor/program.h +309 -0
- package/third-party/include/executorch/runtime/executor/pte_data_map.h +145 -0
- package/third-party/include/executorch/runtime/executor/tensor_parser.h +157 -0
- package/third-party/include/executorch/runtime/kernel/kernel_runtime_context.h +122 -0
- package/third-party/include/executorch/runtime/kernel/operator_registry.h +280 -0
- package/third-party/include/executorch/runtime/platform/abort.h +36 -0
- package/third-party/include/executorch/runtime/platform/assert.h +119 -0
- package/third-party/include/executorch/runtime/platform/clock.h +43 -0
- package/third-party/include/executorch/runtime/platform/compat_unistd.h +75 -0
- package/third-party/include/executorch/runtime/platform/compiler.h +201 -0
- package/third-party/include/executorch/runtime/platform/log.h +177 -0
- package/third-party/include/executorch/runtime/platform/platform.h +259 -0
- package/third-party/include/executorch/runtime/platform/profiler.h +292 -0
- package/third-party/include/executorch/runtime/platform/runtime.h +35 -0
- package/third-party/include/executorch/runtime/platform/system.h +49 -0
- package/third-party/include/executorch/runtime/platform/types.h +24 -0
- package/third-party/include/executorch/schema/extended_header.h +85 -0
- package/third-party/include/headeronly/macros/Export.h +88 -0
- package/third-party/include/opencv2/core/affine.hpp +676 -0
- package/third-party/include/opencv2/core/async.hpp +107 -0
- package/third-party/include/opencv2/core/base.hpp +735 -0
- package/third-party/include/opencv2/core/bindings_utils.hpp +279 -0
- package/third-party/include/opencv2/core/bufferpool.hpp +39 -0
- package/third-party/include/opencv2/core/check.hpp +231 -0
- package/third-party/include/opencv2/core/core.hpp +55 -0
- package/third-party/include/opencv2/core/core_c.h +3261 -0
- package/third-party/include/opencv2/core/cv_cpu_dispatch.h +404 -0
- package/third-party/include/opencv2/core/cv_cpu_helper.h +856 -0
- package/third-party/include/opencv2/core/cvdef.h +1003 -0
- package/third-party/include/opencv2/core/cvstd.hpp +196 -0
- package/third-party/include/opencv2/core/cvstd.inl.hpp +188 -0
- package/third-party/include/opencv2/core/cvstd_wrapper.hpp +187 -0
- package/third-party/include/opencv2/core/detail/async_promise.hpp +73 -0
- package/third-party/include/opencv2/core/detail/dispatch_helper.impl.hpp +48 -0
- package/third-party/include/opencv2/core/detail/exception_ptr.hpp +24 -0
- package/third-party/include/opencv2/core/dualquaternion.hpp +1054 -0
- package/third-party/include/opencv2/core/dualquaternion.inl.hpp +464 -0
- package/third-party/include/opencv2/core/eigen.hpp +405 -0
- package/third-party/include/opencv2/core/fast_math.hpp +433 -0
- package/third-party/include/opencv2/core/hal/hal.hpp +451 -0
- package/third-party/include/opencv2/core/hal/interface.h +191 -0
- package/third-party/include/opencv2/core/hal/intrin.hpp +1222 -0
- package/third-party/include/opencv2/core/hal/intrin_avx.hpp +3378 -0
- package/third-party/include/opencv2/core/hal/intrin_avx512.hpp +3688 -0
- package/third-party/include/opencv2/core/hal/intrin_cpp.hpp +3446 -0
- package/third-party/include/opencv2/core/hal/intrin_forward.hpp +195 -0
- package/third-party/include/opencv2/core/hal/intrin_lasx.hpp +3243 -0
- package/third-party/include/opencv2/core/hal/intrin_lsx.hpp +2671 -0
- package/third-party/include/opencv2/core/hal/intrin_math.hpp +772 -0
- package/third-party/include/opencv2/core/hal/intrin_msa.hpp +1973 -0
- package/third-party/include/opencv2/core/hal/intrin_neon.hpp +2710 -0
- package/third-party/include/opencv2/core/hal/intrin_rvv071.hpp +3452 -0
- package/third-party/include/opencv2/core/hal/intrin_rvv_scalable.hpp +2559 -0
- package/third-party/include/opencv2/core/hal/intrin_sse.hpp +3528 -0
- package/third-party/include/opencv2/core/hal/intrin_sse_em.hpp +175 -0
- package/third-party/include/opencv2/core/hal/intrin_vsx.hpp +1756 -0
- package/third-party/include/opencv2/core/hal/intrin_wasm.hpp +2911 -0
- package/third-party/include/opencv2/core/hal/msa_macros.h +2079 -0
- package/third-party/include/opencv2/core/hal/simd_utils.impl.hpp +313 -0
- package/third-party/include/opencv2/core/mat.hpp +3842 -0
- package/third-party/include/opencv2/core/mat.inl.hpp +2753 -0
- package/third-party/include/opencv2/core/matx.hpp +603 -0
- package/third-party/include/opencv2/core/matx.inl.hpp +1132 -0
- package/third-party/include/opencv2/core/neon_utils.hpp +127 -0
- package/third-party/include/opencv2/core/operations.hpp +610 -0
- package/third-party/include/opencv2/core/optim.hpp +362 -0
- package/third-party/include/opencv2/core/parallel/backend/parallel_for.openmp.hpp +66 -0
- package/third-party/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp +148 -0
- package/third-party/include/opencv2/core/parallel/parallel_backend.hpp +108 -0
- package/third-party/include/opencv2/core/persistence.hpp +1321 -0
- package/third-party/include/opencv2/core/quaternion.hpp +1889 -0
- package/third-party/include/opencv2/core/quaternion.inl.hpp +907 -0
- package/third-party/include/opencv2/core/saturate.hpp +347 -0
- package/third-party/include/opencv2/core/simd_intrinsics.hpp +90 -0
- package/third-party/include/opencv2/core/softfloat.hpp +657 -0
- package/third-party/include/opencv2/core/sse_utils.hpp +861 -0
- package/third-party/include/opencv2/core/traits.hpp +417 -0
- package/third-party/include/opencv2/core/types.hpp +2368 -0
- package/third-party/include/opencv2/core/types_c.h +2064 -0
- package/third-party/include/opencv2/core/utility.hpp +1296 -0
- package/third-party/include/opencv2/core/utils/allocator_stats.hpp +31 -0
- package/third-party/include/opencv2/core/utils/allocator_stats.impl.hpp +111 -0
- package/third-party/include/opencv2/core/utils/filesystem.hpp +91 -0
- package/third-party/include/opencv2/core/utils/fp_control_utils.hpp +70 -0
- package/third-party/include/opencv2/core/utils/instrumentation.hpp +127 -0
- package/third-party/include/opencv2/core/utils/logger.defines.hpp +50 -0
- package/third-party/include/opencv2/core/utils/logger.hpp +258 -0
- package/third-party/include/opencv2/core/utils/logtag.hpp +27 -0
- package/third-party/include/opencv2/core/utils/tls.hpp +230 -0
- package/third-party/include/opencv2/core/utils/trace.hpp +281 -0
- package/third-party/include/opencv2/core/version.hpp +29 -0
- package/third-party/include/opencv2/core/vsx_utils.hpp +1115 -0
- package/third-party/include/opencv2/core.hpp +3699 -0
- package/third-party/include/opencv2/cvconfig.h +155 -0
- package/third-party/include/opencv2/dnn/dnn.hpp +51 -0
- package/third-party/include/opencv2/dnn.hpp +17 -0
- package/third-party/include/opencv2/features2d/features2d.hpp +55 -0
- package/third-party/include/opencv2/features2d/hal/interface.h +32 -0
- package/third-party/include/opencv2/features2d.hpp +1756 -0
- package/third-party/include/opencv2/highgui/highgui.hpp +113 -0
- package/third-party/include/opencv2/highgui.hpp +17 -0
- package/third-party/include/opencv2/imgproc/bindings.hpp +34 -0
- package/third-party/include/opencv2/imgproc/detail/gcgraph.hpp +355 -0
- package/third-party/include/opencv2/imgproc/detail/legacy.hpp +35 -0
- package/third-party/include/opencv2/imgproc/hal/hal.hpp +246 -0
- package/third-party/include/opencv2/imgproc/hal/interface.h +52 -0
- package/third-party/include/opencv2/imgproc/imgproc.hpp +55 -0
- package/third-party/include/opencv2/imgproc/imgproc_c.h +1261 -0
- package/third-party/include/opencv2/imgproc/segmentation.hpp +168 -0
- package/third-party/include/opencv2/imgproc/types_c.h +632 -0
- package/third-party/include/opencv2/imgproc.hpp +5956 -0
- package/third-party/include/opencv2/opencv.hpp +102 -0
- package/third-party/include/opencv2/opencv_modules.hpp +19 -0
- package/third-party/include/opencv2/photo/legacy/constants_c.h +10 -0
- package/third-party/include/opencv2/photo/photo.hpp +55 -0
- package/third-party/include/opencv2/photo.hpp +975 -0
- package/third-party/include/opencv2/video/background_segm.hpp +341 -0
- package/third-party/include/opencv2/video/detail/tracking.detail.hpp +435 -0
- package/third-party/include/opencv2/video/legacy/constants_c.h +15 -0
- package/third-party/include/opencv2/video/tracking.hpp +1014 -0
- package/third-party/include/opencv2/video/video.hpp +55 -0
- package/third-party/include/opencv2/video.hpp +65 -0
- package/third-party/include/pthreadpool/pthreadpool.h +2236 -0
- package/third-party/include/tokenizers-cpp/tokenizers_c.h +61 -0
- package/third-party/include/tokenizers-cpp/tokenizers_cpp.h +118 -0
- package/third-party/include/torch/headeronly/macros/Export.h +154 -0
- package/third-party/include/torch/headeronly/macros/Macros.h +553 -0
- package/third-party/include/torch/headeronly/util/BFloat16.h +477 -0
- package/third-party/include/torch/headeronly/util/Half.h +781 -0
- package/third-party/include/torch/headeronly/util/TypeSafeSignMath.h +141 -0
- package/third-party/include/torch/headeronly/util/bit_cast.h +49 -0
- package/third-party/include/torch/headeronly/util/complex.h +593 -0
- package/third-party/include/torch/headeronly/util/floating_point_utils.h +38 -0
- package/third-party/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/ExecutorchLib +0 -0
- package/{ios → third-party/ios}/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Info.plist +0 -0
- package/third-party/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/ExecutorchLib +0 -0
- package/{ios → third-party/ios}/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Info.plist +0 -0
- package/third-party/ios/libs/cpuinfo/libcpuinfo.a +0 -0
- package/third-party/ios/libs/pthreadpool/physical-arm64-release/libpthreadpool.a +0 -0
- package/third-party/ios/libs/pthreadpool/simulator-arm64-debug/libpthreadpool.a +0 -0
- package/third-party/ios/libs/tokenizers-cpp/physical-arm64-release/libsentencepiece.a +0 -0
- package/{ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/ExecutorchLib → third-party/ios/libs/tokenizers-cpp/physical-arm64-release/libtokenizers_c.a} +0 -0
- package/third-party/ios/libs/tokenizers-cpp/physical-arm64-release/libtokenizers_cpp.a +0 -0
- package/third-party/ios/libs/tokenizers-cpp/simulator-arm64-debug/libsentencepiece.a +0 -0
- package/third-party/ios/libs/tokenizers-cpp/simulator-arm64-debug/libtokenizers_c.a +0 -0
- package/third-party/ios/libs/tokenizers-cpp/simulator-arm64-debug/libtokenizers_cpp.a +0 -0
- package/LICENSE +0 -79
- package/android/src/main/java/com/swmansion/rnexecutorch/Classification.kt +0 -64
- package/android/src/main/java/com/swmansion/rnexecutorch/ETModule.kt +0 -90
- package/android/src/main/java/com/swmansion/rnexecutorch/ImageSegmentation.kt +0 -58
- package/android/src/main/java/com/swmansion/rnexecutorch/LLM.kt +0 -63
- package/android/src/main/java/com/swmansion/rnexecutorch/OCR.kt +0 -90
- package/android/src/main/java/com/swmansion/rnexecutorch/ObjectDetection.kt +0 -64
- package/android/src/main/java/com/swmansion/rnexecutorch/SpeechToText.kt +0 -91
- package/android/src/main/java/com/swmansion/rnexecutorch/StyleTransfer.kt +0 -54
- package/android/src/main/java/com/swmansion/rnexecutorch/TextEmbeddings.kt +0 -51
- package/android/src/main/java/com/swmansion/rnexecutorch/Tokenizer.kt +0 -86
- package/android/src/main/java/com/swmansion/rnexecutorch/VerticalOCR.kt +0 -179
- package/android/src/main/java/com/swmansion/rnexecutorch/models/BaseModel.kt +0 -54
- package/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsModel.kt +0 -48
- package/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsUtils.kt +0 -37
- package/android/src/main/java/com/swmansion/rnexecutorch/models/classification/ClassificationModel.kt +0 -46
- package/android/src/main/java/com/swmansion/rnexecutorch/models/classification/Constants.kt +0 -1005
- package/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/Constants.kt +0 -26
- package/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/ImageSegmentationModel.kt +0 -142
- package/android/src/main/java/com/swmansion/rnexecutorch/models/objectDetection/SSDLiteLargeModel.kt +0 -74
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/Detector.kt +0 -82
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/RecognitionHandler.kt +0 -117
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/Recognizer.kt +0 -51
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/VerticalDetector.kt +0 -89
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/utils/CTCLabelConverter.kt +0 -58
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/utils/Constants.kt +0 -31
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/utils/DetectorUtils.kt +0 -608
- package/android/src/main/java/com/swmansion/rnexecutorch/models/ocr/utils/RecognizerUtils.kt +0 -430
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/BaseS2TDecoder.kt +0 -39
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/BaseS2TModule.kt +0 -43
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/Moonshine.kt +0 -16
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/MoonshineDecoder.kt +0 -23
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/MoonshineEncoder.kt +0 -20
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/Whisper.kt +0 -16
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/WhisperDecoder.kt +0 -22
- package/android/src/main/java/com/swmansion/rnexecutorch/models/speechToText/WhisperEncoder.kt +0 -29
- package/android/src/main/java/com/swmansion/rnexecutorch/models/styleTransfer/StyleTransferModel.kt +0 -43
- package/android/src/main/java/com/swmansion/rnexecutorch/utils/ArrayUtils.kt +0 -87
- package/android/src/main/java/com/swmansion/rnexecutorch/utils/ETError.kt +0 -34
- package/android/src/main/java/com/swmansion/rnexecutorch/utils/ImageProcessor.kt +0 -237
- package/android/src/main/java/com/swmansion/rnexecutorch/utils/Numerical.kt +0 -8
- package/android/src/main/java/com/swmansion/rnexecutorch/utils/ObjectDetectionUtils.kt +0 -201
- package/android/src/main/java/com/swmansion/rnexecutorch/utils/STFT.kt +0 -50
- package/android/src/main/java/com/swmansion/rnexecutorch/utils/TensorUtils.kt +0 -103
- package/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/ETModel.h +0 -27
- package/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h +0 -14
- package/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/LLaMARunner.h +0 -32
- package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/ETModel.h +0 -27
- package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h +0 -14
- package/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/LLaMARunner.h +0 -32
- package/ios/RnExecutorch/Classification.h +0 -5
- package/ios/RnExecutorch/Classification.mm +0 -54
- package/ios/RnExecutorch/ETModule.h +0 -5
- package/ios/RnExecutorch/ETModule.mm +0 -75
- package/ios/RnExecutorch/ImageSegmentation.h +0 -5
- package/ios/RnExecutorch/ImageSegmentation.mm +0 -60
- package/ios/RnExecutorch/LLM.h +0 -5
- package/ios/RnExecutorch/LLM.mm +0 -78
- package/ios/RnExecutorch/OCR.h +0 -5
- package/ios/RnExecutorch/OCR.mm +0 -96
- package/ios/RnExecutorch/ObjectDetection.h +0 -5
- package/ios/RnExecutorch/ObjectDetection.mm +0 -56
- package/ios/RnExecutorch/SpeechToText.h +0 -5
- package/ios/RnExecutorch/SpeechToText.mm +0 -125
- package/ios/RnExecutorch/StyleTransfer.h +0 -5
- package/ios/RnExecutorch/StyleTransfer.mm +0 -55
- package/ios/RnExecutorch/TextEmbeddings.h +0 -5
- package/ios/RnExecutorch/TextEmbeddings.mm +0 -62
- package/ios/RnExecutorch/Tokenizer.h +0 -5
- package/ios/RnExecutorch/Tokenizer.mm +0 -83
- package/ios/RnExecutorch/VerticalOCR.h +0 -5
- package/ios/RnExecutorch/VerticalOCR.mm +0 -183
- package/ios/RnExecutorch/models/BaseModel.h +0 -21
- package/ios/RnExecutorch/models/BaseModel.mm +0 -43
- package/ios/RnExecutorch/models/classification/ClassificationModel.h +0 -10
- package/ios/RnExecutorch/models/classification/ClassificationModel.mm +0 -53
- package/ios/RnExecutorch/models/classification/Constants.h +0 -3
- package/ios/RnExecutorch/models/image_segmentation/Constants.h +0 -4
- package/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.h +0 -10
- package/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.mm +0 -146
- package/ios/RnExecutorch/models/object_detection/SSDLiteLargeModel.hpp +0 -11
- package/ios/RnExecutorch/models/object_detection/SSDLiteLargeModel.mm +0 -64
- package/ios/RnExecutorch/models/ocr/Detector.h +0 -9
- package/ios/RnExecutorch/models/ocr/Detector.mm +0 -101
- package/ios/RnExecutorch/models/ocr/RecognitionHandler.h +0 -16
- package/ios/RnExecutorch/models/ocr/RecognitionHandler.mm +0 -135
- package/ios/RnExecutorch/models/ocr/Recognizer.h +0 -8
- package/ios/RnExecutorch/models/ocr/Recognizer.mm +0 -77
- package/ios/RnExecutorch/models/ocr/VerticalDetector.h +0 -10
- package/ios/RnExecutorch/models/ocr/VerticalDetector.mm +0 -118
- package/ios/RnExecutorch/models/ocr/utils/CTCLabelConverter.h +0 -16
- package/ios/RnExecutorch/models/ocr/utils/CTCLabelConverter.mm +0 -80
- package/ios/RnExecutorch/models/ocr/utils/Constants.h +0 -26
- package/ios/RnExecutorch/models/ocr/utils/DetectorUtils.h +0 -31
- package/ios/RnExecutorch/models/ocr/utils/DetectorUtils.mm +0 -754
- package/ios/RnExecutorch/models/ocr/utils/OCRUtils.h +0 -10
- package/ios/RnExecutorch/models/ocr/utils/OCRUtils.mm +0 -67
- package/ios/RnExecutorch/models/ocr/utils/RecognizerUtils.h +0 -35
- package/ios/RnExecutorch/models/ocr/utils/RecognizerUtils.mm +0 -331
- package/ios/RnExecutorch/models/stt/Moonshine.hpp +0 -13
- package/ios/RnExecutorch/models/stt/Moonshine.mm +0 -64
- package/ios/RnExecutorch/models/stt/MoonshineDecoder.hpp +0 -16
- package/ios/RnExecutorch/models/stt/MoonshineDecoder.mm +0 -24
- package/ios/RnExecutorch/models/stt/MoonshineEncoder.hpp +0 -15
- package/ios/RnExecutorch/models/stt/MoonshineEncoder.mm +0 -18
- package/ios/RnExecutorch/models/stt/SpeechToTextBaseModel.hpp +0 -26
- package/ios/RnExecutorch/models/stt/SpeechToTextBaseModel.mm +0 -19
- package/ios/RnExecutorch/models/stt/Whisper.hpp +0 -12
- package/ios/RnExecutorch/models/stt/Whisper.mm +0 -68
- package/ios/RnExecutorch/models/stt/WhisperDecoder.hpp +0 -16
- package/ios/RnExecutorch/models/stt/WhisperDecoder.mm +0 -22
- package/ios/RnExecutorch/models/stt/WhisperEncoder.hpp +0 -15
- package/ios/RnExecutorch/models/stt/WhisperEncoder.mm +0 -21
- package/ios/RnExecutorch/models/style_transfer/StyleTransferModel.h +0 -11
- package/ios/RnExecutorch/models/style_transfer/StyleTransferModel.mm +0 -50
- package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.h +0 -15
- package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.mm +0 -45
- package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.h +0 -8
- package/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.mm +0 -49
- package/ios/RnExecutorch/utils/Constants.h +0 -8
- package/ios/RnExecutorch/utils/Conversions.h +0 -15
- package/ios/RnExecutorch/utils/ETError.h +0 -26
- package/ios/RnExecutorch/utils/ImageProcessor.h +0 -15
- package/ios/RnExecutorch/utils/ImageProcessor.mm +0 -147
- package/ios/RnExecutorch/utils/Numerical.h +0 -1
- package/ios/RnExecutorch/utils/Numerical.mm +0 -18
- package/ios/RnExecutorch/utils/ObjectDetectionUtils.hpp +0 -23
- package/ios/RnExecutorch/utils/SFFT.hpp +0 -13
- package/ios/RnExecutorch/utils/SFFT.mm +0 -71
- package/ios/RnExecutorch/utils/ScalarType.h +0 -14
- package/ios/RnExecutorch/utils/ScalarType.mm +0 -21
- package/lib/module/constants/sttDefaults.js +0 -72
- package/lib/module/constants/sttDefaults.js.map +0 -1
- package/lib/module/controllers/SpeechToTextController.js +0 -307
- package/lib/module/controllers/SpeechToTextController.js.map +0 -1
- package/lib/module/native/NativeClassification.js +0 -5
- package/lib/module/native/NativeClassification.js.map +0 -1
- package/lib/module/native/NativeETModule.js +0 -5
- package/lib/module/native/NativeETModule.js.map +0 -1
- package/lib/module/native/NativeImageSegmentation.js +0 -5
- package/lib/module/native/NativeImageSegmentation.js.map +0 -1
- package/lib/module/native/NativeLLM.js +0 -5
- package/lib/module/native/NativeLLM.js.map +0 -1
- package/lib/module/native/NativeOCR.js +0 -5
- package/lib/module/native/NativeOCR.js.map +0 -1
- package/lib/module/native/NativeObjectDetection.js +0 -5
- package/lib/module/native/NativeObjectDetection.js.map +0 -1
- package/lib/module/native/NativeSpeechToText.js +0 -5
- package/lib/module/native/NativeSpeechToText.js.map +0 -1
- package/lib/module/native/NativeStyleTransfer.js +0 -5
- package/lib/module/native/NativeStyleTransfer.js.map +0 -1
- package/lib/module/native/NativeTextEmbeddings.js +0 -5
- package/lib/module/native/NativeTextEmbeddings.js.map +0 -1
- package/lib/module/native/NativeTokenizer.js +0 -5
- package/lib/module/native/NativeTokenizer.js.map +0 -1
- package/lib/module/native/NativeVerticalOCR.js +0 -5
- package/lib/module/native/NativeVerticalOCR.js.map +0 -1
- package/lib/module/package.json +0 -1
- package/lib/module/utils/stt.js +0 -22
- package/lib/module/utils/stt.js.map +0 -1
- package/lib/typescript/constants/sttDefaults.d.ts +0 -28
- package/lib/typescript/constants/sttDefaults.d.ts.map +0 -1
- package/lib/typescript/controllers/SpeechToTextController.d.ts +0 -52
- package/lib/typescript/controllers/SpeechToTextController.d.ts.map +0 -1
- package/lib/typescript/native/NativeClassification.d.ts +0 -10
- package/lib/typescript/native/NativeClassification.d.ts.map +0 -1
- package/lib/typescript/native/NativeETModule.d.ts +0 -9
- package/lib/typescript/native/NativeETModule.d.ts.map +0 -1
- package/lib/typescript/native/NativeImageSegmentation.d.ts +0 -10
- package/lib/typescript/native/NativeImageSegmentation.d.ts.map +0 -1
- package/lib/typescript/native/NativeLLM.d.ts +0 -12
- package/lib/typescript/native/NativeLLM.d.ts.map +0 -1
- package/lib/typescript/native/NativeOCR.d.ts +0 -9
- package/lib/typescript/native/NativeOCR.d.ts.map +0 -1
- package/lib/typescript/native/NativeObjectDetection.d.ts +0 -9
- package/lib/typescript/native/NativeObjectDetection.d.ts.map +0 -1
- package/lib/typescript/native/NativeSpeechToText.d.ts +0 -12
- package/lib/typescript/native/NativeSpeechToText.d.ts.map +0 -1
- package/lib/typescript/native/NativeStyleTransfer.d.ts.map +0 -1
- package/lib/typescript/native/NativeTextEmbeddings.d.ts +0 -8
- package/lib/typescript/native/NativeTextEmbeddings.d.ts.map +0 -1
- package/lib/typescript/native/NativeTokenizer.d.ts +0 -12
- package/lib/typescript/native/NativeTokenizer.d.ts.map +0 -1
- package/lib/typescript/native/NativeVerticalOCR.d.ts +0 -9
- package/lib/typescript/native/NativeVerticalOCR.d.ts.map +0 -1
- package/lib/typescript/utils/stt.d.ts +0 -2
- package/lib/typescript/utils/stt.d.ts.map +0 -1
- package/src/constants/sttDefaults.ts +0 -86
- package/src/controllers/SpeechToTextController.ts +0 -458
- package/src/index.tsx +0 -47
- package/src/native/NativeClassification.ts +0 -9
- package/src/native/NativeETModule.ts +0 -14
- package/src/native/NativeImageSegmentation.ts +0 -14
- package/src/native/NativeLLM.ts +0 -14
- package/src/native/NativeOCR.ts +0 -16
- package/src/native/NativeObjectDetection.ts +0 -10
- package/src/native/NativeSpeechToText.ts +0 -17
- package/src/native/NativeStyleTransfer.ts +0 -10
- package/src/native/NativeTextEmbeddings.ts +0 -9
- package/src/native/NativeTokenizer.ts +0 -13
- package/src/native/NativeVerticalOCR.ts +0 -16
- package/src/utils/stt.ts +0 -28
- package/{ios → third-party/ios}/ExecutorchLib.xcframework/Info.plist +4 -4
|
@@ -0,0 +1,1115 @@
|
|
|
1
|
+
// This file is part of OpenCV project.
|
|
2
|
+
// It is subject to the license terms in the LICENSE file found in the top-level
|
|
3
|
+
// directory of this distribution and at http://opencv.org/license.html
|
|
4
|
+
|
|
5
|
+
#ifndef OPENCV_HAL_VSX_UTILS_HPP
|
|
6
|
+
#define OPENCV_HAL_VSX_UTILS_HPP
|
|
7
|
+
|
|
8
|
+
#include "opencv2/core/cvdef.h"
|
|
9
|
+
|
|
10
|
+
#ifndef SKIP_INCLUDES
|
|
11
|
+
#include <assert.h>
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
//! @addtogroup core_utils_vsx
|
|
15
|
+
//! @{
|
|
16
|
+
#if CV_VSX
|
|
17
|
+
|
|
18
|
+
#define __VSX_S16__(c, v) \
|
|
19
|
+
(c) { v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v }
|
|
20
|
+
#define __VSX_S8__(c, v) \
|
|
21
|
+
(c) { v, v, v, v, v, v, v, v }
|
|
22
|
+
#define __VSX_S4__(c, v) \
|
|
23
|
+
(c) { v, v, v, v }
|
|
24
|
+
#define __VSX_S2__(c, v) \
|
|
25
|
+
(c) { v, v }
|
|
26
|
+
|
|
27
|
+
typedef __vector unsigned char vec_uchar16;
|
|
28
|
+
#define vec_uchar16_set(...) \
|
|
29
|
+
(vec_uchar16) { __VA_ARGS__ }
|
|
30
|
+
#define vec_uchar16_sp(c) (__VSX_S16__(vec_uchar16, (unsigned char)c))
|
|
31
|
+
#define vec_uchar16_c(v) ((vec_uchar16)(v))
|
|
32
|
+
#define vec_uchar16_z vec_uchar16_sp(0)
|
|
33
|
+
|
|
34
|
+
typedef __vector signed char vec_char16;
|
|
35
|
+
#define vec_char16_set(...) \
|
|
36
|
+
(vec_char16) { __VA_ARGS__ }
|
|
37
|
+
#define vec_char16_sp(c) (__VSX_S16__(vec_char16, (signed char)c))
|
|
38
|
+
#define vec_char16_c(v) ((vec_char16)(v))
|
|
39
|
+
#define vec_char16_z vec_char16_sp(0)
|
|
40
|
+
|
|
41
|
+
typedef __vector unsigned short vec_ushort8;
|
|
42
|
+
#define vec_ushort8_set(...) \
|
|
43
|
+
(vec_ushort8) { __VA_ARGS__ }
|
|
44
|
+
#define vec_ushort8_sp(c) (__VSX_S8__(vec_ushort8, (unsigned short)c))
|
|
45
|
+
#define vec_ushort8_c(v) ((vec_ushort8)(v))
|
|
46
|
+
#define vec_ushort8_z vec_ushort8_sp(0)
|
|
47
|
+
|
|
48
|
+
typedef __vector signed short vec_short8;
|
|
49
|
+
#define vec_short8_set(...) \
|
|
50
|
+
(vec_short8) { __VA_ARGS__ }
|
|
51
|
+
#define vec_short8_sp(c) (__VSX_S8__(vec_short8, (signed short)c))
|
|
52
|
+
#define vec_short8_c(v) ((vec_short8)(v))
|
|
53
|
+
#define vec_short8_z vec_short8_sp(0)
|
|
54
|
+
|
|
55
|
+
typedef __vector unsigned int vec_uint4;
|
|
56
|
+
#define vec_uint4_set(...) \
|
|
57
|
+
(vec_uint4) { __VA_ARGS__ }
|
|
58
|
+
#define vec_uint4_sp(c) (__VSX_S4__(vec_uint4, (unsigned int)c))
|
|
59
|
+
#define vec_uint4_c(v) ((vec_uint4)(v))
|
|
60
|
+
#define vec_uint4_z vec_uint4_sp(0)
|
|
61
|
+
|
|
62
|
+
typedef __vector signed int vec_int4;
|
|
63
|
+
#define vec_int4_set(...) \
|
|
64
|
+
(vec_int4) { __VA_ARGS__ }
|
|
65
|
+
#define vec_int4_sp(c) (__VSX_S4__(vec_int4, (signed int)c))
|
|
66
|
+
#define vec_int4_c(v) ((vec_int4)(v))
|
|
67
|
+
#define vec_int4_z vec_int4_sp(0)
|
|
68
|
+
|
|
69
|
+
typedef __vector float vec_float4;
|
|
70
|
+
#define vec_float4_set(...) \
|
|
71
|
+
(vec_float4) { __VA_ARGS__ }
|
|
72
|
+
#define vec_float4_sp(c) (__VSX_S4__(vec_float4, c))
|
|
73
|
+
#define vec_float4_c(v) ((vec_float4)(v))
|
|
74
|
+
#define vec_float4_z vec_float4_sp(0)
|
|
75
|
+
|
|
76
|
+
typedef __vector unsigned long long vec_udword2;
|
|
77
|
+
#define vec_udword2_set(...) \
|
|
78
|
+
(vec_udword2) { __VA_ARGS__ }
|
|
79
|
+
#define vec_udword2_sp(c) (__VSX_S2__(vec_udword2, (unsigned long long)c))
|
|
80
|
+
#define vec_udword2_c(v) ((vec_udword2)(v))
|
|
81
|
+
#define vec_udword2_z vec_udword2_sp(0)
|
|
82
|
+
|
|
83
|
+
typedef __vector signed long long vec_dword2;
|
|
84
|
+
#define vec_dword2_set(...) \
|
|
85
|
+
(vec_dword2) { __VA_ARGS__ }
|
|
86
|
+
#define vec_dword2_sp(c) (__VSX_S2__(vec_dword2, (signed long long)c))
|
|
87
|
+
#define vec_dword2_c(v) ((vec_dword2)(v))
|
|
88
|
+
#define vec_dword2_z vec_dword2_sp(0)
|
|
89
|
+
|
|
90
|
+
typedef __vector double vec_double2;
|
|
91
|
+
#define vec_double2_set(...) \
|
|
92
|
+
(vec_double2) { __VA_ARGS__ }
|
|
93
|
+
#define vec_double2_c(v) ((vec_double2)(v))
|
|
94
|
+
#define vec_double2_sp(c) (__VSX_S2__(vec_double2, c))
|
|
95
|
+
#define vec_double2_z vec_double2_sp(0)
|
|
96
|
+
|
|
97
|
+
#define vec_bchar16 __vector __bool char
|
|
98
|
+
#define vec_bchar16_set(...) \
|
|
99
|
+
(vec_bchar16) { __VA_ARGS__ }
|
|
100
|
+
#define vec_bchar16_c(v) ((vec_bchar16)(v))
|
|
101
|
+
|
|
102
|
+
#define vec_bshort8 __vector __bool short
|
|
103
|
+
#define vec_bshort8_set(...) \
|
|
104
|
+
(vec_bshort8) { __VA_ARGS__ }
|
|
105
|
+
#define vec_bshort8_c(v) ((vec_bshort8)(v))
|
|
106
|
+
|
|
107
|
+
#define vec_bint4 __vector __bool int
|
|
108
|
+
#define vec_bint4_set(...) \
|
|
109
|
+
(vec_bint4) { __VA_ARGS__ }
|
|
110
|
+
#define vec_bint4_c(v) ((vec_bint4)(v))
|
|
111
|
+
|
|
112
|
+
#define vec_bdword2 __vector __bool long long
|
|
113
|
+
#define vec_bdword2_set(...) \
|
|
114
|
+
(vec_bdword2) { __VA_ARGS__ }
|
|
115
|
+
#define vec_bdword2_c(v) ((vec_bdword2)(v))
|
|
116
|
+
|
|
117
|
+
#define VSX_FINLINE(tp) extern inline tp __attribute__((always_inline))
|
|
118
|
+
|
|
119
|
+
#define VSX_REDIRECT_1RG(rt, rg, fnm, fn2) \
|
|
120
|
+
VSX_FINLINE(rt) fnm(const rg &a) { return fn2(a); }
|
|
121
|
+
|
|
122
|
+
#define VSX_REDIRECT_2RG(rt, rg, fnm, fn2) \
|
|
123
|
+
VSX_FINLINE(rt) fnm(const rg &a, const rg &b) { return fn2(a, b); }
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* GCC VSX compatibility
|
|
127
|
+
**/
|
|
128
|
+
#if defined(__GNUG__) && !defined(__clang__)
|
|
129
|
+
|
|
130
|
+
// inline asm helper
|
|
131
|
+
#define VSX_IMPL_1RG(rt, rg, opc, fnm) \
|
|
132
|
+
VSX_FINLINE(rt) fnm(const rg &a) { \
|
|
133
|
+
rt rs; \
|
|
134
|
+
__asm__ __volatile__(#opc " %x0,%x1" : "=wa"(rs) : "wa"(a)); \
|
|
135
|
+
return rs; \
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
#define VSX_IMPL_1VRG(rt, rg, opc, fnm) \
|
|
139
|
+
VSX_FINLINE(rt) fnm(const rg &a) { \
|
|
140
|
+
rt rs; \
|
|
141
|
+
__asm__ __volatile__(#opc " %0,%1" : "=v"(rs) : "v"(a)); \
|
|
142
|
+
return rs; \
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
#define VSX_IMPL_2VRG_F(rt, rg, fopc, fnm) \
|
|
146
|
+
VSX_FINLINE(rt) fnm(const rg &a, const rg &b) { \
|
|
147
|
+
rt rs; \
|
|
148
|
+
__asm__ __volatile__(fopc : "=v"(rs) : "v"(a), "v"(b)); \
|
|
149
|
+
return rs; \
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
#define VSX_IMPL_2VRG(rt, rg, opc, fnm) \
|
|
153
|
+
VSX_IMPL_2VRG_F(rt, rg, #opc " %0,%1,%2", fnm)
|
|
154
|
+
|
|
155
|
+
#if __GNUG__ < 8
|
|
156
|
+
|
|
157
|
+
// Support for int4 -> dword2 expanding multiply was added in GCC 8.
|
|
158
|
+
#ifdef vec_mule
|
|
159
|
+
#undef vec_mule
|
|
160
|
+
#endif
|
|
161
|
+
#ifdef vec_mulo
|
|
162
|
+
#undef vec_mulo
|
|
163
|
+
#endif
|
|
164
|
+
|
|
165
|
+
VSX_REDIRECT_2RG(vec_ushort8, vec_uchar16, vec_mule, __builtin_vec_mule)
|
|
166
|
+
VSX_REDIRECT_2RG(vec_short8, vec_char16, vec_mule, __builtin_vec_mule)
|
|
167
|
+
VSX_REDIRECT_2RG(vec_int4, vec_short8, vec_mule, __builtin_vec_mule)
|
|
168
|
+
VSX_REDIRECT_2RG(vec_uint4, vec_ushort8, vec_mule, __builtin_vec_mule)
|
|
169
|
+
VSX_REDIRECT_2RG(vec_ushort8, vec_uchar16, vec_mulo, __builtin_vec_mulo)
|
|
170
|
+
VSX_REDIRECT_2RG(vec_short8, vec_char16, vec_mulo, __builtin_vec_mulo)
|
|
171
|
+
VSX_REDIRECT_2RG(vec_int4, vec_short8, vec_mulo, __builtin_vec_mulo)
|
|
172
|
+
VSX_REDIRECT_2RG(vec_uint4, vec_ushort8, vec_mulo, __builtin_vec_mulo)
|
|
173
|
+
|
|
174
|
+
// dword2 support arrived in ISA 2.07 and GCC 8+
|
|
175
|
+
VSX_IMPL_2VRG(vec_dword2, vec_int4, vmulosw, vec_mule)
|
|
176
|
+
VSX_IMPL_2VRG(vec_udword2, vec_uint4, vmulouw, vec_mule)
|
|
177
|
+
VSX_IMPL_2VRG(vec_dword2, vec_int4, vmulesw, vec_mulo)
|
|
178
|
+
VSX_IMPL_2VRG(vec_udword2, vec_uint4, vmuleuw, vec_mulo)
|
|
179
|
+
|
|
180
|
+
#endif
|
|
181
|
+
|
|
182
|
+
#if __GNUG__ < 7
|
|
183
|
+
// up to GCC 6 vec_mul only supports precisions and llong
|
|
184
|
+
#ifdef vec_mul
|
|
185
|
+
#undef vec_mul
|
|
186
|
+
#endif
|
|
187
|
+
/*
|
|
188
|
+
* there's no a direct instruction for supporting 8-bit, 16-bit multiplication
|
|
189
|
+
*in ISA 2.07, XLC Implement it by using instruction "multiply even", "multiply
|
|
190
|
+
*odd" and "permute"
|
|
191
|
+
**/
|
|
192
|
+
#define VSX_IMPL_MULH(Tvec, cperm) \
|
|
193
|
+
VSX_FINLINE(Tvec) vec_mul(const Tvec &a, const Tvec &b) { \
|
|
194
|
+
static const vec_uchar16 ev_od = {cperm}; \
|
|
195
|
+
return vec_perm((Tvec)vec_mule(a, b), (Tvec)vec_mulo(a, b), ev_od); \
|
|
196
|
+
}
|
|
197
|
+
#define VSX_IMPL_MULH_P16 \
|
|
198
|
+
0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30
|
|
199
|
+
VSX_IMPL_MULH(vec_char16, VSX_IMPL_MULH_P16)
|
|
200
|
+
VSX_IMPL_MULH(vec_uchar16, VSX_IMPL_MULH_P16)
|
|
201
|
+
#define VSX_IMPL_MULH_P8 \
|
|
202
|
+
0, 1, 16, 17, 4, 5, 20, 21, 8, 9, 24, 25, 12, 13, 28, 29
|
|
203
|
+
VSX_IMPL_MULH(vec_short8, VSX_IMPL_MULH_P8)
|
|
204
|
+
VSX_IMPL_MULH(vec_ushort8, VSX_IMPL_MULH_P8)
|
|
205
|
+
// vmuluwm can be used for unsigned or signed integers, that's what they said
|
|
206
|
+
VSX_IMPL_2VRG(vec_int4, vec_int4, vmuluwm, vec_mul)
|
|
207
|
+
VSX_IMPL_2VRG(vec_uint4, vec_uint4, vmuluwm, vec_mul)
|
|
208
|
+
// redirect to GCC builtin vec_mul, since it already supports precisions and
|
|
209
|
+
// llong
|
|
210
|
+
VSX_REDIRECT_2RG(vec_float4, vec_float4, vec_mul, __builtin_vec_mul)
|
|
211
|
+
VSX_REDIRECT_2RG(vec_double2, vec_double2, vec_mul, __builtin_vec_mul)
|
|
212
|
+
VSX_REDIRECT_2RG(vec_dword2, vec_dword2, vec_mul, __builtin_vec_mul)
|
|
213
|
+
VSX_REDIRECT_2RG(vec_udword2, vec_udword2, vec_mul, __builtin_vec_mul)
|
|
214
|
+
#endif // __GNUG__ < 7
|
|
215
|
+
|
|
216
|
+
#if __GNUG__ < 6
|
|
217
|
+
/*
|
|
218
|
+
* Instruction "compare greater than or equal" in ISA 2.07 only supports single
|
|
219
|
+
* and double precision.
|
|
220
|
+
* In XLC and new versions of GCC implement integers by using instruction
|
|
221
|
+
*"greater than" and NOR.
|
|
222
|
+
**/
|
|
223
|
+
#ifdef vec_cmpge
|
|
224
|
+
#undef vec_cmpge
|
|
225
|
+
#endif
|
|
226
|
+
#ifdef vec_cmple
|
|
227
|
+
#undef vec_cmple
|
|
228
|
+
#endif
|
|
229
|
+
#define vec_cmple(a, b) vec_cmpge(b, a)
|
|
230
|
+
#define VSX_IMPL_CMPGE(rt, rg, opc, fnm) \
|
|
231
|
+
VSX_IMPL_2VRG_F(rt, rg, #opc " %0,%2,%1\n\t xxlnor %x0,%x0,%x0", fnm)
|
|
232
|
+
|
|
233
|
+
VSX_IMPL_CMPGE(vec_bchar16, vec_char16, vcmpgtsb, vec_cmpge)
|
|
234
|
+
VSX_IMPL_CMPGE(vec_bchar16, vec_uchar16, vcmpgtub, vec_cmpge)
|
|
235
|
+
VSX_IMPL_CMPGE(vec_bshort8, vec_short8, vcmpgtsh, vec_cmpge)
|
|
236
|
+
VSX_IMPL_CMPGE(vec_bshort8, vec_ushort8, vcmpgtuh, vec_cmpge)
|
|
237
|
+
VSX_IMPL_CMPGE(vec_bint4, vec_int4, vcmpgtsw, vec_cmpge)
|
|
238
|
+
VSX_IMPL_CMPGE(vec_bint4, vec_uint4, vcmpgtuw, vec_cmpge)
|
|
239
|
+
VSX_IMPL_CMPGE(vec_bdword2, vec_dword2, vcmpgtsd, vec_cmpge)
|
|
240
|
+
VSX_IMPL_CMPGE(vec_bdword2, vec_udword2, vcmpgtud, vec_cmpge)
|
|
241
|
+
|
|
242
|
+
// redirect to GCC builtin cmpge, since it already supports precisions
|
|
243
|
+
VSX_REDIRECT_2RG(vec_bint4, vec_float4, vec_cmpge, __builtin_vec_cmpge)
|
|
244
|
+
VSX_REDIRECT_2RG(vec_bdword2, vec_double2, vec_cmpge, __builtin_vec_cmpge)
|
|
245
|
+
|
|
246
|
+
// up to gcc5 vec_nor doesn't support bool long long
|
|
247
|
+
#undef vec_nor
|
|
248
|
+
template <typename T>
|
|
249
|
+
VSX_REDIRECT_2RG(T, T, vec_nor, __builtin_vec_nor)
|
|
250
|
+
|
|
251
|
+
VSX_FINLINE(vec_bdword2) vec_nor(const vec_bdword2 &a, const vec_bdword2 &b) {
|
|
252
|
+
return vec_bdword2_c(__builtin_vec_nor(vec_dword2_c(a), vec_dword2_c(b)));
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// vec_packs doesn't support double words in gcc4 and old versions of gcc5
|
|
256
|
+
#undef vec_packs
|
|
257
|
+
VSX_REDIRECT_2RG(vec_char16, vec_short8, vec_packs, __builtin_vec_packs)
|
|
258
|
+
VSX_REDIRECT_2RG(vec_uchar16, vec_ushort8, vec_packs, __builtin_vec_packs)
|
|
259
|
+
VSX_REDIRECT_2RG(vec_short8, vec_int4, vec_packs, __builtin_vec_packs)
|
|
260
|
+
VSX_REDIRECT_2RG(vec_ushort8, vec_uint4, vec_packs, __builtin_vec_packs)
|
|
261
|
+
|
|
262
|
+
VSX_IMPL_2VRG_F(vec_int4, vec_dword2, "vpksdss %0,%2,%1", vec_packs)
|
|
263
|
+
VSX_IMPL_2VRG_F(vec_uint4, vec_udword2, "vpkudus %0,%2,%1", vec_packs)
|
|
264
|
+
#endif // __GNUG__ < 6
|
|
265
|
+
|
|
266
|
+
#if __GNUG__ < 5
|
|
267
|
+
// vec_xxpermdi in gcc4 missing little-endian supports just like clang
|
|
268
|
+
#define vec_permi(a, b, c) vec_xxpermdi(b, a, (3 ^ (((c) & 1) << 1 | (c) >> 1)))
|
|
269
|
+
// same as vec_xxpermdi
|
|
270
|
+
#undef vec_vbpermq
|
|
271
|
+
VSX_IMPL_2VRG(vec_udword2, vec_uchar16, vbpermq, vec_vbpermq)
|
|
272
|
+
VSX_IMPL_2VRG(vec_dword2, vec_char16, vbpermq, vec_vbpermq)
|
|
273
|
+
#else
|
|
274
|
+
#define vec_permi vec_xxpermdi
|
|
275
|
+
#endif // __GNUG__ < 5
|
|
276
|
+
|
|
277
|
+
// shift left double by word immediate
|
|
278
|
+
#ifndef vec_sldw
|
|
279
|
+
#define vec_sldw __builtin_vsx_xxsldwi
|
|
280
|
+
#endif
|
|
281
|
+
|
|
282
|
+
// vector population count
|
|
283
|
+
VSX_IMPL_1VRG(vec_uchar16, vec_uchar16, vpopcntb, vec_popcntu)
|
|
284
|
+
VSX_IMPL_1VRG(vec_uchar16, vec_char16, vpopcntb, vec_popcntu)
|
|
285
|
+
VSX_IMPL_1VRG(vec_ushort8, vec_ushort8, vpopcnth, vec_popcntu)
|
|
286
|
+
VSX_IMPL_1VRG(vec_ushort8, vec_short8, vpopcnth, vec_popcntu)
|
|
287
|
+
VSX_IMPL_1VRG(vec_uint4, vec_uint4, vpopcntw, vec_popcntu)
|
|
288
|
+
VSX_IMPL_1VRG(vec_uint4, vec_int4, vpopcntw, vec_popcntu)
|
|
289
|
+
VSX_IMPL_1VRG(vec_udword2, vec_udword2, vpopcntd, vec_popcntu)
|
|
290
|
+
VSX_IMPL_1VRG(vec_udword2, vec_dword2, vpopcntd, vec_popcntu)
|
|
291
|
+
|
|
292
|
+
// converts between single and double-precision
|
|
293
|
+
VSX_REDIRECT_1RG(vec_float4, vec_double2, vec_cvfo, __builtin_vsx_xvcvdpsp)
|
|
294
|
+
VSX_REDIRECT_1RG(vec_double2, vec_float4, vec_cvfo, __builtin_vsx_xvcvspdp)
|
|
295
|
+
|
|
296
|
+
// converts word and doubleword to double-precision
|
|
297
|
+
#undef vec_ctd
|
|
298
|
+
VSX_IMPL_1RG(vec_double2, vec_int4, xvcvsxwdp, vec_ctdo)
|
|
299
|
+
VSX_IMPL_1RG(vec_double2, vec_uint4, xvcvuxwdp, vec_ctdo)
|
|
300
|
+
VSX_IMPL_1RG(vec_double2, vec_dword2, xvcvsxddp, vec_ctd)
|
|
301
|
+
VSX_IMPL_1RG(vec_double2, vec_udword2, xvcvuxddp, vec_ctd)
|
|
302
|
+
|
|
303
|
+
// converts word and doubleword to single-precision
|
|
304
|
+
#undef vec_ctf
|
|
305
|
+
VSX_IMPL_1RG(vec_float4, vec_int4, xvcvsxwsp, vec_ctf)
|
|
306
|
+
VSX_IMPL_1RG(vec_float4, vec_uint4, xvcvuxwsp, vec_ctf)
|
|
307
|
+
VSX_IMPL_1RG(vec_float4, vec_dword2, xvcvsxdsp, vec_ctfo)
|
|
308
|
+
VSX_IMPL_1RG(vec_float4, vec_udword2, xvcvuxdsp, vec_ctfo)
|
|
309
|
+
|
|
310
|
+
// converts single and double precision to signed word
|
|
311
|
+
#undef vec_cts
|
|
312
|
+
VSX_IMPL_1RG(vec_int4, vec_double2, xvcvdpsxws, vec_ctso)
|
|
313
|
+
VSX_IMPL_1RG(vec_int4, vec_float4, xvcvspsxws, vec_cts)
|
|
314
|
+
|
|
315
|
+
// converts single and double precision to unsigned word
|
|
316
|
+
#undef vec_ctu
|
|
317
|
+
VSX_IMPL_1RG(vec_uint4, vec_double2, xvcvdpuxws, vec_ctuo)
|
|
318
|
+
VSX_IMPL_1RG(vec_uint4, vec_float4, xvcvspuxws, vec_ctu)
|
|
319
|
+
|
|
320
|
+
// converts single and double precision to signed doubleword
|
|
321
|
+
#undef vec_ctsl
|
|
322
|
+
VSX_IMPL_1RG(vec_dword2, vec_double2, xvcvdpsxds, vec_ctsl)
|
|
323
|
+
VSX_IMPL_1RG(vec_dword2, vec_float4, xvcvspsxds, vec_ctslo)
|
|
324
|
+
|
|
325
|
+
// converts single and double precision to unsigned doubleword
|
|
326
|
+
#undef vec_ctul
|
|
327
|
+
VSX_IMPL_1RG(vec_udword2, vec_double2, xvcvdpuxds, vec_ctul)
|
|
328
|
+
VSX_IMPL_1RG(vec_udword2, vec_float4, xvcvspuxds, vec_ctulo)
|
|
329
|
+
|
|
330
|
+
// just in case if GCC doesn't define it
|
|
331
|
+
#ifndef vec_xl
|
|
332
|
+
#define vec_xl vec_vsx_ld
|
|
333
|
+
#define vec_xst vec_vsx_st
|
|
334
|
+
#endif
|
|
335
|
+
|
|
336
|
+
#endif // GCC VSX compatibility
|
|
337
|
+
|
|
338
|
+
/*
|
|
339
|
+
* CLANG VSX compatibility
|
|
340
|
+
**/
|
|
341
|
+
#if defined(__clang__) && !defined(__IBMCPP__)
|
|
342
|
+
|
|
343
|
+
/*
|
|
344
|
+
* CLANG doesn't support %x<n> in the inline asm template which fixes register
|
|
345
|
+
* number when using any of the register constraints wa, wd, wf
|
|
346
|
+
*
|
|
347
|
+
* For more explanation checkout PowerPC and IBM RS6000 in
|
|
348
|
+
* https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html Also there's
|
|
349
|
+
* already an open bug https://bugs.llvm.org/show_bug.cgi?id=31837
|
|
350
|
+
*
|
|
351
|
+
* So we're not able to use inline asm and only use built-in functions that
|
|
352
|
+
* CLANG supports and use __builtin_convertvector if clang missing any of vector
|
|
353
|
+
* conversions built-in functions
|
|
354
|
+
*
|
|
355
|
+
* todo: clang asm template bug is fixed, need to reconsider the current
|
|
356
|
+
* workarounds.
|
|
357
|
+
*/
|
|
358
|
+
|
|
359
|
+
// convert vector helper
|
|
360
|
+
#define VSX_IMPL_CONVERT(rt, rg, fnm) \
|
|
361
|
+
VSX_FINLINE(rt) fnm(const rg &a) { return __builtin_convertvector(a, rt); }
|
|
362
|
+
|
|
363
|
+
#ifndef vec_permi
|
|
364
|
+
#if __clang_major__ < 5
|
|
365
|
+
// implement vec_permi in a dirty way
|
|
366
|
+
#define VSX_IMPL_CLANG_4_PERMI(Tvec) \
|
|
367
|
+
VSX_FINLINE(Tvec) \
|
|
368
|
+
vec_permi(const Tvec &a, const Tvec &b, unsigned const char c) { \
|
|
369
|
+
switch (c) { \
|
|
370
|
+
case 0: \
|
|
371
|
+
return vec_mergeh(a, b); \
|
|
372
|
+
case 1: \
|
|
373
|
+
return vec_mergel(vec_mergeh(a, a), b); \
|
|
374
|
+
case 2: \
|
|
375
|
+
return vec_mergeh(vec_mergel(a, a), b); \
|
|
376
|
+
default: \
|
|
377
|
+
return vec_mergel(a, b); \
|
|
378
|
+
} \
|
|
379
|
+
}
|
|
380
|
+
VSX_IMPL_CLANG_4_PERMI(vec_udword2)
|
|
381
|
+
VSX_IMPL_CLANG_4_PERMI(vec_dword2)
|
|
382
|
+
VSX_IMPL_CLANG_4_PERMI(vec_double2)
|
|
383
|
+
|
|
384
|
+
// vec_xxsldwi is missing in clang 4
|
|
385
|
+
#define vec_xxsldwi(a, b, c) vec_sld(a, b, (c) * 4)
|
|
386
|
+
#else
|
|
387
|
+
// vec_xxpermdi is missing little-endian supports in clang 4 just like gcc4
|
|
388
|
+
#define vec_permi(a, b, c) vec_xxpermdi(b, a, (3 ^ (((c) & 1) << 1 | (c) >> 1)))
|
|
389
|
+
#endif // __clang_major__ < 5
|
|
390
|
+
#endif
|
|
391
|
+
|
|
392
|
+
// shift left double by word immediate
|
|
393
|
+
#ifndef vec_sldw
|
|
394
|
+
#define vec_sldw vec_xxsldwi
|
|
395
|
+
#endif
|
|
396
|
+
|
|
397
|
+
#if __clang_major__ < 13
|
|
398
|
+
// Implement vec_rsqrt since clang only supports vec_rsqrte
|
|
399
|
+
#ifndef vec_rsqrt
|
|
400
|
+
VSX_FINLINE(vec_float4) vec_rsqrt(const vec_float4 &a) {
|
|
401
|
+
return vec_div(vec_float4_sp(1), vec_sqrt(a));
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
VSX_FINLINE(vec_double2) vec_rsqrt(const vec_double2 &a) {
|
|
405
|
+
return vec_div(vec_double2_sp(1), vec_sqrt(a));
|
|
406
|
+
}
|
|
407
|
+
#endif
|
|
408
|
+
|
|
409
|
+
// vec_promote missing support for doubleword
|
|
410
|
+
VSX_FINLINE(vec_dword2) vec_promote(long long a, int b) {
|
|
411
|
+
vec_dword2 ret = vec_dword2_z;
|
|
412
|
+
ret[b & 1] = a;
|
|
413
|
+
return ret;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
VSX_FINLINE(vec_udword2) vec_promote(unsigned long long a, int b) {
|
|
417
|
+
vec_udword2 ret = vec_udword2_z;
|
|
418
|
+
ret[b & 1] = a;
|
|
419
|
+
return ret;
|
|
420
|
+
}
|
|
421
|
+
#endif
|
|
422
|
+
|
|
423
|
+
// vec_popcnt should return unsigned but clang has different thought just like
|
|
424
|
+
// gcc in vec_vpopcnt
|
|
425
|
+
#define VSX_IMPL_POPCNTU(Tvec, Tvec2, ucast) \
|
|
426
|
+
VSX_FINLINE(Tvec) vec_popcntu(const Tvec2 &a) { return ucast(vec_popcnt(a)); }
|
|
427
|
+
VSX_IMPL_POPCNTU(vec_uchar16, vec_char16, vec_uchar16_c);
|
|
428
|
+
VSX_IMPL_POPCNTU(vec_ushort8, vec_short8, vec_ushort8_c);
|
|
429
|
+
VSX_IMPL_POPCNTU(vec_uint4, vec_int4, vec_uint4_c);
|
|
430
|
+
VSX_IMPL_POPCNTU(vec_udword2, vec_dword2, vec_udword2_c);
|
|
431
|
+
// redirect unsigned types
|
|
432
|
+
VSX_REDIRECT_1RG(vec_uchar16, vec_uchar16, vec_popcntu, vec_popcnt)
|
|
433
|
+
VSX_REDIRECT_1RG(vec_ushort8, vec_ushort8, vec_popcntu, vec_popcnt)
|
|
434
|
+
VSX_REDIRECT_1RG(vec_uint4, vec_uint4, vec_popcntu, vec_popcnt)
|
|
435
|
+
VSX_REDIRECT_1RG(vec_udword2, vec_udword2, vec_popcntu, vec_popcnt)
|
|
436
|
+
|
|
437
|
+
// converts between single and double precision
|
|
438
|
+
VSX_REDIRECT_1RG(vec_float4, vec_double2, vec_cvfo, __builtin_vsx_xvcvdpsp)
|
|
439
|
+
VSX_REDIRECT_1RG(vec_double2, vec_float4, vec_cvfo, __builtin_vsx_xvcvspdp)
|
|
440
|
+
|
|
441
|
+
// converts word and doubleword to double-precision
|
|
442
|
+
#ifdef vec_ctd
|
|
443
|
+
#undef vec_ctd
|
|
444
|
+
#endif
|
|
445
|
+
VSX_REDIRECT_1RG(vec_double2, vec_int4, vec_ctdo, __builtin_vsx_xvcvsxwdp)
|
|
446
|
+
VSX_REDIRECT_1RG(vec_double2, vec_uint4, vec_ctdo, __builtin_vsx_xvcvuxwdp)
|
|
447
|
+
|
|
448
|
+
VSX_IMPL_CONVERT(vec_double2, vec_dword2, vec_ctd)
|
|
449
|
+
VSX_IMPL_CONVERT(vec_double2, vec_udword2, vec_ctd)
|
|
450
|
+
|
|
451
|
+
// converts word and doubleword to single-precision
|
|
452
|
+
#if __clang_major__ > 4
|
|
453
|
+
#undef vec_ctf
|
|
454
|
+
#endif
|
|
455
|
+
VSX_IMPL_CONVERT(vec_float4, vec_int4, vec_ctf)
|
|
456
|
+
VSX_IMPL_CONVERT(vec_float4, vec_uint4, vec_ctf)
|
|
457
|
+
VSX_REDIRECT_1RG(vec_float4, vec_dword2, vec_ctfo, __builtin_vsx_xvcvsxdsp)
|
|
458
|
+
VSX_REDIRECT_1RG(vec_float4, vec_udword2, vec_ctfo, __builtin_vsx_xvcvuxdsp)
|
|
459
|
+
|
|
460
|
+
// converts single and double precision to signed word
|
|
461
|
+
#if __clang_major__ > 4
|
|
462
|
+
#undef vec_cts
|
|
463
|
+
#endif
|
|
464
|
+
VSX_REDIRECT_1RG(vec_int4, vec_double2, vec_ctso, __builtin_vsx_xvcvdpsxws)
|
|
465
|
+
VSX_IMPL_CONVERT(vec_int4, vec_float4, vec_cts)
|
|
466
|
+
|
|
467
|
+
// converts single and double precision to unsigned word
|
|
468
|
+
#if __clang_major__ > 4
|
|
469
|
+
#undef vec_ctu
|
|
470
|
+
#endif
|
|
471
|
+
VSX_REDIRECT_1RG(vec_uint4, vec_double2, vec_ctuo, __builtin_vsx_xvcvdpuxws)
|
|
472
|
+
VSX_IMPL_CONVERT(vec_uint4, vec_float4, vec_ctu)
|
|
473
|
+
|
|
474
|
+
// converts single and double precision to signed doubleword
|
|
475
|
+
#ifdef vec_ctsl
|
|
476
|
+
#undef vec_ctsl
|
|
477
|
+
#endif
|
|
478
|
+
VSX_IMPL_CONVERT(vec_dword2, vec_double2, vec_ctsl)
|
|
479
|
+
// __builtin_convertvector unable to convert, xvcvspsxds is missing on it
|
|
480
|
+
VSX_FINLINE(vec_dword2) vec_ctslo(const vec_float4 &a) {
|
|
481
|
+
return vec_ctsl(vec_cvfo(a));
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// converts single and double precision to unsigned doubleword
|
|
485
|
+
#ifdef vec_ctul
|
|
486
|
+
#undef vec_ctul
|
|
487
|
+
#endif
|
|
488
|
+
VSX_IMPL_CONVERT(vec_udword2, vec_double2, vec_ctul)
|
|
489
|
+
// __builtin_convertvector unable to convert, xvcvspuxds is missing on it
|
|
490
|
+
VSX_FINLINE(vec_udword2) vec_ctulo(const vec_float4 &a) {
|
|
491
|
+
return vec_ctul(vec_cvfo(a));
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
#endif // CLANG VSX compatibility
|
|
495
|
+
|
|
496
|
+
/*
|
|
497
|
+
* Common GCC, CLANG compatibility
|
|
498
|
+
**/
|
|
499
|
+
#if defined(__GNUG__) && !defined(__IBMCPP__)
|
|
500
|
+
|
|
501
|
+
#ifdef vec_cvf
|
|
502
|
+
#undef vec_cvf
|
|
503
|
+
#endif
|
|
504
|
+
|
|
505
|
+
#define VSX_IMPL_CONV_EVEN_4_2(rt, rg, fnm, fn2) \
|
|
506
|
+
VSX_FINLINE(rt) fnm(const rg &a) { return fn2(vec_sldw(a, a, 1)); }
|
|
507
|
+
|
|
508
|
+
VSX_IMPL_CONV_EVEN_4_2(vec_double2, vec_float4, vec_cvf, vec_cvfo)
|
|
509
|
+
VSX_IMPL_CONV_EVEN_4_2(vec_double2, vec_int4, vec_ctd, vec_ctdo)
|
|
510
|
+
VSX_IMPL_CONV_EVEN_4_2(vec_double2, vec_uint4, vec_ctd, vec_ctdo)
|
|
511
|
+
|
|
512
|
+
VSX_IMPL_CONV_EVEN_4_2(vec_dword2, vec_float4, vec_ctsl, vec_ctslo)
|
|
513
|
+
VSX_IMPL_CONV_EVEN_4_2(vec_udword2, vec_float4, vec_ctul, vec_ctulo)
|
|
514
|
+
|
|
515
|
+
#define VSX_IMPL_CONV_EVEN_2_4(rt, rg, fnm, fn2) \
|
|
516
|
+
VSX_FINLINE(rt) fnm(const rg &a) { \
|
|
517
|
+
rt v4 = fn2(a); \
|
|
518
|
+
return vec_sldw(v4, v4, 3); \
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
VSX_IMPL_CONV_EVEN_2_4(vec_float4, vec_double2, vec_cvf, vec_cvfo)
|
|
522
|
+
VSX_IMPL_CONV_EVEN_2_4(vec_float4, vec_dword2, vec_ctf, vec_ctfo)
|
|
523
|
+
VSX_IMPL_CONV_EVEN_2_4(vec_float4, vec_udword2, vec_ctf, vec_ctfo)
|
|
524
|
+
|
|
525
|
+
VSX_IMPL_CONV_EVEN_2_4(vec_int4, vec_double2, vec_cts, vec_ctso)
|
|
526
|
+
VSX_IMPL_CONV_EVEN_2_4(vec_uint4, vec_double2, vec_ctu, vec_ctuo)
|
|
527
|
+
|
|
528
|
+
// Only for Eigen!
|
|
529
|
+
/*
|
|
530
|
+
* changing behavior of conversion intrinsics for gcc has effect on Eigen
|
|
531
|
+
* so we redefine old behavior again only on gcc, clang
|
|
532
|
+
*/
|
|
533
|
+
#if !defined(__clang__) || __clang_major__ > 4
|
|
534
|
+
// ignoring second arg since Eigen only truncates toward zero
|
|
535
|
+
#define VSX_IMPL_CONV_2VARIANT(rt, rg, fnm, fn2) \
|
|
536
|
+
VSX_FINLINE(rt) fnm(const rg &a, int only_truncate) { \
|
|
537
|
+
assert(only_truncate == 0); \
|
|
538
|
+
CV_UNUSED(only_truncate); \
|
|
539
|
+
return fn2(a); \
|
|
540
|
+
}
|
|
541
|
+
VSX_IMPL_CONV_2VARIANT(vec_int4, vec_float4, vec_cts, vec_cts)
|
|
542
|
+
VSX_IMPL_CONV_2VARIANT(vec_uint4, vec_float4, vec_ctu, vec_ctu)
|
|
543
|
+
VSX_IMPL_CONV_2VARIANT(vec_float4, vec_int4, vec_ctf, vec_ctf)
|
|
544
|
+
VSX_IMPL_CONV_2VARIANT(vec_float4, vec_uint4, vec_ctf, vec_ctf)
|
|
545
|
+
// define vec_cts for converting double precision to signed doubleword
|
|
546
|
+
// which isn't compatible with xlc but its okay since Eigen only uses it for gcc
|
|
547
|
+
VSX_IMPL_CONV_2VARIANT(vec_dword2, vec_double2, vec_cts, vec_ctsl)
|
|
548
|
+
#endif // Eigen
|
|
549
|
+
|
|
550
|
+
#endif // Common GCC, CLANG compatibility
|
|
551
|
+
|
|
552
|
+
/*
|
|
553
|
+
* XLC VSX compatibility
|
|
554
|
+
**/
|
|
555
|
+
#if defined(__IBMCPP__)
|
|
556
|
+
|
|
557
|
+
// vector population count
|
|
558
|
+
#define vec_popcntu vec_popcnt
|
|
559
|
+
|
|
560
|
+
// overload and redirect with setting second arg to zero
|
|
561
|
+
// since we only support conversions without the second arg
|
|
562
|
+
#define VSX_IMPL_OVERLOAD_Z2(rt, rg, fnm) \
|
|
563
|
+
VSX_FINLINE(rt) fnm(const rg &a) { return fnm(a, 0); }
|
|
564
|
+
|
|
565
|
+
VSX_IMPL_OVERLOAD_Z2(vec_double2, vec_int4, vec_ctd)
|
|
566
|
+
VSX_IMPL_OVERLOAD_Z2(vec_double2, vec_uint4, vec_ctd)
|
|
567
|
+
VSX_IMPL_OVERLOAD_Z2(vec_double2, vec_dword2, vec_ctd)
|
|
568
|
+
VSX_IMPL_OVERLOAD_Z2(vec_double2, vec_udword2, vec_ctd)
|
|
569
|
+
|
|
570
|
+
VSX_IMPL_OVERLOAD_Z2(vec_float4, vec_int4, vec_ctf)
|
|
571
|
+
VSX_IMPL_OVERLOAD_Z2(vec_float4, vec_uint4, vec_ctf)
|
|
572
|
+
VSX_IMPL_OVERLOAD_Z2(vec_float4, vec_dword2, vec_ctf)
|
|
573
|
+
VSX_IMPL_OVERLOAD_Z2(vec_float4, vec_udword2, vec_ctf)
|
|
574
|
+
|
|
575
|
+
VSX_IMPL_OVERLOAD_Z2(vec_int4, vec_double2, vec_cts)
|
|
576
|
+
VSX_IMPL_OVERLOAD_Z2(vec_int4, vec_float4, vec_cts)
|
|
577
|
+
|
|
578
|
+
VSX_IMPL_OVERLOAD_Z2(vec_uint4, vec_double2, vec_ctu)
|
|
579
|
+
VSX_IMPL_OVERLOAD_Z2(vec_uint4, vec_float4, vec_ctu)
|
|
580
|
+
|
|
581
|
+
VSX_IMPL_OVERLOAD_Z2(vec_dword2, vec_double2, vec_ctsl)
|
|
582
|
+
VSX_IMPL_OVERLOAD_Z2(vec_dword2, vec_float4, vec_ctsl)
|
|
583
|
+
|
|
584
|
+
VSX_IMPL_OVERLOAD_Z2(vec_udword2, vec_double2, vec_ctul)
|
|
585
|
+
VSX_IMPL_OVERLOAD_Z2(vec_udword2, vec_float4, vec_ctul)
|
|
586
|
+
|
|
587
|
+
// fixme: implement conversions of odd-numbered elements in a dirty way
|
|
588
|
+
// since xlc doesn't support VSX registers operand in inline asm.
|
|
589
|
+
#define VSX_IMPL_CONV_ODD_4_2(rt, rg, fnm, fn2) \
|
|
590
|
+
VSX_FINLINE(rt) fnm(const rg &a) { return fn2(vec_sldw(a, a, 3)); }
|
|
591
|
+
|
|
592
|
+
VSX_IMPL_CONV_ODD_4_2(vec_double2, vec_float4, vec_cvfo, vec_cvf)
|
|
593
|
+
VSX_IMPL_CONV_ODD_4_2(vec_double2, vec_int4, vec_ctdo, vec_ctd)
|
|
594
|
+
VSX_IMPL_CONV_ODD_4_2(vec_double2, vec_uint4, vec_ctdo, vec_ctd)
|
|
595
|
+
|
|
596
|
+
VSX_IMPL_CONV_ODD_4_2(vec_dword2, vec_float4, vec_ctslo, vec_ctsl)
|
|
597
|
+
VSX_IMPL_CONV_ODD_4_2(vec_udword2, vec_float4, vec_ctulo, vec_ctul)
|
|
598
|
+
|
|
599
|
+
#define VSX_IMPL_CONV_ODD_2_4(rt, rg, fnm, fn2) \
|
|
600
|
+
VSX_FINLINE(rt) fnm(const rg &a) { \
|
|
601
|
+
rt v4 = fn2(a); \
|
|
602
|
+
return vec_sldw(v4, v4, 1); \
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
VSX_IMPL_CONV_ODD_2_4(vec_float4, vec_double2, vec_cvfo, vec_cvf)
|
|
606
|
+
VSX_IMPL_CONV_ODD_2_4(vec_float4, vec_dword2, vec_ctfo, vec_ctf)
|
|
607
|
+
VSX_IMPL_CONV_ODD_2_4(vec_float4, vec_udword2, vec_ctfo, vec_ctf)
|
|
608
|
+
|
|
609
|
+
VSX_IMPL_CONV_ODD_2_4(vec_int4, vec_double2, vec_ctso, vec_cts)
|
|
610
|
+
VSX_IMPL_CONV_ODD_2_4(vec_uint4, vec_double2, vec_ctuo, vec_ctu)
|
|
611
|
+
|
|
612
|
+
#endif // XLC VSX compatibility
|
|
613
|
+
|
|
614
|
+
// ignore GCC warning that caused by -Wunused-but-set-variable in rare cases
|
|
615
|
+
#if defined(__GNUG__) && !defined(__clang__)
|
|
616
|
+
#define VSX_UNUSED(Tvec) Tvec __attribute__((__unused__))
|
|
617
|
+
#else // CLANG, XLC
|
|
618
|
+
#define VSX_UNUSED(Tvec) Tvec
|
|
619
|
+
#endif
|
|
620
|
+
|
|
621
|
+
// gcc can find his way in casting log int and XLC, CLANG ambiguous
|
|
622
|
+
#if defined(__clang__) || defined(__IBMCPP__)
|
|
623
|
+
VSX_FINLINE(vec_udword2) vec_splats(uint64 v) {
|
|
624
|
+
return vec_splats((unsigned long long)v);
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
VSX_FINLINE(vec_dword2) vec_splats(int64 v) { return vec_splats((long long)v); }
|
|
628
|
+
|
|
629
|
+
VSX_FINLINE(vec_udword2) vec_promote(uint64 a, int b) {
|
|
630
|
+
return vec_promote((unsigned long long)a, b);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
VSX_FINLINE(vec_dword2) vec_promote(int64 a, int b) {
|
|
634
|
+
return vec_promote((long long)a, b);
|
|
635
|
+
}
|
|
636
|
+
#endif
|
|
637
|
+
|
|
638
|
+
/*
|
|
639
|
+
* implement vsx_ld(offset, pointer), vsx_st(vector, offset, pointer)
|
|
640
|
+
* load and set using offset depend on the pointer type
|
|
641
|
+
*
|
|
642
|
+
* implement vsx_ldf(offset, pointer), vsx_stf(vector, offset, pointer)
|
|
643
|
+
* load and set using offset depend on fixed bytes size
|
|
644
|
+
*
|
|
645
|
+
* Note: In clang vec_xl and vec_xst fails to load unaligned addresses
|
|
646
|
+
* so we are using vec_vsx_ld, vec_vsx_st instead
|
|
647
|
+
*/
|
|
648
|
+
|
|
649
|
+
#if defined(__clang__) && !defined(__IBMCPP__)
|
|
650
|
+
#define vsx_ldf vec_vsx_ld
|
|
651
|
+
#define vsx_stf vec_vsx_st
|
|
652
|
+
#else // GCC , XLC
|
|
653
|
+
#define vsx_ldf vec_xl
|
|
654
|
+
#define vsx_stf vec_xst
|
|
655
|
+
#endif
|
|
656
|
+
|
|
657
|
+
#define VSX_OFFSET(o, p) ((o) * sizeof(*(p)))
|
|
658
|
+
#define vsx_ld(o, p) vsx_ldf(VSX_OFFSET(o, p), p)
|
|
659
|
+
#define vsx_st(v, o, p) vsx_stf(v, VSX_OFFSET(o, p), p)
|
|
660
|
+
|
|
661
|
+
/*
|
|
662
|
+
* implement vsx_ld2(offset, pointer), vsx_st2(vector, offset, pointer) to load
|
|
663
|
+
* and store double words In GCC vec_xl and vec_xst it maps to vec_vsx_ld,
|
|
664
|
+
* vec_vsx_st which doesn't support long long and in CLANG we are using
|
|
665
|
+
* vec_vsx_ld, vec_vsx_st because vec_xl, vec_xst fails to load unaligned
|
|
666
|
+
* addresses
|
|
667
|
+
*
|
|
668
|
+
* In XLC vec_xl and vec_xst fail to cast int64(long int) to long long
|
|
669
|
+
*/
|
|
670
|
+
#if (defined(__GNUG__) || defined(__clang__)) && !defined(__IBMCPP__)
|
|
671
|
+
VSX_FINLINE(vec_udword2) vsx_ld2(long o, const uint64 *p) {
|
|
672
|
+
return vec_udword2_c(vsx_ldf(VSX_OFFSET(o, p), (unsigned int *)p));
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
VSX_FINLINE(vec_dword2) vsx_ld2(long o, const int64 *p) {
|
|
676
|
+
return vec_dword2_c(vsx_ldf(VSX_OFFSET(o, p), (int *)p));
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
VSX_FINLINE(void) vsx_st2(const vec_udword2 &vec, long o, uint64 *p) {
|
|
680
|
+
vsx_stf(vec_uint4_c(vec), VSX_OFFSET(o, p), (unsigned int *)p);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
VSX_FINLINE(void) vsx_st2(const vec_dword2 &vec, long o, int64 *p) {
|
|
684
|
+
vsx_stf(vec_int4_c(vec), VSX_OFFSET(o, p), (int *)p);
|
|
685
|
+
}
|
|
686
|
+
#else // XLC
|
|
687
|
+
VSX_FINLINE(vec_udword2) vsx_ld2(long o, const uint64 *p) {
|
|
688
|
+
return vsx_ldf(VSX_OFFSET(o, p), (unsigned long long *)p);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
VSX_FINLINE(vec_dword2) vsx_ld2(long o, const int64 *p) {
|
|
692
|
+
return vsx_ldf(VSX_OFFSET(o, p), (long long *)p);
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
VSX_FINLINE(void) vsx_st2(const vec_udword2 &vec, long o, uint64 *p) {
|
|
696
|
+
vsx_stf(vec, VSX_OFFSET(o, p), (unsigned long long *)p);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
VSX_FINLINE(void) vsx_st2(const vec_dword2 &vec, long o, int64 *p) {
|
|
700
|
+
vsx_stf(vec, VSX_OFFSET(o, p), (long long *)p);
|
|
701
|
+
}
|
|
702
|
+
#endif
|
|
703
|
+
|
|
704
|
+
// Store lower 8 byte
|
|
705
|
+
#define vec_st_l8(v, p) *((uint64 *)(p)) = vec_extract(vec_udword2_c(v), 0)
|
|
706
|
+
|
|
707
|
+
// Store higher 8 byte
|
|
708
|
+
#define vec_st_h8(v, p) *((uint64 *)(p)) = vec_extract(vec_udword2_c(v), 1)
|
|
709
|
+
|
|
710
|
+
// Load 64-bits of integer data to lower part
|
|
711
|
+
#define VSX_IMPL_LOAD_L8(Tvec, Tp) \
|
|
712
|
+
VSX_FINLINE(Tvec) vec_ld_l8(const Tp *p) { \
|
|
713
|
+
return ((Tvec)vec_promote(*((uint64 *)p), 0)); \
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
VSX_IMPL_LOAD_L8(vec_uchar16, uchar)
|
|
717
|
+
VSX_IMPL_LOAD_L8(vec_char16, schar)
|
|
718
|
+
VSX_IMPL_LOAD_L8(vec_ushort8, ushort)
|
|
719
|
+
VSX_IMPL_LOAD_L8(vec_short8, short)
|
|
720
|
+
VSX_IMPL_LOAD_L8(vec_uint4, uint)
|
|
721
|
+
VSX_IMPL_LOAD_L8(vec_int4, int)
|
|
722
|
+
VSX_IMPL_LOAD_L8(vec_float4, float)
|
|
723
|
+
VSX_IMPL_LOAD_L8(vec_udword2, uint64)
|
|
724
|
+
VSX_IMPL_LOAD_L8(vec_dword2, int64)
|
|
725
|
+
VSX_IMPL_LOAD_L8(vec_double2, double)
|
|
726
|
+
|
|
727
|
+
// logical not
|
|
728
|
+
#define vec_not(a) vec_nor(a, a)
|
|
729
|
+
|
|
730
|
+
// power9 yaya
|
|
731
|
+
// not equal
|
|
732
|
+
#ifndef vec_cmpne
|
|
733
|
+
#define vec_cmpne(a, b) vec_not(vec_cmpeq(a, b))
|
|
734
|
+
#endif
|
|
735
|
+
|
|
736
|
+
// absolute difference
|
|
737
|
+
#ifndef _ARCH_PWR9
|
|
738
|
+
#undef vec_absd
|
|
739
|
+
#define vec_absd(a, b) vec_sub(vec_max(a, b), vec_min(a, b))
|
|
740
|
+
#endif
|
|
741
|
+
|
|
742
|
+
/*
|
|
743
|
+
* Implement vec_unpacklu and vec_unpackhu
|
|
744
|
+
* since vec_unpackl, vec_unpackh only support signed integers
|
|
745
|
+
**/
|
|
746
|
+
#define VSX_IMPL_UNPACKU(rt, rg, zero) \
|
|
747
|
+
VSX_FINLINE(rt) vec_unpacklu(const rg &a) { \
|
|
748
|
+
return (rt)(vec_mergel(a, zero)); \
|
|
749
|
+
} \
|
|
750
|
+
VSX_FINLINE(rt) vec_unpackhu(const rg &a) { \
|
|
751
|
+
return (rt)(vec_mergeh(a, zero)); \
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
VSX_IMPL_UNPACKU(vec_ushort8, vec_uchar16, vec_uchar16_z)
|
|
755
|
+
VSX_IMPL_UNPACKU(vec_uint4, vec_ushort8, vec_ushort8_z)
|
|
756
|
+
VSX_IMPL_UNPACKU(vec_udword2, vec_uint4, vec_uint4_z)
|
|
757
|
+
|
|
758
|
+
/*
|
|
759
|
+
* Implement vec_mergesqe and vec_mergesqo
|
|
760
|
+
* Merges the sequence values of even and odd elements of two vectors
|
|
761
|
+
*/
|
|
762
|
+
#define VSX_IMPL_PERM(rt, fnm, ...) \
|
|
763
|
+
VSX_FINLINE(rt) fnm(const rt &a, const rt &b) { \
|
|
764
|
+
static const vec_uchar16 perm = {__VA_ARGS__}; \
|
|
765
|
+
return vec_perm(a, b, perm); \
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
// 16
|
|
769
|
+
#define perm16_mergesqe \
|
|
770
|
+
0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30
|
|
771
|
+
#define perm16_mergesqo \
|
|
772
|
+
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31
|
|
773
|
+
VSX_IMPL_PERM(vec_uchar16, vec_mergesqe, perm16_mergesqe)
|
|
774
|
+
VSX_IMPL_PERM(vec_uchar16, vec_mergesqo, perm16_mergesqo)
|
|
775
|
+
VSX_IMPL_PERM(vec_char16, vec_mergesqe, perm16_mergesqe)
|
|
776
|
+
VSX_IMPL_PERM(vec_char16, vec_mergesqo, perm16_mergesqo)
|
|
777
|
+
// 8
|
|
778
|
+
#define perm8_mergesqe 0, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29
|
|
779
|
+
#define perm8_mergesqo \
|
|
780
|
+
2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31
|
|
781
|
+
VSX_IMPL_PERM(vec_ushort8, vec_mergesqe, perm8_mergesqe)
|
|
782
|
+
VSX_IMPL_PERM(vec_ushort8, vec_mergesqo, perm8_mergesqo)
|
|
783
|
+
VSX_IMPL_PERM(vec_short8, vec_mergesqe, perm8_mergesqe)
|
|
784
|
+
VSX_IMPL_PERM(vec_short8, vec_mergesqo, perm8_mergesqo)
|
|
785
|
+
// 4
|
|
786
|
+
#define perm4_mergesqe 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27
|
|
787
|
+
#define perm4_mergesqo \
|
|
788
|
+
4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31
|
|
789
|
+
VSX_IMPL_PERM(vec_uint4, vec_mergesqe, perm4_mergesqe)
|
|
790
|
+
VSX_IMPL_PERM(vec_uint4, vec_mergesqo, perm4_mergesqo)
|
|
791
|
+
VSX_IMPL_PERM(vec_int4, vec_mergesqe, perm4_mergesqe)
|
|
792
|
+
VSX_IMPL_PERM(vec_int4, vec_mergesqo, perm4_mergesqo)
|
|
793
|
+
VSX_IMPL_PERM(vec_float4, vec_mergesqe, perm4_mergesqe)
|
|
794
|
+
VSX_IMPL_PERM(vec_float4, vec_mergesqo, perm4_mergesqo)
|
|
795
|
+
// 2
|
|
796
|
+
VSX_REDIRECT_2RG(vec_double2, vec_double2, vec_mergesqe, vec_mergeh)
|
|
797
|
+
VSX_REDIRECT_2RG(vec_double2, vec_double2, vec_mergesqo, vec_mergel)
|
|
798
|
+
VSX_REDIRECT_2RG(vec_dword2, vec_dword2, vec_mergesqe, vec_mergeh)
|
|
799
|
+
VSX_REDIRECT_2RG(vec_dword2, vec_dword2, vec_mergesqo, vec_mergel)
|
|
800
|
+
VSX_REDIRECT_2RG(vec_udword2, vec_udword2, vec_mergesqe, vec_mergeh)
|
|
801
|
+
VSX_REDIRECT_2RG(vec_udword2, vec_udword2, vec_mergesqo, vec_mergel)
|
|
802
|
+
|
|
803
|
+
/*
|
|
804
|
+
* Implement vec_mergesqh and vec_mergesql
|
|
805
|
+
* Merges the sequence most and least significant halves of two vectors
|
|
806
|
+
*/
|
|
807
|
+
#define VSX_IMPL_MERGESQHL(Tvec) \
|
|
808
|
+
VSX_FINLINE(Tvec) vec_mergesqh(const Tvec &a, const Tvec &b) { \
|
|
809
|
+
return (Tvec)vec_mergeh(vec_udword2_c(a), vec_udword2_c(b)); \
|
|
810
|
+
} \
|
|
811
|
+
VSX_FINLINE(Tvec) vec_mergesql(const Tvec &a, const Tvec &b) { \
|
|
812
|
+
return (Tvec)vec_mergel(vec_udword2_c(a), vec_udword2_c(b)); \
|
|
813
|
+
}
|
|
814
|
+
VSX_IMPL_MERGESQHL(vec_uchar16)
|
|
815
|
+
VSX_IMPL_MERGESQHL(vec_char16)
|
|
816
|
+
VSX_IMPL_MERGESQHL(vec_ushort8)
|
|
817
|
+
VSX_IMPL_MERGESQHL(vec_short8)
|
|
818
|
+
VSX_IMPL_MERGESQHL(vec_uint4)
|
|
819
|
+
VSX_IMPL_MERGESQHL(vec_int4)
|
|
820
|
+
VSX_IMPL_MERGESQHL(vec_float4)
|
|
821
|
+
VSX_REDIRECT_2RG(vec_udword2, vec_udword2, vec_mergesqh, vec_mergeh)
|
|
822
|
+
VSX_REDIRECT_2RG(vec_udword2, vec_udword2, vec_mergesql, vec_mergel)
|
|
823
|
+
VSX_REDIRECT_2RG(vec_dword2, vec_dword2, vec_mergesqh, vec_mergeh)
|
|
824
|
+
VSX_REDIRECT_2RG(vec_dword2, vec_dword2, vec_mergesql, vec_mergel)
|
|
825
|
+
VSX_REDIRECT_2RG(vec_double2, vec_double2, vec_mergesqh, vec_mergeh)
|
|
826
|
+
VSX_REDIRECT_2RG(vec_double2, vec_double2, vec_mergesql, vec_mergel)
|
|
827
|
+
|
|
828
|
+
// 2 and 4 channels interleave for all types except 2 lanes
|
|
829
|
+
#define VSX_IMPL_ST_INTERLEAVE(Tp, Tvec) \
|
|
830
|
+
VSX_FINLINE(void) vec_st_interleave(const Tvec &a, const Tvec &b, Tp *ptr) { \
|
|
831
|
+
vsx_stf(vec_mergeh(a, b), 0, ptr); \
|
|
832
|
+
vsx_stf(vec_mergel(a, b), 16, ptr); \
|
|
833
|
+
} \
|
|
834
|
+
VSX_FINLINE(void) \
|
|
835
|
+
vec_st_interleave(const Tvec &a, const Tvec &b, const Tvec &c, \
|
|
836
|
+
const Tvec &d, Tp *ptr) { \
|
|
837
|
+
Tvec ac = vec_mergeh(a, c); \
|
|
838
|
+
Tvec bd = vec_mergeh(b, d); \
|
|
839
|
+
vsx_stf(vec_mergeh(ac, bd), 0, ptr); \
|
|
840
|
+
vsx_stf(vec_mergel(ac, bd), 16, ptr); \
|
|
841
|
+
ac = vec_mergel(a, c); \
|
|
842
|
+
bd = vec_mergel(b, d); \
|
|
843
|
+
vsx_stf(vec_mergeh(ac, bd), 32, ptr); \
|
|
844
|
+
vsx_stf(vec_mergel(ac, bd), 48, ptr); \
|
|
845
|
+
}
|
|
846
|
+
VSX_IMPL_ST_INTERLEAVE(uchar, vec_uchar16)
|
|
847
|
+
VSX_IMPL_ST_INTERLEAVE(schar, vec_char16)
|
|
848
|
+
VSX_IMPL_ST_INTERLEAVE(ushort, vec_ushort8)
|
|
849
|
+
VSX_IMPL_ST_INTERLEAVE(short, vec_short8)
|
|
850
|
+
VSX_IMPL_ST_INTERLEAVE(uint, vec_uint4)
|
|
851
|
+
VSX_IMPL_ST_INTERLEAVE(int, vec_int4)
|
|
852
|
+
VSX_IMPL_ST_INTERLEAVE(float, vec_float4)
|
|
853
|
+
|
|
854
|
+
// 2 and 4 channels deinterleave for 16 lanes
|
|
855
|
+
#define VSX_IMPL_ST_DINTERLEAVE_8(Tp, Tvec) \
|
|
856
|
+
VSX_FINLINE(void) vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b) { \
|
|
857
|
+
Tvec v0 = vsx_ld(0, ptr); \
|
|
858
|
+
Tvec v1 = vsx_ld(16, ptr); \
|
|
859
|
+
a = vec_mergesqe(v0, v1); \
|
|
860
|
+
b = vec_mergesqo(v0, v1); \
|
|
861
|
+
} \
|
|
862
|
+
VSX_FINLINE(void) \
|
|
863
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c, Tvec &d) { \
|
|
864
|
+
Tvec v0 = vsx_ld(0, ptr); \
|
|
865
|
+
Tvec v1 = vsx_ld(16, ptr); \
|
|
866
|
+
Tvec v2 = vsx_ld(32, ptr); \
|
|
867
|
+
Tvec v3 = vsx_ld(48, ptr); \
|
|
868
|
+
Tvec m0 = vec_mergesqe(v0, v1); \
|
|
869
|
+
Tvec m1 = vec_mergesqe(v2, v3); \
|
|
870
|
+
a = vec_mergesqe(m0, m1); \
|
|
871
|
+
c = vec_mergesqo(m0, m1); \
|
|
872
|
+
m0 = vec_mergesqo(v0, v1); \
|
|
873
|
+
m1 = vec_mergesqo(v2, v3); \
|
|
874
|
+
b = vec_mergesqe(m0, m1); \
|
|
875
|
+
d = vec_mergesqo(m0, m1); \
|
|
876
|
+
}
|
|
877
|
+
VSX_IMPL_ST_DINTERLEAVE_8(uchar, vec_uchar16)
|
|
878
|
+
VSX_IMPL_ST_DINTERLEAVE_8(schar, vec_char16)
|
|
879
|
+
|
|
880
|
+
// 2 and 4 channels deinterleave for 8 lanes
|
|
881
|
+
#define VSX_IMPL_ST_DINTERLEAVE_16(Tp, Tvec) \
|
|
882
|
+
VSX_FINLINE(void) vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b) { \
|
|
883
|
+
Tvec v0 = vsx_ld(0, ptr); \
|
|
884
|
+
Tvec v1 = vsx_ld(8, ptr); \
|
|
885
|
+
a = vec_mergesqe(v0, v1); \
|
|
886
|
+
b = vec_mergesqo(v0, v1); \
|
|
887
|
+
} \
|
|
888
|
+
VSX_FINLINE(void) \
|
|
889
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c, Tvec &d) { \
|
|
890
|
+
Tvec v0 = vsx_ld(0, ptr); \
|
|
891
|
+
Tvec v1 = vsx_ld(8, ptr); \
|
|
892
|
+
Tvec m0 = vec_mergeh(v0, v1); \
|
|
893
|
+
Tvec m1 = vec_mergel(v0, v1); \
|
|
894
|
+
Tvec ab0 = vec_mergeh(m0, m1); \
|
|
895
|
+
Tvec cd0 = vec_mergel(m0, m1); \
|
|
896
|
+
v0 = vsx_ld(16, ptr); \
|
|
897
|
+
v1 = vsx_ld(24, ptr); \
|
|
898
|
+
m0 = vec_mergeh(v0, v1); \
|
|
899
|
+
m1 = vec_mergel(v0, v1); \
|
|
900
|
+
Tvec ab1 = vec_mergeh(m0, m1); \
|
|
901
|
+
Tvec cd1 = vec_mergel(m0, m1); \
|
|
902
|
+
a = vec_mergesqh(ab0, ab1); \
|
|
903
|
+
b = vec_mergesql(ab0, ab1); \
|
|
904
|
+
c = vec_mergesqh(cd0, cd1); \
|
|
905
|
+
d = vec_mergesql(cd0, cd1); \
|
|
906
|
+
}
|
|
907
|
+
VSX_IMPL_ST_DINTERLEAVE_16(ushort, vec_ushort8)
|
|
908
|
+
VSX_IMPL_ST_DINTERLEAVE_16(short, vec_short8)
|
|
909
|
+
|
|
910
|
+
// 2 and 4 channels deinterleave for 4 lanes
|
|
911
|
+
#define VSX_IMPL_ST_DINTERLEAVE_32(Tp, Tvec) \
|
|
912
|
+
VSX_FINLINE(void) vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b) { \
|
|
913
|
+
a = vsx_ld(0, ptr); \
|
|
914
|
+
b = vsx_ld(4, ptr); \
|
|
915
|
+
Tvec m0 = vec_mergeh(a, b); \
|
|
916
|
+
Tvec m1 = vec_mergel(a, b); \
|
|
917
|
+
a = vec_mergeh(m0, m1); \
|
|
918
|
+
b = vec_mergel(m0, m1); \
|
|
919
|
+
} \
|
|
920
|
+
VSX_FINLINE(void) \
|
|
921
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c, Tvec &d) { \
|
|
922
|
+
Tvec v0 = vsx_ld(0, ptr); \
|
|
923
|
+
Tvec v1 = vsx_ld(4, ptr); \
|
|
924
|
+
Tvec v2 = vsx_ld(8, ptr); \
|
|
925
|
+
Tvec v3 = vsx_ld(12, ptr); \
|
|
926
|
+
Tvec m0 = vec_mergeh(v0, v2); \
|
|
927
|
+
Tvec m1 = vec_mergeh(v1, v3); \
|
|
928
|
+
a = vec_mergeh(m0, m1); \
|
|
929
|
+
b = vec_mergel(m0, m1); \
|
|
930
|
+
m0 = vec_mergel(v0, v2); \
|
|
931
|
+
m1 = vec_mergel(v1, v3); \
|
|
932
|
+
c = vec_mergeh(m0, m1); \
|
|
933
|
+
d = vec_mergel(m0, m1); \
|
|
934
|
+
}
|
|
935
|
+
VSX_IMPL_ST_DINTERLEAVE_32(uint, vec_uint4)
|
|
936
|
+
VSX_IMPL_ST_DINTERLEAVE_32(int, vec_int4)
|
|
937
|
+
VSX_IMPL_ST_DINTERLEAVE_32(float, vec_float4)
|
|
938
|
+
|
|
939
|
+
// 2 and 4 channels interleave and deinterleave for 2 lanes
|
|
940
|
+
#define VSX_IMPL_ST_D_INTERLEAVE_64(Tp, Tvec, ld_func, st_func) \
|
|
941
|
+
VSX_FINLINE(void) vec_st_interleave(const Tvec &a, const Tvec &b, Tp *ptr) { \
|
|
942
|
+
st_func(vec_mergeh(a, b), 0, ptr); \
|
|
943
|
+
st_func(vec_mergel(a, b), 2, ptr); \
|
|
944
|
+
} \
|
|
945
|
+
VSX_FINLINE(void) \
|
|
946
|
+
vec_st_interleave(const Tvec &a, const Tvec &b, const Tvec &c, \
|
|
947
|
+
const Tvec &d, Tp *ptr) { \
|
|
948
|
+
st_func(vec_mergeh(a, b), 0, ptr); \
|
|
949
|
+
st_func(vec_mergeh(c, d), 2, ptr); \
|
|
950
|
+
st_func(vec_mergel(a, b), 4, ptr); \
|
|
951
|
+
st_func(vec_mergel(c, d), 6, ptr); \
|
|
952
|
+
} \
|
|
953
|
+
VSX_FINLINE(void) vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b) { \
|
|
954
|
+
Tvec m0 = ld_func(0, ptr); \
|
|
955
|
+
Tvec m1 = ld_func(2, ptr); \
|
|
956
|
+
a = vec_mergeh(m0, m1); \
|
|
957
|
+
b = vec_mergel(m0, m1); \
|
|
958
|
+
} \
|
|
959
|
+
VSX_FINLINE(void) \
|
|
960
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c, Tvec &d) { \
|
|
961
|
+
Tvec v0 = ld_func(0, ptr); \
|
|
962
|
+
Tvec v1 = ld_func(2, ptr); \
|
|
963
|
+
Tvec v2 = ld_func(4, ptr); \
|
|
964
|
+
Tvec v3 = ld_func(6, ptr); \
|
|
965
|
+
a = vec_mergeh(v0, v2); \
|
|
966
|
+
b = vec_mergel(v0, v2); \
|
|
967
|
+
c = vec_mergeh(v1, v3); \
|
|
968
|
+
d = vec_mergel(v1, v3); \
|
|
969
|
+
}
|
|
970
|
+
VSX_IMPL_ST_D_INTERLEAVE_64(int64, vec_dword2, vsx_ld2, vsx_st2)
|
|
971
|
+
VSX_IMPL_ST_D_INTERLEAVE_64(uint64, vec_udword2, vsx_ld2, vsx_st2)
|
|
972
|
+
VSX_IMPL_ST_D_INTERLEAVE_64(double, vec_double2, vsx_ld, vsx_st)
|
|
973
|
+
|
|
974
|
+
/* 3 channels */
|
|
975
|
+
#define VSX_IMPL_ST_INTERLEAVE_3CH_16(Tp, Tvec) \
|
|
976
|
+
VSX_FINLINE(void) \
|
|
977
|
+
vec_st_interleave(const Tvec &a, const Tvec &b, const Tvec &c, Tp *ptr) { \
|
|
978
|
+
static const vec_uchar16 a12 = {0, 16, 0, 1, 17, 0, 2, 18, \
|
|
979
|
+
0, 3, 19, 0, 4, 20, 0, 5}; \
|
|
980
|
+
static const vec_uchar16 a123 = {0, 1, 16, 3, 4, 17, 6, 7, \
|
|
981
|
+
18, 9, 10, 19, 12, 13, 20, 15}; \
|
|
982
|
+
vsx_st(vec_perm(vec_perm(a, b, a12), c, a123), 0, ptr); \
|
|
983
|
+
static const vec_uchar16 b12 = {21, 0, 6, 22, 0, 7, 23, 0, \
|
|
984
|
+
8, 24, 0, 9, 25, 0, 10, 26}; \
|
|
985
|
+
static const vec_uchar16 b123 = {0, 21, 2, 3, 22, 5, 6, 23, \
|
|
986
|
+
8, 9, 24, 11, 12, 25, 14, 15}; \
|
|
987
|
+
vsx_st(vec_perm(vec_perm(a, b, b12), c, b123), 16, ptr); \
|
|
988
|
+
static const vec_uchar16 c12 = {0, 11, 27, 0, 12, 28, 0, 13, \
|
|
989
|
+
29, 0, 14, 30, 0, 15, 31, 0}; \
|
|
990
|
+
static const vec_uchar16 c123 = {26, 1, 2, 27, 4, 5, 28, 7, \
|
|
991
|
+
8, 29, 10, 11, 30, 13, 14, 31}; \
|
|
992
|
+
vsx_st(vec_perm(vec_perm(a, b, c12), c, c123), 32, ptr); \
|
|
993
|
+
} \
|
|
994
|
+
VSX_FINLINE(void) \
|
|
995
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c) { \
|
|
996
|
+
Tvec v1 = vsx_ld(0, ptr); \
|
|
997
|
+
Tvec v2 = vsx_ld(16, ptr); \
|
|
998
|
+
Tvec v3 = vsx_ld(32, ptr); \
|
|
999
|
+
static const vec_uchar16 a12_perm = {0, 3, 6, 9, 12, 15, 18, 21, \
|
|
1000
|
+
24, 27, 30, 0, 0, 0, 0, 0}; \
|
|
1001
|
+
static const vec_uchar16 a123_perm = {0, 1, 2, 3, 4, 5, 6, 7, \
|
|
1002
|
+
8, 9, 10, 17, 20, 23, 26, 29}; \
|
|
1003
|
+
a = vec_perm(vec_perm(v1, v2, a12_perm), v3, a123_perm); \
|
|
1004
|
+
static const vec_uchar16 b12_perm = {1, 4, 7, 10, 13, 16, 19, 22, \
|
|
1005
|
+
25, 28, 31, 0, 0, 0, 0, 0}; \
|
|
1006
|
+
static const vec_uchar16 b123_perm = {0, 1, 2, 3, 4, 5, 6, 7, \
|
|
1007
|
+
8, 9, 10, 18, 21, 24, 27, 30}; \
|
|
1008
|
+
b = vec_perm(vec_perm(v1, v2, b12_perm), v3, b123_perm); \
|
|
1009
|
+
static const vec_uchar16 c12_perm = {2, 5, 8, 11, 14, 17, 20, 23, \
|
|
1010
|
+
26, 29, 0, 0, 0, 0, 0, 0}; \
|
|
1011
|
+
static const vec_uchar16 c123_perm = {0, 1, 2, 3, 4, 5, 6, 7, \
|
|
1012
|
+
8, 9, 16, 19, 22, 25, 28, 31}; \
|
|
1013
|
+
c = vec_perm(vec_perm(v1, v2, c12_perm), v3, c123_perm); \
|
|
1014
|
+
}
|
|
1015
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_16(uchar, vec_uchar16)
|
|
1016
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_16(schar, vec_char16)
|
|
1017
|
+
|
|
1018
|
+
#define VSX_IMPL_ST_INTERLEAVE_3CH_8(Tp, Tvec) \
|
|
1019
|
+
VSX_FINLINE(void) \
|
|
1020
|
+
vec_st_interleave(const Tvec &a, const Tvec &b, const Tvec &c, Tp *ptr) { \
|
|
1021
|
+
static const vec_uchar16 a12 = {0, 1, 16, 17, 0, 0, 2, 3, \
|
|
1022
|
+
18, 19, 0, 0, 4, 5, 20, 21}; \
|
|
1023
|
+
static const vec_uchar16 a123 = {0, 1, 2, 3, 16, 17, 6, 7, \
|
|
1024
|
+
8, 9, 18, 19, 12, 13, 14, 15}; \
|
|
1025
|
+
vsx_st(vec_perm(vec_perm(a, b, a12), c, a123), 0, ptr); \
|
|
1026
|
+
static const vec_uchar16 b12 = {0, 0, 6, 7, 22, 23, 0, 0, \
|
|
1027
|
+
8, 9, 24, 25, 0, 0, 10, 11}; \
|
|
1028
|
+
static const vec_uchar16 b123 = {20, 21, 2, 3, 4, 5, 22, 23, \
|
|
1029
|
+
8, 9, 10, 11, 24, 25, 14, 15}; \
|
|
1030
|
+
vsx_st(vec_perm(vec_perm(a, b, b12), c, b123), 8, ptr); \
|
|
1031
|
+
static const vec_uchar16 c12 = {26, 27, 0, 0, 12, 13, 28, 29, \
|
|
1032
|
+
0, 0, 14, 15, 30, 31, 0, 0}; \
|
|
1033
|
+
static const vec_uchar16 c123 = {0, 1, 26, 27, 4, 5, 6, 7, \
|
|
1034
|
+
28, 29, 10, 11, 12, 13, 30, 31}; \
|
|
1035
|
+
vsx_st(vec_perm(vec_perm(a, b, c12), c, c123), 16, ptr); \
|
|
1036
|
+
} \
|
|
1037
|
+
VSX_FINLINE(void) \
|
|
1038
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c) { \
|
|
1039
|
+
Tvec v1 = vsx_ld(0, ptr); \
|
|
1040
|
+
Tvec v2 = vsx_ld(8, ptr); \
|
|
1041
|
+
Tvec v3 = vsx_ld(16, ptr); \
|
|
1042
|
+
static const vec_uchar16 a12_perm = {0, 1, 6, 7, 12, 13, 18, 19, \
|
|
1043
|
+
24, 25, 30, 31, 0, 0, 0, 0}; \
|
|
1044
|
+
static const vec_uchar16 a123_perm = {0, 1, 2, 3, 4, 5, 6, 7, \
|
|
1045
|
+
8, 9, 10, 11, 20, 21, 26, 27}; \
|
|
1046
|
+
a = vec_perm(vec_perm(v1, v2, a12_perm), v3, a123_perm); \
|
|
1047
|
+
static const vec_uchar16 b12_perm = {2, 3, 8, 9, 14, 15, 20, 21, \
|
|
1048
|
+
26, 27, 0, 0, 0, 0, 0, 0}; \
|
|
1049
|
+
static const vec_uchar16 b123_perm = {0, 1, 2, 3, 4, 5, 6, 7, \
|
|
1050
|
+
8, 9, 16, 17, 22, 23, 28, 29}; \
|
|
1051
|
+
b = vec_perm(vec_perm(v1, v2, b12_perm), v3, b123_perm); \
|
|
1052
|
+
static const vec_uchar16 c12_perm = {4, 5, 10, 11, 16, 17, 22, 23, \
|
|
1053
|
+
28, 29, 0, 0, 0, 0, 0, 0}; \
|
|
1054
|
+
static const vec_uchar16 c123_perm = {0, 1, 2, 3, 4, 5, 6, 7, \
|
|
1055
|
+
8, 9, 18, 19, 24, 25, 30, 31}; \
|
|
1056
|
+
c = vec_perm(vec_perm(v1, v2, c12_perm), v3, c123_perm); \
|
|
1057
|
+
}
|
|
1058
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_8(ushort, vec_ushort8)
|
|
1059
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_8(short, vec_short8)
|
|
1060
|
+
|
|
1061
|
+
#define VSX_IMPL_ST_INTERLEAVE_3CH_4(Tp, Tvec) \
|
|
1062
|
+
VSX_FINLINE(void) \
|
|
1063
|
+
vec_st_interleave(const Tvec &a, const Tvec &b, const Tvec &c, Tp *ptr) { \
|
|
1064
|
+
Tvec hbc = vec_mergeh(b, c); \
|
|
1065
|
+
static const vec_uchar16 ahbc = {0, 1, 2, 3, 16, 17, 18, 19, \
|
|
1066
|
+
20, 21, 22, 23, 4, 5, 6, 7}; \
|
|
1067
|
+
vsx_st(vec_perm(a, hbc, ahbc), 0, ptr); \
|
|
1068
|
+
Tvec lab = vec_mergel(a, b); \
|
|
1069
|
+
vsx_st(vec_sld(lab, hbc, 8), 4, ptr); \
|
|
1070
|
+
static const vec_uchar16 clab = {8, 9, 10, 11, 24, 25, 26, 27, \
|
|
1071
|
+
28, 29, 30, 31, 12, 13, 14, 15}; \
|
|
1072
|
+
vsx_st(vec_perm(c, lab, clab), 8, ptr); \
|
|
1073
|
+
} \
|
|
1074
|
+
VSX_FINLINE(void) \
|
|
1075
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c) { \
|
|
1076
|
+
Tvec v1 = vsx_ld(0, ptr); \
|
|
1077
|
+
Tvec v2 = vsx_ld(4, ptr); \
|
|
1078
|
+
Tvec v3 = vsx_ld(8, ptr); \
|
|
1079
|
+
static const vec_uchar16 flp = {0, 1, 2, 3, 12, 13, 14, 15, \
|
|
1080
|
+
16, 17, 18, 19, 28, 29, 30, 31}; \
|
|
1081
|
+
a = vec_perm(v1, vec_sld(v3, v2, 8), flp); \
|
|
1082
|
+
static const vec_uchar16 flp2 = {28, 29, 30, 31, 0, 1, 2, 3, \
|
|
1083
|
+
12, 13, 14, 15, 16, 17, 18, 19}; \
|
|
1084
|
+
b = vec_perm(v2, vec_sld(v1, v3, 8), flp2); \
|
|
1085
|
+
c = vec_perm(vec_sld(v2, v1, 8), v3, flp); \
|
|
1086
|
+
}
|
|
1087
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_4(uint, vec_uint4)
|
|
1088
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_4(int, vec_int4)
|
|
1089
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_4(float, vec_float4)
|
|
1090
|
+
|
|
1091
|
+
#define VSX_IMPL_ST_INTERLEAVE_3CH_2(Tp, Tvec, ld_func, st_func) \
|
|
1092
|
+
VSX_FINLINE(void) \
|
|
1093
|
+
vec_st_interleave(const Tvec &a, const Tvec &b, const Tvec &c, Tp *ptr) { \
|
|
1094
|
+
st_func(vec_mergeh(a, b), 0, ptr); \
|
|
1095
|
+
st_func(vec_permi(c, a, 1), 2, ptr); \
|
|
1096
|
+
st_func(vec_mergel(b, c), 4, ptr); \
|
|
1097
|
+
} \
|
|
1098
|
+
VSX_FINLINE(void) \
|
|
1099
|
+
vec_ld_deinterleave(const Tp *ptr, Tvec &a, Tvec &b, Tvec &c) { \
|
|
1100
|
+
Tvec v1 = ld_func(0, ptr); \
|
|
1101
|
+
Tvec v2 = ld_func(2, ptr); \
|
|
1102
|
+
Tvec v3 = ld_func(4, ptr); \
|
|
1103
|
+
a = vec_permi(v1, v2, 1); \
|
|
1104
|
+
b = vec_permi(v1, v3, 2); \
|
|
1105
|
+
c = vec_permi(v2, v3, 1); \
|
|
1106
|
+
}
|
|
1107
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_2(int64, vec_dword2, vsx_ld2, vsx_st2)
|
|
1108
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_2(uint64, vec_udword2, vsx_ld2, vsx_st2)
|
|
1109
|
+
VSX_IMPL_ST_INTERLEAVE_3CH_2(double, vec_double2, vsx_ld, vsx_st)
|
|
1110
|
+
|
|
1111
|
+
#endif // CV_VSX
|
|
1112
|
+
|
|
1113
|
+
//! @}
|
|
1114
|
+
|
|
1115
|
+
#endif // OPENCV_HAL_VSX_UTILS_HPP
|