__m128 test_mm_cvtsd_ss(__m128 A, __m128d B) { // DAG-LABEL: test_mm_cvtsd_ss // DAG: fptrunc double %{{.*}} to float // // ASM-LABEL: test_mm_cvtsd_ss // ASM: cvtsd2ss return _mm_cvtsd_ss(A, B); }
static double rcp_d(double x) { __m128d xd = _mm_load_sd(&x); double xi = _mm_cvtss_f32(_mm_rcp_ss(_mm_cvtsd_ss(_mm_setzero_ps(), xd))); xi = xi + xi * (1.0 - x * xi); xi = xi + xi * (1.0 - x * xi); return xi; }
test (__m128 p1, __m128d p2) { return _mm_cvtsd_ss (p1, p2); }