rendered paste bodyinline 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;
}