@@ -695,237 +695,15 @@ namespace CV__SIMD_NAMESPACE {
695
695
/* * @brief SIMD processing state cleanup call */
696
696
inline void vx_cleanup () { VXPREFIX (_cleanup)(); }
697
697
698
- #if CV_SIMD
698
+ #if !CV_SIMD_SCALABLE
699
699
// Compatibility layer
700
- #define CV_SIMD_SCALABLE 0
701
- #define CV_SIMD_SCALABLE_64F 0
702
700
703
- template <class T >
704
- struct VTraits ;
705
- #if CV_SIMD512 && (!defined(CV__SIMD_FORCE_WIDTH) || CV__SIMD_FORCE_WIDTH == 512)
706
- template <>
707
- struct VTraits <v_uint8>
708
- {
709
- static inline int vlanes () { return v_uint8::nlanes; }
710
- enum { nlanes = 64 , max_nlanes = nlanes };
711
- using lane_type = uchar;
712
- };
713
- template <>
714
- struct VTraits <v_int8>
715
- {
716
- static inline int vlanes () { return v_int8::nlanes; }
717
- enum { nlanes = 64 , max_nlanes = nlanes };
718
- using lane_type = schar;
719
- };
720
- template <>
721
- struct VTraits <v_uint16>
722
- {
723
- static inline int vlanes () { return v_uint16::nlanes; }
724
- enum { nlanes = 32 , max_nlanes = nlanes };
725
- using lane_type = ushort;
726
- };
727
- template <>
728
- struct VTraits <v_int16>
729
- {
730
- static inline int vlanes () { return v_int16::nlanes; }
731
- enum { nlanes = 32 , max_nlanes = nlanes };
732
- using lane_type = short ;
733
- };
734
- template <>
735
- struct VTraits <v_uint32>
736
- {
737
- static inline int vlanes () { return v_uint32::nlanes; }
738
- enum { nlanes = 16 , max_nlanes = nlanes };
739
- using lane_type = uint;
740
- };
741
- template <>
742
- struct VTraits <v_int32>
743
- {
744
- static inline int vlanes () { return v_int32::nlanes; }
745
- enum { nlanes = 16 , max_nlanes = nlanes };
746
- using lane_type = int ;
701
+ template <typename T> struct VTraits {
702
+ static inline int vlanes () { return T::nlanes; }
703
+ enum { nlanes = T::nlanes, max_nlanes = T::nlanes };
704
+ using lane_type = typename T::lane_type;
747
705
};
748
706
749
- template <>
750
- struct VTraits <v_float32>
751
- {
752
- static inline int vlanes () { return v_float32::nlanes; }
753
- enum { nlanes = 16 , max_nlanes = nlanes };
754
- using lane_type = float ;
755
- };
756
- template <>
757
- struct VTraits <v_uint64>
758
- {
759
- static inline int vlanes () { return v_uint64::nlanes; }
760
- enum { nlanes = 8 , max_nlanes = nlanes };
761
- using lane_type = uint64;
762
- };
763
- template <>
764
- struct VTraits <v_int64>
765
- {
766
- static inline int vlanes () { return v_int64::nlanes; }
767
- enum { nlanes = 8 , max_nlanes = nlanes };
768
- using lane_type = int64;
769
- };
770
- #if CV_SIMD_64F
771
- template <>
772
- struct VTraits <v_float64>
773
- {
774
- static inline int vlanes () { return v_float64::nlanes; }
775
- enum { nlanes = 8 , max_nlanes = nlanes };
776
- using lane_type = double ;
777
- };
778
- #endif
779
- #elif CV_SIMD256 && (!defined(CV__SIMD_FORCE_WIDTH) || CV__SIMD_FORCE_WIDTH == 256)
780
- template <>
781
- struct VTraits <v_uint8>
782
- {
783
- static inline int vlanes () { return v_uint8::nlanes; }
784
- enum { nlanes = 32 , max_nlanes = nlanes };
785
- using lane_type = uchar;
786
- };
787
- template <>
788
- struct VTraits <v_int8>
789
- {
790
- static inline int vlanes () { return v_int8::nlanes; }
791
- enum { nlanes = 32 , max_nlanes = nlanes };
792
- using lane_type = schar;
793
- };
794
- template <>
795
- struct VTraits <v_uint16>
796
- {
797
- static inline int vlanes () { return v_uint16::nlanes; }
798
- enum { nlanes = 16 , max_nlanes = nlanes };
799
- using lane_type = ushort;
800
- };
801
- template <>
802
- struct VTraits <v_int16>
803
- {
804
- static inline int vlanes () { return v_int16::nlanes; }
805
- enum { nlanes = 16 , max_nlanes = nlanes };
806
- using lane_type = short ;
807
- };
808
- template <>
809
- struct VTraits <v_uint32>
810
- {
811
- static inline int vlanes () { return v_uint32::nlanes; }
812
- enum { nlanes = 8 , max_nlanes = nlanes };
813
- using lane_type = uint;
814
- };
815
- template <>
816
- struct VTraits <v_int32>
817
- {
818
- static inline int vlanes () { return v_int32::nlanes; }
819
- enum { nlanes = 8 , max_nlanes = nlanes };
820
- using lane_type = int ;
821
- };
822
-
823
- template <>
824
- struct VTraits <v_float32>
825
- {
826
- static inline int vlanes () { return v_float32::nlanes; }
827
- enum { nlanes = 8 , max_nlanes = nlanes };
828
- using lane_type = float ;
829
- };
830
- template <>
831
- struct VTraits <v_uint64>
832
- {
833
- static inline int vlanes () { return v_uint64::nlanes; }
834
- enum { nlanes = 4 , max_nlanes = nlanes };
835
- using lane_type = uint64;
836
- };
837
- template <>
838
- struct VTraits <v_int64>
839
- {
840
- static inline int vlanes () { return v_int64::nlanes; }
841
- enum { nlanes = 4 , max_nlanes = nlanes };
842
- using lane_type = int64;
843
- };
844
- #if CV_SIMD_64F
845
- template <>
846
- struct VTraits <v_float64>
847
- {
848
- static inline int vlanes () { return v_float64::nlanes; }
849
- enum { nlanes = 4 , max_nlanes = nlanes };
850
- using lane_type = double ;
851
- };
852
- #endif
853
- #elif CV_SIMD128 && (!defined(CV__SIMD_FORCE_WIDTH) || CV__SIMD_FORCE_WIDTH == 128)
854
- template <>
855
- struct VTraits <v_uint8>
856
- {
857
- static inline int vlanes () { return v_uint8::nlanes; }
858
- enum { nlanes = 16 , max_nlanes = nlanes };
859
- using lane_type = uchar;
860
- };
861
- template <>
862
- struct VTraits <v_int8>
863
- {
864
- static inline int vlanes () { return v_int8::nlanes; }
865
- enum { nlanes = 16 , max_nlanes = nlanes };
866
- using lane_type = schar;
867
- };
868
- template <>
869
- struct VTraits <v_uint16>
870
- {
871
- static inline int vlanes () { return v_uint16::nlanes; }
872
- enum { nlanes = 8 , max_nlanes = nlanes };
873
- using lane_type = ushort;
874
- };
875
- template <>
876
- struct VTraits <v_int16>
877
- {
878
- static inline int vlanes () { return v_int16::nlanes; }
879
- enum { nlanes = 8 , max_nlanes = nlanes };
880
- using lane_type = short ;
881
- };
882
- template <>
883
- struct VTraits <v_uint32>
884
- {
885
- static inline int vlanes () { return v_uint32::nlanes; }
886
- enum { nlanes = 4 , max_nlanes = nlanes };
887
- using lane_type = uint;
888
- };
889
- template <>
890
- struct VTraits <v_int32>
891
- {
892
- static inline int vlanes () { return v_int32::nlanes; }
893
- enum { nlanes = 4 , max_nlanes = nlanes };
894
- using lane_type = int ;
895
- };
896
-
897
- template <>
898
- struct VTraits <v_float32>
899
- {
900
- static inline int vlanes () { return v_float32::nlanes; }
901
- enum { nlanes = 4 , max_nlanes = nlanes };
902
- using lane_type = float ;
903
- };
904
- template <>
905
- struct VTraits <v_uint64>
906
- {
907
- static inline int vlanes () { return v_uint64::nlanes; }
908
- enum { nlanes = 2 , max_nlanes = nlanes };
909
- using lane_type = uint64;
910
- };
911
- template <>
912
- struct VTraits <v_int64>
913
- {
914
- static inline int vlanes () { return v_int64::nlanes; }
915
- enum { nlanes = 2 , max_nlanes = nlanes };
916
- using lane_type = int64;
917
- };
918
- #if CV_SIMD_64F
919
- template <>
920
- struct VTraits <v_float64>
921
- {
922
- static inline int vlanes () { return v_float64::nlanes; }
923
- enum { nlanes = 2 , max_nlanes = nlanes };
924
- using lane_type = double ;
925
- };
926
- #endif
927
- #endif
928
-
929
707
#define OPENCV_HAL_WRAP_BIN_OP_ADDSUB (_Tpvec ) \
930
708
inline _Tpvec v_add (const _Tpvec& a, const _Tpvec& b) \
931
709
{ \
0 commit comments