@@ -698,331 +698,65 @@ pub unsafe fn vmvnq_p8(a: poly8x16_t) -> poly8x16_t {
698
698
simd_xor ( a, b)
699
699
}
700
700
701
- /// Vector bitwise and.
702
- #[ inline]
703
- #[ target_feature( enable = "neon" ) ]
704
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
705
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
706
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
707
- pub unsafe fn vand_s8 ( a : int8x8_t , b : int8x8_t ) -> int8x8_t {
708
- simd_and ( a, b)
709
- }
710
-
711
- /// Vector bitwise and.
712
- #[ inline]
713
- #[ target_feature( enable = "neon" ) ]
714
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
715
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
716
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
717
- pub unsafe fn vandq_s8 ( a : int8x16_t , b : int8x16_t ) -> int8x16_t {
718
- simd_and ( a, b)
719
- }
720
-
721
- /// Vector bitwise and.
722
- #[ inline]
723
- #[ target_feature( enable = "neon" ) ]
724
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
725
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
726
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
727
- pub unsafe fn vand_s16 ( a : int16x4_t , b : int16x4_t ) -> int16x4_t {
728
- simd_and ( a, b)
729
- }
730
-
731
- /// Vector bitwise and.
732
- #[ inline]
733
- #[ target_feature( enable = "neon" ) ]
734
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
735
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
736
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
737
- pub unsafe fn vandq_s16 ( a : int16x8_t , b : int16x8_t ) -> int16x8_t {
738
- simd_and ( a, b)
739
- }
740
-
741
- /// Vector bitwise and.
742
- #[ inline]
743
- #[ target_feature( enable = "neon" ) ]
744
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
745
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
746
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
747
- pub unsafe fn vand_s32 ( a : int32x2_t , b : int32x2_t ) -> int32x2_t {
748
- simd_and ( a, b)
749
- }
750
-
751
- /// Vector bitwise and.
752
- #[ inline]
753
- #[ target_feature( enable = "neon" ) ]
754
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
755
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
756
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
757
- pub unsafe fn vandq_s32 ( a : int32x4_t , b : int32x4_t ) -> int32x4_t {
758
- simd_and ( a, b)
759
- }
760
-
761
- /// Vector bitwise and.
762
- #[ inline]
763
- #[ target_feature( enable = "neon" ) ]
764
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
765
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
766
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
767
- pub unsafe fn vand_s64 ( a : int64x1_t , b : int64x1_t ) -> int64x1_t {
768
- simd_and ( a, b)
769
- }
770
-
771
-
772
- /// Vector bitwise and.
773
- #[ inline]
774
- #[ target_feature( enable = "neon" ) ]
775
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
776
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
777
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
778
- pub unsafe fn vandq_s64 ( a : int64x2_t , b : int64x2_t ) -> int64x2_t {
779
- simd_and ( a, b)
780
- }
781
-
782
- /// Vector bitwise and.
783
- #[ inline]
784
- #[ target_feature( enable = "neon" ) ]
785
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
786
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
787
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
788
- pub unsafe fn vand_u8 ( a : uint8x8_t , b : uint8x8_t ) -> uint8x8_t {
789
- simd_and ( a, b)
790
- }
791
-
792
- /// Vector bitwise and.
793
- #[ inline]
794
- #[ target_feature( enable = "neon" ) ]
795
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
796
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
797
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
798
- pub unsafe fn vandq_u8 ( a : uint8x16_t , b : uint8x16_t ) -> uint8x16_t {
799
- simd_and ( a, b)
800
- }
801
-
802
- /// Vector bitwise and.
803
- #[ inline]
804
- #[ target_feature( enable = "neon" ) ]
805
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
806
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
807
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
808
- pub unsafe fn vand_u16 ( a : uint16x4_t , b : uint16x4_t ) -> uint16x4_t {
809
- simd_and ( a, b)
810
- }
811
-
812
- /// Vector bitwise and.
813
- #[ inline]
814
- #[ target_feature( enable = "neon" ) ]
815
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
816
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
817
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
818
- pub unsafe fn vandq_u16 ( a : uint16x8_t , b : uint16x8_t ) -> uint16x8_t {
819
- simd_and ( a, b)
820
- }
821
-
822
- /// Vector bitwise and.
823
- #[ inline]
824
- #[ target_feature( enable = "neon" ) ]
825
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
826
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
827
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
828
- pub unsafe fn vand_u32 ( a : uint32x2_t , b : uint32x2_t ) -> uint32x2_t {
829
- simd_and ( a, b)
830
- }
831
-
832
- /// Vector bitwise and.
833
- #[ inline]
834
- #[ target_feature( enable = "neon" ) ]
835
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
836
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
837
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
838
- pub unsafe fn vandq_u32 ( a : uint32x4_t , b : uint32x4_t ) -> uint32x4_t {
839
- simd_and ( a, b)
840
-
841
- }
842
-
843
- /// Vector bitwise and.
844
- #[ inline]
845
- #[ target_feature( enable = "neon" ) ]
846
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
847
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
848
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
849
- pub unsafe fn vand_u64 ( a : uint64x1_t , b : uint64x1_t ) -> uint64x1_t {
850
- simd_and ( a, b)
851
- }
852
-
853
- /// Vector bitwise and.
854
- #[ inline]
855
- #[ target_feature( enable = "neon" ) ]
856
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
857
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vand) ) ]
858
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( and) ) ]
859
- pub unsafe fn vandq_u64 ( a : uint64x2_t , b : uint64x2_t ) -> uint64x2_t {
860
- simd_and ( a, b)
861
-
862
- }
863
-
864
- /// Vector bitwise or (immediate, inclusive).
865
- #[ inline]
866
- #[ target_feature( enable = "neon" ) ]
867
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
868
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
869
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
870
- pub unsafe fn vorr_s8 ( a : int8x8_t , b : int8x8_t ) -> int8x8_t {
871
- simd_or ( a, b)
872
- }
873
-
874
- /// Vector bitwise or (immediate, inclusive).
875
- #[ inline]
876
- #[ target_feature( enable = "neon" ) ]
877
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
878
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
879
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
880
- pub unsafe fn vorrq_s8 ( a : int8x16_t , b : int8x16_t ) -> int8x16_t {
881
- simd_or ( a, b)
882
- }
883
-
884
- /// Vector bitwise or (immediate, inclusive).
885
- #[ inline]
886
- #[ target_feature( enable = "neon" ) ]
887
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
888
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
889
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
890
- pub unsafe fn vorr_s16 ( a : int16x4_t , b : int16x4_t ) -> int16x4_t {
891
- simd_or ( a, b)
892
- }
893
-
894
- /// Vector bitwise or (immediate, inclusive).
895
- #[ inline]
896
- #[ target_feature( enable = "neon" ) ]
897
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
898
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
899
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
900
- pub unsafe fn vorrq_s16 ( a : int16x8_t , b : int16x8_t ) -> int16x8_t {
901
- simd_or ( a, b)
902
- }
903
-
904
- /// Vector bitwise or (immediate, inclusive).
905
- #[ inline]
906
- #[ target_feature( enable = "neon" ) ]
907
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
908
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
909
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
910
- pub unsafe fn vorr_s32 ( a : int32x2_t , b : int32x2_t ) -> int32x2_t {
911
- simd_or ( a, b)
912
- }
913
-
914
- /// Vector bitwise or (immediate, inclusive).
915
- #[ inline]
916
- #[ target_feature( enable = "neon" ) ]
917
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
918
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
919
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
920
- pub unsafe fn vorrq_s32 ( a : int32x4_t , b : int32x4_t ) -> int32x4_t {
921
- simd_or ( a, b)
922
- }
923
-
924
- /// Vector bitwise or (immediate, inclusive).
925
- #[ inline]
926
- #[ target_feature( enable = "neon" ) ]
927
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
928
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
929
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
930
- pub unsafe fn vorr_s64 ( a : int64x1_t , b : int64x1_t ) -> int64x1_t {
931
- simd_or ( a, b)
932
- }
933
-
934
-
935
- /// Vector bitwise or (immediate, inclusive).
936
- #[ inline]
937
- #[ target_feature( enable = "neon" ) ]
938
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
939
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
940
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
941
- pub unsafe fn vorrq_s64 ( a : int64x2_t , b : int64x2_t ) -> int64x2_t {
942
- simd_or ( a, b)
943
- }
944
-
945
- /// Vector bitwise or (immediate, inclusive).
946
- #[ inline]
947
- #[ target_feature( enable = "neon" ) ]
948
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
949
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
950
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
951
- pub unsafe fn vorr_u8 ( a : uint8x8_t , b : uint8x8_t ) -> uint8x8_t {
952
- simd_or ( a, b)
953
- }
954
-
955
- /// Vector bitwise or (immediate, inclusive).
956
- #[ inline]
957
- #[ target_feature( enable = "neon" ) ]
958
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
959
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
960
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
961
- pub unsafe fn vorrq_u8 ( a : uint8x16_t , b : uint8x16_t ) -> uint8x16_t {
962
- simd_or ( a, b)
963
- }
964
-
965
- /// Vector bitwise or (immediate, inclusive).
966
- #[ inline]
967
- #[ target_feature( enable = "neon" ) ]
968
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
969
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
970
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
971
- pub unsafe fn vorr_u16 ( a : uint16x4_t , b : uint16x4_t ) -> uint16x4_t {
972
- simd_or ( a, b)
973
- }
974
-
975
- /// Vector bitwise or (immediate, inclusive).
976
- #[ inline]
977
- #[ target_feature( enable = "neon" ) ]
978
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
979
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
980
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
981
- pub unsafe fn vorrq_u16 ( a : uint16x8_t , b : uint16x8_t ) -> uint16x8_t {
982
- simd_or ( a, b)
983
- }
984
-
985
- /// Vector bitwise or (immediate, inclusive).
986
- #[ inline]
987
- #[ target_feature( enable = "neon" ) ]
988
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
989
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
990
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
991
- pub unsafe fn vorr_u32 ( a : uint32x2_t , b : uint32x2_t ) -> uint32x2_t {
992
- simd_or ( a, b)
993
- }
994
-
995
- /// Vector bitwise or (immediate, inclusive).
996
- #[ inline]
997
- #[ target_feature( enable = "neon" ) ]
998
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
999
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
1000
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
1001
- pub unsafe fn vorrq_u32 ( a : uint32x4_t , b : uint32x4_t ) -> uint32x4_t {
1002
- simd_or ( a, b)
1003
-
1004
- }
1005
-
1006
- /// Vector bitwise or (immediate, inclusive).
1007
- #[ inline]
1008
- #[ target_feature( enable = "neon" ) ]
1009
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
1010
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
1011
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
1012
- pub unsafe fn vorr_u64 ( a : uint64x1_t , b : uint64x1_t ) -> uint64x1_t {
1013
- simd_or ( a, b)
1014
- }
1015
-
1016
- /// Vector bitwise or (immediate, inclusive).
1017
- #[ inline]
1018
- #[ target_feature( enable = "neon" ) ]
1019
- #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
1020
- #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( vorr) ) ]
1021
- #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( orr) ) ]
1022
- pub unsafe fn vorrq_u64 ( a : uint64x2_t , b : uint64x2_t ) -> uint64x2_t {
1023
- simd_or ( a, b)
1024
-
1025
- }
701
+ macro_rules! arm_simd_2 {
702
+ ( $name: ident, $type: ty, $simd_fn: ident, $intrarm: ident, $intraarch: ident) => {
703
+ #[ inline]
704
+ #[ target_feature( enable = "neon" ) ]
705
+ #[ cfg_attr( target_arch = "arm" , target_feature( enable = "v7" ) ) ]
706
+ #[ cfg_attr( all( test, target_arch = "arm" ) , assert_instr( $intrarm) ) ]
707
+ #[ cfg_attr( all( test, target_arch = "aarch64" ) , assert_instr( $intraarch) ) ]
708
+ pub unsafe fn $name( a: $type, b: $type) -> $type {
709
+ $simd_fn( a, b)
710
+ }
711
+ } ;
712
+ }
713
+
714
+ macro_rules! arm_simd_and {
715
+ ( $name: ident, $type: ty) => {
716
+ /// Vector bitwise and.
717
+ arm_simd_2!( $name, $type, simd_and, vand, and) ;
718
+ } ;
719
+ }
720
+ arm_simd_and ! ( vand_s8, int8x8_t) ;
721
+ arm_simd_and ! ( vandq_s8, int8x16_t) ;
722
+ arm_simd_and ! ( vand_s16, int16x4_t) ;
723
+ arm_simd_and ! ( vandq_s16, int16x8_t) ;
724
+ arm_simd_and ! ( vand_s32, int32x2_t) ;
725
+ arm_simd_and ! ( vandq_s32, int32x4_t) ;
726
+ arm_simd_and ! ( vand_s64, int64x1_t) ;
727
+ arm_simd_and ! ( vandq_s64, int64x2_t) ;
728
+ arm_simd_and ! ( vand_u8, uint8x8_t) ;
729
+ arm_simd_and ! ( vandq_u8, uint8x16_t) ;
730
+ arm_simd_and ! ( vand_u16, uint16x4_t) ;
731
+ arm_simd_and ! ( vandq_u16, uint16x8_t) ;
732
+ arm_simd_and ! ( vand_u32, uint32x2_t) ;
733
+ arm_simd_and ! ( vandq_u32, uint32x4_t) ;
734
+ arm_simd_and ! ( vand_u64, uint64x1_t) ;
735
+ arm_simd_and ! ( vandq_u64, uint64x2_t) ;
736
+
737
+ macro_rules! arm_simd_orr {
738
+ ( $name: ident, $type: ty) => {
739
+ /// Vector bitwise or (immediate, inclusive).
740
+ arm_simd_2!( $name, $type, simd_or, vorr, orr) ;
741
+ } ;
742
+ }
743
+
744
+ arm_simd_orr ! ( vorr_s8, int8x8_t) ;
745
+ arm_simd_orr ! ( vorrq_s8, int8x16_t) ;
746
+ arm_simd_orr ! ( vorr_s16, int16x4_t) ;
747
+ arm_simd_orr ! ( vorrq_s16, int16x8_t) ;
748
+ arm_simd_orr ! ( vorr_s32, int32x2_t) ;
749
+ arm_simd_orr ! ( vorrq_s32, int32x4_t) ;
750
+ arm_simd_orr ! ( vorr_s64, int64x1_t) ;
751
+ arm_simd_orr ! ( vorrq_s64, int64x2_t) ;
752
+ arm_simd_orr ! ( vorr_u8, uint8x8_t) ;
753
+ arm_simd_orr ! ( vorrq_u8, uint8x16_t) ;
754
+ arm_simd_orr ! ( vorr_u16, uint16x4_t) ;
755
+ arm_simd_orr ! ( vorrq_u16, uint16x8_t) ;
756
+ arm_simd_orr ! ( vorr_u32, uint32x2_t) ;
757
+ arm_simd_orr ! ( vorrq_u32, uint32x4_t) ;
758
+ arm_simd_orr ! ( vorr_u64, uint64x1_t) ;
759
+ arm_simd_orr ! ( vorrq_u64, uint64x2_t) ;
1026
760
1027
761
/// Folding minimum of adjacent pairs
1028
762
#[ inline]
0 commit comments