Ejemplo n.º 1
0
I32 floorInt(F64 val) {
#ifdef USE_SSE4
    __m128d t = _mm_set_sd(val);
    t = _mm_floor_sd(t, t);
    I32 i = _mm_cvtsd_si32(t);
#elif defined(USE_SSE2)
    val += -0.5;
	__m128d t = _mm_set_sd(val);
	I32 i = (I32)_mm_cvtsd_si32(t);
#else
	I32 i = (I32)core_floor(val);
#endif
    return i;
}
static void
TEST (void)
{
  union128d u, s;
  double e[2] = {0.0};
  int i;

  s.x = _mm_set_pd (1.1234, -2.3478);
  u.x = _mm_floor_pd (s.x);

  for (i = 0; i < 2; i++)
    {
      __m128d tmp = _mm_load_sd (&s.a[i]);
      tmp = _mm_floor_sd (tmp, tmp);
      _mm_store_sd (&e[i], tmp);
    }
  
  if (check_union128d (u, e))
    abort ();
} 
Ejemplo n.º 3
0
void static
avx_test (void)
{
  union256d u, s1;
  double source [4] = {2134.3343,1234.635654,453.345635,54646.464356};
  double e[4] = {0.0};
  int i;

  s1.x = _mm256_loadu_pd (source);
  u.x = _mm256_floor_pd (s1.x);

  for (i = 0; i < 4; i++)
    {
      __m128d tmp = _mm_load_sd (&s1.a[i]);
      tmp = _mm_floor_sd (tmp, tmp);
      _mm_store_sd (&e[i], tmp);
    }

  if (check_union256d (u, e))
    abort ();
}
Ejemplo n.º 4
0
__m128d test_mm_floor_sd(__m128d x, __m128d y) {
  // CHECK-LABEL: test_mm_floor_sd
  // CHECK: call <2 x double> @llvm.x86.sse41.round.sd
  // CHECK-ASM: roundsd $1, %xmm{{.*}}, %xmm{{.*}}
  return _mm_floor_sd(x, y);
}
Ejemplo n.º 5
0
__m128d test_mm_floor_sd(__m128d x, __m128d y) {
  // CHECK-LABEL: test_mm_floor_sd
  // CHECK: call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 1)
  return _mm_floor_sd(x, y);
}