I32 floorInt(F32 val) { #ifdef USE_SSE4 __m128 t = _mm_set_ss(val); t = _mm_floor_ss(t, t); I32 i = _mm_cvtss_si32(t); #elif defined(USE_SSE2) val += -0.5f; __m128 t = _mm_set_ss(val); I32 i = (I32)_mm_cvtss_si32(t); #else I32 i = (I32)core_floor(val); #endif return i; }
__m128 test_mm_floor_ss(__m128 x, __m128 y) { // CHECK-LABEL: test_mm_floor_ss // CHECK: call <4 x float> @llvm.x86.sse41.round.ss // CHECK-ASM: roundss $1, %xmm{{.*}}, %xmm{{.*}} return _mm_floor_ss(x, y); }
__m128 test_mm_floor_ss(__m128 x, __m128 y) { // CHECK-LABEL: test_mm_floor_ss // CHECK: call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 1) return _mm_floor_ss(x, y); }