1 //! LLVM's SIMD platform intrinsics 2 3 extern "platform-intrinsic" { 4 //pub fn simd_select_bitmask simd_eq<T, U>(x: T, y: T) -> U5 pub fn simd_eq<T, U>(x: T, y: T) -> U; simd_ne<T, U>(x: T, y: T) -> U6 pub fn simd_ne<T, U>(x: T, y: T) -> U; simd_lt<T, U>(x: T, y: T) -> U7 pub fn simd_lt<T, U>(x: T, y: T) -> U; simd_le<T, U>(x: T, y: T) -> U8 pub fn simd_le<T, U>(x: T, y: T) -> U; simd_gt<T, U>(x: T, y: T) -> U9 pub fn simd_gt<T, U>(x: T, y: T) -> U; simd_ge<T, U>(x: T, y: T) -> U10 pub fn simd_ge<T, U>(x: T, y: T) -> U; 11 simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U12 pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U; simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U13 pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U; simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U14 pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U; simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U15 pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U; simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U16 pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U; simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U17 pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U; simd_shuffle128<T, U>(x: T, y: T, idx: [u32; 128]) -> U18 pub fn simd_shuffle128<T, U>(x: T, y: T, idx: [u32; 128]) -> U; 19 20 #[rustc_const_unstable(feature = "const_simd_insert", issue = "none")] simd_insert<T, U>(x: T, idx: u32, val: U) -> T21 pub fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T; 22 #[rustc_const_unstable(feature = "const_simd_extract", issue = "none")] simd_extract<T, U>(x: T, idx: u32) -> U23 pub fn simd_extract<T, U>(x: T, idx: u32) -> U; 24 //pub fn simd_select simd_bitmask<T, U>(x: T) -> U25 pub fn simd_bitmask<T, U>(x: T) -> U; 26 simd_cast<T, U>(x: T) -> U27 pub fn simd_cast<T, U>(x: T) -> U; 28 simd_add<T>(x: T, y: T) -> T29 pub fn simd_add<T>(x: T, y: T) -> T; simd_sub<T>(x: T, y: T) -> T30 pub fn simd_sub<T>(x: T, y: T) -> T; simd_mul<T>(x: T, y: T) -> T31 pub fn simd_mul<T>(x: T, y: T) -> T; simd_div<T>(x: T, y: T) -> T32 pub fn simd_div<T>(x: T, y: T) -> T; simd_shl<T>(x: T, y: T) -> T33 pub fn simd_shl<T>(x: T, y: T) -> T; simd_shr<T>(x: T, y: T) -> T34 pub fn simd_shr<T>(x: T, y: T) -> T; simd_and<T>(x: T, y: T) -> T35 pub fn simd_and<T>(x: T, y: T) -> T; simd_or<T>(x: T, y: T) -> T36 pub fn simd_or<T>(x: T, y: T) -> T; simd_xor<T>(x: T, y: T) -> T37 pub fn simd_xor<T>(x: T, y: T) -> T; 38 simd_neg<T>(x: T) -> T39 pub fn simd_neg<T>(x: T) -> T; 40 simd_saturating_add<T>(x: T, y: T) -> T41 pub fn simd_saturating_add<T>(x: T, y: T) -> T; simd_saturating_sub<T>(x: T, y: T) -> T42 pub fn simd_saturating_sub<T>(x: T, y: T) -> T; 43 simd_gather<T, U, V>(values: T, pointers: U, mask: V) -> T44 pub fn simd_gather<T, U, V>(values: T, pointers: U, mask: V) -> T; simd_scatter<T, U, V>(values: T, pointers: U, mask: V)45 pub fn simd_scatter<T, U, V>(values: T, pointers: U, mask: V); 46 simd_reduce_add_unordered<T, U>(x: T) -> U47 pub fn simd_reduce_add_unordered<T, U>(x: T) -> U; simd_reduce_mul_unordered<T, U>(x: T) -> U48 pub fn simd_reduce_mul_unordered<T, U>(x: T) -> U; simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U49 pub fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U; simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U50 pub fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U; simd_reduce_min<T, U>(x: T) -> U51 pub fn simd_reduce_min<T, U>(x: T) -> U; simd_reduce_max<T, U>(x: T) -> U52 pub fn simd_reduce_max<T, U>(x: T) -> U; simd_reduce_min_nanless<T, U>(x: T) -> U53 pub fn simd_reduce_min_nanless<T, U>(x: T) -> U; simd_reduce_max_nanless<T, U>(x: T) -> U54 pub fn simd_reduce_max_nanless<T, U>(x: T) -> U; simd_reduce_and<T, U>(x: T) -> U55 pub fn simd_reduce_and<T, U>(x: T) -> U; simd_reduce_or<T, U>(x: T) -> U56 pub fn simd_reduce_or<T, U>(x: T) -> U; simd_reduce_xor<T, U>(x: T) -> U57 pub fn simd_reduce_xor<T, U>(x: T) -> U; simd_reduce_all<T>(x: T) -> bool58 pub fn simd_reduce_all<T>(x: T) -> bool; simd_reduce_any<T>(x: T) -> bool59 pub fn simd_reduce_any<T>(x: T) -> bool; 60 simd_select<M, T>(m: M, a: T, b: T) -> T61 pub fn simd_select<M, T>(m: M, a: T, b: T) -> T; simd_select_bitmask<M, T>(m: M, a: T, b: T) -> T62 pub fn simd_select_bitmask<M, T>(m: M, a: T, b: T) -> T; 63 simd_fmin<T>(a: T, b: T) -> T64 pub fn simd_fmin<T>(a: T, b: T) -> T; simd_fmax<T>(a: T, b: T) -> T65 pub fn simd_fmax<T>(a: T, b: T) -> T; 66 simd_fsqrt<T>(a: T) -> T67 pub fn simd_fsqrt<T>(a: T) -> T; simd_fsin<T>(a: T) -> T68 pub fn simd_fsin<T>(a: T) -> T; simd_fcos<T>(a: T) -> T69 pub fn simd_fcos<T>(a: T) -> T; simd_fabs<T>(a: T) -> T70 pub fn simd_fabs<T>(a: T) -> T; simd_floor<T>(a: T) -> T71 pub fn simd_floor<T>(a: T) -> T; simd_ceil<T>(a: T) -> T72 pub fn simd_ceil<T>(a: T) -> T; simd_fexp<T>(a: T) -> T73 pub fn simd_fexp<T>(a: T) -> T; simd_fexp2<T>(a: T) -> T74 pub fn simd_fexp2<T>(a: T) -> T; simd_flog10<T>(a: T) -> T75 pub fn simd_flog10<T>(a: T) -> T; simd_flog2<T>(a: T) -> T76 pub fn simd_flog2<T>(a: T) -> T; simd_flog<T>(a: T) -> T77 pub fn simd_flog<T>(a: T) -> T; 78 //pub fn simd_fpowi 79 //pub fn simd_fpow simd_fma<T>(a: T, b: T, c: T) -> T80 pub fn simd_fma<T>(a: T, b: T, c: T) -> T; 81 } 82