@@ -37,16 +37,40 @@ TEST(LlvmLibcSIMDTest, TypeTraits) {
3737}
3838
3939TEST (LlvmLibcSIMDTest, ElementwiseOperations) {
40- simd<int > v1 = splat (1 );
41- simd<int > v2 = splat (-1 );
42-
43- simd<int > v_abs = abs (v2);
44- simd<int > v_min = min (v1, v2);
45- simd<int > v_max = max (v1, v2);
40+ simd<int > vi1 = splat (1 );
41+ simd<int > vi2 = splat (-1 );
42+ simd<float > vf1 = splat (1 .0f );
43+ simd<float > vf2 = splat (-1 .0f );
44+
45+ simd<int > v_abs = abs (vi2);
46+ simd<int > v_min = min (vi1, vi2);
47+ simd<int > v_max = max (vi1, vi2);
48+ simd<float > v_fma = fma (vf1, vf2, vf1);
49+ simd<float > v_ceil = ceil (splat (1 .2f ));
50+ simd<float > v_floor = floor (splat (1 .8f ));
51+ simd<float > v_roundeven = roundeven (splat (2 .5f ));
52+ simd<float > v_round = round (splat (2 .5f ));
53+ simd<float > v_trunc = trunc (splat (-2 .9f ));
54+ simd<float > v_nearbyint = nearbyint (splat (3 .4f ));
55+ simd<float > v_rint = rint (splat (3 .6f ));
56+ simd<float > v_canonicalize = canonicalize (splat (1 .0f ));
57+ simd<float > v_copysign = copysign (vf1, vf2);
58+ simd<float > v_fmod = fmod (splat (5 .5f ), splat (2 .0f ));
4659
60+ EXPECT_EQ (v_abs[0 ], 1 );
4761 EXPECT_EQ (v_min[0 ], -1 );
4862 EXPECT_EQ (v_max[0 ], 1 );
49- EXPECT_EQ (v_abs[0 ], 1 );
63+ EXPECT_FP_EQ (v_fma[0 ], 0 .0f );
64+ EXPECT_FP_EQ (v_ceil[0 ], 2 .0f );
65+ EXPECT_FP_EQ (v_floor[0 ], 1 .0f );
66+ EXPECT_FP_EQ (v_roundeven[0 ], 2 .0f );
67+ EXPECT_FP_EQ (v_round[0 ], 3 .0f );
68+ EXPECT_FP_EQ (v_trunc[0 ], -2 .0f );
69+ EXPECT_FP_EQ (v_nearbyint[0 ], 3 .0f );
70+ EXPECT_FP_EQ (v_rint[0 ], 4 .0f );
71+ EXPECT_FP_EQ (v_canonicalize[0 ], 1 .0f );
72+ EXPECT_FP_EQ (v_copysign[0 ], -1 .0f );
73+ EXPECT_FP_EQ (v_fmod[0 ], 1 .5f );
5074}
5175
5276TEST (LlvmLibcSIMDTest, ReductionOperations) {
0 commit comments