@@ -39,6 +39,20 @@ macro_rules! impl_float_math {
39
39
use coresimd:: ppsv:: codegen:: fma:: FloatFma ;
40
40
FloatFma :: fma( self , y, z)
41
41
}
42
+
43
+ /// Sin
44
+ #[ inline( always) ]
45
+ pub fn sin( self ) -> Self {
46
+ use coresimd:: ppsv:: codegen:: sin:: FloatSin ;
47
+ FloatSin :: sin( self )
48
+ }
49
+
50
+ /// Cos
51
+ #[ inline]
52
+ pub fn cos( self ) -> Self {
53
+ use coresimd:: ppsv:: codegen:: cos:: FloatCos ;
54
+ FloatCos :: cos( self )
55
+ }
42
56
}
43
57
} ;
44
58
}
@@ -54,6 +68,14 @@ macro_rules! test_float_math {
54
68
}
55
69
}
56
70
71
+ fn pi( ) -> $elem_ty {
72
+ match :: mem:: size_of:: <$elem_ty>( ) {
73
+ 4 => :: std:: f32 :: consts:: PI as $elem_ty,
74
+ 8 => :: std:: f64 :: consts:: PI as $elem_ty,
75
+ _ => unreachable!( ) ,
76
+ }
77
+ }
78
+
57
79
#[ test]
58
80
fn abs( ) {
59
81
use coresimd:: simd:: * ;
@@ -126,7 +148,36 @@ macro_rules! test_float_math {
126
148
127
149
assert_eq!( f, t. fma( t, z) ) ;
128
150
assert_eq!( f, t. fma( o, t) ) ;
129
- assert_eq!( t3, t. fma( t, o) ) ;
151
+ assert_eq!( t3, t. fma( o, o) ) ;
152
+ }
153
+
154
+ #[ test]
155
+ fn sin( ) {
156
+ use coresimd:: simd:: * ;
157
+ let z = $id:: splat( 0 as $elem_ty) ;
158
+ let p = $id:: splat( pi( ) as $elem_ty) ;
159
+ let ph = $id:: splat( pi( ) as $elem_ty / 2. ) ;
160
+ let o_r = $id:: splat( ( pi( ) as $elem_ty / 2. ) . sin( ) ) ;
161
+ let z_r = $id:: splat( ( pi( ) as $elem_ty) . sin( ) ) ;
162
+
163
+ assert_eq!( z, z. sin( ) ) ;
164
+ assert_eq!( o_r, ph. sin( ) ) ;
165
+ assert_eq!( z_r, p. sin( ) ) ;
166
+ }
167
+
168
+ #[ test]
169
+ fn cos( ) {
170
+ use coresimd:: simd:: * ;
171
+ let z = $id:: splat( 0 as $elem_ty) ;
172
+ let o = $id:: splat( 1 as $elem_ty) ;
173
+ let p = $id:: splat( pi( ) as $elem_ty) ;
174
+ let ph = $id:: splat( pi( ) as $elem_ty / 2. ) ;
175
+ let z_r = $id:: splat( ( pi( ) as $elem_ty / 2. ) . cos( ) ) ;
176
+ let o_r = $id:: splat( ( pi( ) as $elem_ty) . cos( ) ) ;
177
+
178
+ assert_eq!( o, z. cos( ) ) ;
179
+ assert_eq!( z_r, ph. cos( ) ) ;
180
+ assert_eq!( o_r, p. cos( ) ) ;
130
181
}
131
182
} ;
132
183
}
0 commit comments