1/* { dg-do run } */ 2/* { dg-options "-O2 -msse2 -std=c99" } */ 3/* { dg-require-effective-target sse2 } */ 4/* { dg-require-effective-target c99_runtime } */ 5 6#ifndef CHECK_H 7#define CHECK_H "sse2-check.h" 8#endif 9 10#ifndef TEST 11#define TEST sse2_test 12#endif 13 14#include CHECK_H 15 16#include <math.h> 17 18double s1[] = {2134.3343, 6678.346}; 19double s2[] = {41124.234, 6678.346}; 20long long dd[] = {1, 2}, d[2]; 21union{long long l[2]; double d[2];} e; 22 23void check(char *id) 24{ 25 if(checkVl(d, e.l, 2)){ 26 printf("mm_cmp%s_sd FAILED\n", id); 27 } 28} 29 30#define CMP(cmp, rel) \ 31 e.l[0] = rel ? -1 : 0; \ 32 dest = _mm_loadu_pd((double*)dd); \ 33 source1 = _mm_loadu_pd(s1); \ 34 source2 = _mm_loadu_pd(s2); \ 35 dest = _mm_cmp##cmp##_sd(source1, source2); \ 36 _mm_storeu_pd((double*) d, dest); \ 37 check("" #cmp ""); 38 39static void 40TEST () 41{ 42 __m128d source1, source2, dest; 43 44 e.d[1] = s1[1]; 45 46 CMP(eq, !isunordered(s1[0], s2[0]) && s1[0] == s2[0]); 47 CMP(lt, !isunordered(s1[0], s2[0]) && s1[0] < s2[0]); 48 CMP(le, !isunordered(s1[0], s2[0]) && s1[0] <= s2[0]); 49 CMP(unord, isunordered(s1[0], s2[0])); 50 CMP(neq, isunordered(s1[0], s2[0]) || s1[0] != s2[0]); 51 CMP(nlt, isunordered(s1[0], s2[0]) || s1[0] >= s2[0]); 52 CMP(nle, isunordered(s1[0], s2[0]) || s1[0] > s2[0]); 53 CMP(ord, !isunordered(s1[0], s2[0])); 54 55 CMP(ge, isunordered(s1[0], s2[0]) || s1[0] >= s2[0]); 56 CMP(gt, isunordered(s1[0], s2[0]) || s1[0] > s2[0]); 57 CMP(nge, !isunordered(s1[0], s2[0]) && s1[0] < s2[0]); 58 CMP(ngt, !isunordered(s1[0], s2[0]) && s1[0] <= s2[0]); 59} 60