@@ -758,6 +758,30 @@ arm_simd_orr!(vorrq_u32, uint32x4_t);
758
758
arm_simd_orr ! ( vorr_u64, uint64x1_t) ;
759
759
arm_simd_orr ! ( vorrq_u64, uint64x2_t) ;
760
760
761
+ macro_rules! arm_simd_eor {
762
+ ( $name: ident, $type: ty) => {
763
+ /// Vector bitwise exclusive or (vector).
764
+ arm_simd_2!( $name, $type, simd_xor, veor, eor) ;
765
+ } ;
766
+ }
767
+
768
+ arm_simd_eor ! ( veor_s8, int8x8_t) ;
769
+ arm_simd_eor ! ( veorq_s8, int8x16_t) ;
770
+ arm_simd_eor ! ( veor_s16, int16x4_t) ;
771
+ arm_simd_eor ! ( veorq_s16, int16x8_t) ;
772
+ arm_simd_eor ! ( veor_s32, int32x2_t) ;
773
+ arm_simd_eor ! ( veorq_s32, int32x4_t) ;
774
+ arm_simd_eor ! ( veor_s64, int64x1_t) ;
775
+ arm_simd_eor ! ( veorq_s64, int64x2_t) ;
776
+ arm_simd_eor ! ( veor_u8, uint8x8_t) ;
777
+ arm_simd_eor ! ( veorq_u8, uint8x16_t) ;
778
+ arm_simd_eor ! ( veor_u16, uint16x4_t) ;
779
+ arm_simd_eor ! ( veorq_u16, uint16x8_t) ;
780
+ arm_simd_eor ! ( veor_u32, uint32x2_t) ;
781
+ arm_simd_eor ! ( veorq_u32, uint32x4_t) ;
782
+ arm_simd_eor ! ( veor_u64, uint64x1_t) ;
783
+ arm_simd_eor ! ( veorq_u64, uint64x2_t) ;
784
+
761
785
/// Folding minimum of adjacent pairs
762
786
#[ inline]
763
787
#[ target_feature( enable = "neon" ) ]
@@ -1764,6 +1788,134 @@ mod tests {
1764
1788
assert_eq ! ( r, a) ;
1765
1789
}
1766
1790
1791
+ #[ simd_test( enable = "neon" ) ]
1792
+ unsafe fn test_veor_s8 ( ) {
1793
+ let a = i8x8:: new ( 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 ) ;
1794
+ let b = i8x8:: new ( 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ) ;
1795
+ let r: i8x8 = transmute ( veor_s8 ( transmute ( a) , transmute ( a) ) ) ;
1796
+ assert_eq ! ( r, b) ;
1797
+ }
1798
+
1799
+ #[ simd_test( enable = "neon" ) ]
1800
+ unsafe fn test_veorq_s8 ( ) {
1801
+ let a = i8x16:: new ( 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0A , 0x0B , 0x0C , 0x0D , 0x0E , 0x0F ) ;
1802
+ let b = i8x16:: new ( 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ) ;
1803
+ let r: i8x16 = transmute ( veorq_s8 ( transmute ( a) , transmute ( a) ) ) ;
1804
+ assert_eq ! ( r, b) ;
1805
+ }
1806
+
1807
+ #[ simd_test( enable = "neon" ) ]
1808
+ unsafe fn test_veor_s16 ( ) {
1809
+ let a = i16x4:: new ( 0x0001 , 0x0203 , 0x0405 , 0x0607 ) ;
1810
+ let b = i16x4:: new ( 0x0000 , 0x0000 , 0x0000 , 0x0000 ) ;
1811
+ let r: i16x4 = transmute ( veor_s16 ( transmute ( a) , transmute ( a) ) ) ;
1812
+ assert_eq ! ( r, b) ;
1813
+ }
1814
+
1815
+ #[ simd_test( enable = "neon" ) ]
1816
+ unsafe fn test_veorq_s16 ( ) {
1817
+ let a = i16x8:: new ( 0x0001 , 0x0203 , 0x0405 , 0x0607 , 0x0809 , 0x0A0B , 0x0C0D , 0x0E0F ) ;
1818
+ let b = i16x8:: new ( 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 ) ;
1819
+ let r: i16x8 = transmute ( veorq_s16 ( transmute ( a) , transmute ( a) ) ) ;
1820
+ assert_eq ! ( r, b) ;
1821
+ }
1822
+
1823
+ #[ simd_test( enable = "neon" ) ]
1824
+ unsafe fn test_veor_s32 ( ) {
1825
+ let a = i32x2:: new ( 0x00010203 , 0x04050607 ) ;
1826
+ let b = i32x2:: new ( 0x00000000 , 0x00000000 ) ;
1827
+ let r: i32x2 = transmute ( veor_s32 ( transmute ( a) , transmute ( a) ) ) ;
1828
+ assert_eq ! ( r, b) ;
1829
+ }
1830
+
1831
+ #[ simd_test( enable = "neon" ) ]
1832
+ unsafe fn test_veorq_s32 ( ) {
1833
+ let a = i32x4:: new ( 0x00010203 , 0x04050607 , 0x08090A0B , 0x0C0D0E0F ) ;
1834
+ let b = i32x4:: new ( 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 ) ;
1835
+ let r: i32x4 = transmute ( veorq_s32 ( transmute ( a) , transmute ( a) ) ) ;
1836
+ assert_eq ! ( r, b) ;
1837
+ }
1838
+
1839
+ #[ simd_test( enable = "neon" ) ]
1840
+ unsafe fn test_veor_s64 ( ) {
1841
+ let a = i64x1:: new ( 0x0001020304050607 ) ;
1842
+ let b = i64x1:: new ( 0x0000000000000000 ) ;
1843
+ let r: i64x1 = transmute ( veor_s64 ( transmute ( a) , transmute ( a) ) ) ;
1844
+ assert_eq ! ( r, b) ;
1845
+ }
1846
+
1847
+ #[ simd_test( enable = "neon" ) ]
1848
+ unsafe fn test_veorq_s64 ( ) {
1849
+ let a = i64x2:: new ( 0x0001020304050607 , 0x08090A0B0C0D0E0F ) ;
1850
+ let b = i64x2:: new ( 0x0000000000000000 , 0x0000000000000000 ) ;
1851
+ let r: i64x2 = transmute ( veorq_s64 ( transmute ( a) , transmute ( a) ) ) ;
1852
+ assert_eq ! ( r, b) ;
1853
+ }
1854
+
1855
+ #[ simd_test( enable = "neon" ) ]
1856
+ unsafe fn test_veor_u8 ( ) {
1857
+ let a = u8x8:: new ( 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 ) ;
1858
+ let b = u8x8:: new ( 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ) ;
1859
+ let r: u8x8 = transmute ( veor_u8 ( transmute ( a) , transmute ( a) ) ) ;
1860
+ assert_eq ! ( r, b) ;
1861
+ }
1862
+
1863
+ #[ simd_test( enable = "neon" ) ]
1864
+ unsafe fn test_veorq_u8 ( ) {
1865
+ let a = u8x16:: new ( 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0A , 0x0B , 0x0C , 0x0D , 0x0E , 0x0F ) ;
1866
+ let b = u8x16:: new ( 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ) ;
1867
+ let r: u8x16 = transmute ( veorq_u8 ( transmute ( a) , transmute ( a) ) ) ;
1868
+ assert_eq ! ( r, b) ;
1869
+ }
1870
+
1871
+ #[ simd_test( enable = "neon" ) ]
1872
+ unsafe fn test_veor_u16 ( ) {
1873
+ let a = u16x4:: new ( 0x0001 , 0x0203 , 0x0405 , 0x0607 ) ;
1874
+ let b = u16x4:: new ( 0x0000 , 0x0000 , 0x0000 , 0x0000 ) ;
1875
+ let r: u16x4 = transmute ( veor_u16 ( transmute ( a) , transmute ( a) ) ) ;
1876
+ assert_eq ! ( r, b) ;
1877
+ }
1878
+
1879
+ #[ simd_test( enable = "neon" ) ]
1880
+ unsafe fn test_veorq_u16 ( ) {
1881
+ let a = u16x8:: new ( 0x0001 , 0x0203 , 0x0405 , 0x0607 , 0x0809 , 0x0A0B , 0x0C0D , 0x0E0F ) ;
1882
+ let b = u16x8:: new ( 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 , 0x0000 ) ;
1883
+ let r: u16x8 = transmute ( veorq_u16 ( transmute ( a) , transmute ( a) ) ) ;
1884
+ assert_eq ! ( r, b) ;
1885
+ }
1886
+
1887
+ #[ simd_test( enable = "neon" ) ]
1888
+ unsafe fn test_veor_u32 ( ) {
1889
+ let a = u32x2:: new ( 0x00010203 , 0x04050607 ) ;
1890
+ let b = u32x2:: new ( 0x00000000 , 0x00000000 ) ;
1891
+ let r: u32x2 = transmute ( veor_u32 ( transmute ( a) , transmute ( a) ) ) ;
1892
+ assert_eq ! ( r, b) ;
1893
+ }
1894
+
1895
+ #[ simd_test( enable = "neon" ) ]
1896
+ unsafe fn test_veorq_u32 ( ) {
1897
+ let a = u32x4:: new ( 0x00010203 , 0x04050607 , 0x08090A0B , 0x0C0D0E0F ) ;
1898
+ let b = u32x4:: new ( 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 ) ;
1899
+ let r: u32x4 = transmute ( veorq_u32 ( transmute ( a) , transmute ( a) ) ) ;
1900
+ assert_eq ! ( r, b) ;
1901
+ }
1902
+
1903
+ #[ simd_test( enable = "neon" ) ]
1904
+ unsafe fn test_veor_u64 ( ) {
1905
+ let a = u64x1:: new ( 0x0001020304050607 ) ;
1906
+ let b = u64x1:: new ( 0x0000000000000000 ) ;
1907
+ let r: u64x1 = transmute ( veor_u64 ( transmute ( a) , transmute ( a) ) ) ;
1908
+ assert_eq ! ( r, b) ;
1909
+ }
1910
+
1911
+ #[ simd_test( enable = "neon" ) ]
1912
+ unsafe fn test_veorq_u64 ( ) {
1913
+ let a = u64x2:: new ( 0x0001020304050607 , 0x08090A0B0C0D0E0F ) ;
1914
+ let b = u64x2:: new ( 0x0000000000000000 , 0x0000000000000000 ) ;
1915
+ let r: u64x2 = transmute ( veorq_u64 ( transmute ( a) , transmute ( a) ) ) ;
1916
+ assert_eq ! ( r, b) ;
1917
+ }
1918
+
1767
1919
#[ simd_test( enable = "neon" ) ]
1768
1920
unsafe fn test_vmovn_s16 ( ) {
1769
1921
let a = i16x8:: new ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
0 commit comments