1/* { dg-do run } */ 2/* { dg-require-effective-target xop } */ 3/* { dg-options "-O2 -mxop" } */ 4 5#include "xop-check.h" 6 7#include <x86intrin.h> 8 9void 10check_mm_vmfrcz_sd (__m128d __A, __m128d __B) 11{ 12 union128d a, b, c; 13 double d[2]; 14 15 a.x = __A; 16 b.x = __B; 17 c.x = _mm_frcz_sd (__A, __B); 18 d[0] = b.a[0] - (int)b.a[0] ; 19 d[1] = a.a[1]; 20 if (check_union128d (c, d)) 21 abort (); 22} 23 24void 25check_mm_vmfrcz_ss (__m128 __A, __m128 __B) 26{ 27 union128 a, b, c; 28 float f[4]; 29 30 a.x = __A; 31 b.x = __B; 32 c.x = _mm_frcz_ss (__A, __B); 33 f[0] = b.a[0] - (int)b.a[0] ; 34 f[1] = a.a[1]; 35 f[2] = a.a[2]; 36 f[3] = a.a[3]; 37 if (check_union128 (c, f)) 38 abort (); 39} 40 41static void 42xop_test (void) 43{ 44 union128 a, b; 45 union128d c,d; 46 int i; 47 48 for (i = 0; i < 4; i++) 49 { 50 a.a[i] = i + 3.5; 51 b.a[i] = i + 7.9; 52 } 53 for (i = 0; i < 2; i++) 54 { 55 c.a[i] = i + 3.5; 56 d.a[i] = i + 7.987654321; 57 } 58 check_mm_vmfrcz_ss (a.x, b.x); 59 check_mm_vmfrcz_sd (c.x, d.x); 60} 61