inline vectype bbox_test_ray_ints(bbox_p bbox, ray_p ray, ray_extra_p re) { vectype tmin; __m128 m_tmp1, m_tmp2, m_min, m_max; if(!( (++numtests) % 25000000 )) fprintf(stderr, "%d ", numtests); /* return bbox_test_ray_ints_nosse(bbox, ray, re); */ m_tmp1 = _mm_load_ps(bbox->bounds[0]); m_tmp2 = _mm_load_ps(bbox->bounds[1]); m_tmp1 = _mm_sub_ps(m_tmp1, re->m_point); m_tmp2 = _mm_sub_ps(m_tmp2, re->m_point); m_tmp1 = _mm_mul_ps(m_tmp1, re->m_invdir); m_tmp2 = _mm_mul_ps(m_tmp2, re->m_invdir); m_max = _mm_max_ps(m_tmp1, m_tmp2); m_min = _mm_min_ps(m_tmp1, m_tmp2); m_tmp1 = _mm_shuffle_ps(m_min, m_min, 0xB1); m_min = _mm_max_ps(m_min, m_tmp1); m_tmp1 = _mm_shuffle_ps(m_min, m_min, 0x4E); m_min = _mm_max_ps(m_min, m_tmp1); if(_mm_movemask_ps(_mm_cmpgt_ps(m_min, m_max)) & 0x7) return -1; _mm_store_ss(&tmin, m_min); return tmin; }