__m128 test_mm_fnmsub_ps(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_fnmsub_ps // CHECK: [[NEG:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.+}} // CHECK: [[NEG2:%.+]] = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %{{.+}} // CHECK: @llvm.x86.fma.vfmadd.ps(<4 x float> [[NEG]], <4 x float> %{{.+}}, <4 x float> [[NEG2]]) return _mm_fnmsub_ps(a, b, c); }
void check_mm_fnmsub_ps (__m128 __A, __m128 __B, __m128 __C) { union128 a, b, c, e; a.x = __A; b.x = __B; c.x = __C; float d[4]; int i; e.x = _mm_fnmsub_ps (__A, __B, __C); for (i = 0; i < 4; i++) { d[i] = -a.a[i] * b.a[i] - c.a[i]; } if (check_union128 (e, d)) abort (); }
__m128 test_mm_fnmsub_ps(__m128 a, __m128 b, __m128 c) { // CHECK: @llvm.x86.fma.vfnmsub.ps return _mm_fnmsub_ps(a, b, c); }
__m128 check_mm_fnmsub_ps (__m128 a, __m128 b, __m128 c) { return _mm_fnmsub_ps (a, b, c); }