#include "glheader.h"
#include "context.h"
#include "math/m_xform.h"
#include "tnl/t_context.h"
#include "sse.h"
#include "common_x86_macros.h"
#ifdef DEBUG
#include "math/m_debug.h"
#endif
#ifdef USE_SSE_ASM
DECLARE_XFORM_GROUP( sse, 2 )
DECLARE_XFORM_GROUP( sse, 3 )
#if 1
extern void _mesa_sse_transform_normals_no_rot( NORM_ARGS );
extern void _mesa_sse_transform_rescale_normals( NORM_ARGS );
extern void _mesa_sse_transform_rescale_normals_no_rot( NORM_ARGS );
extern void _mesa_sse_transform_points4_general( XFORM_ARGS );
extern void _mesa_sse_transform_points4_3d( XFORM_ARGS );
extern void _mesa_sse_transform_points4_identity( XFORM_ARGS );
#else
DECLARE_NORM_GROUP( sse )
#endif
extern void _ASMAPI
_mesa_v16_sse_general_xform( GLfloat *first_vert,
const GLfloat *m,
const GLfloat *src,
GLuint src_stride,
GLuint count );
extern void _ASMAPI
_mesa_sse_project_vertices( GLfloat *first,
GLfloat *last,
const GLfloat *m,
GLuint stride );
extern void _ASMAPI
_mesa_sse_project_clipped_vertices( GLfloat *first,
GLfloat *last,
const GLfloat *m,
GLuint stride,
const GLubyte *clipmask );
#endif
void _mesa_init_sse_transform_asm( void )
{
#ifdef USE_SSE_ASM
ASSIGN_XFORM_GROUP( sse, 2 );
ASSIGN_XFORM_GROUP( sse, 3 );
#if 1
_mesa_transform_tab[4][MATRIX_GENERAL] =
_mesa_sse_transform_points4_general;
_mesa_transform_tab[4][MATRIX_3D] =
_mesa_sse_transform_points4_3d;
_mesa_transform_tab[4][MATRIX_IDENTITY] =
_mesa_sse_transform_points4_identity;
_mesa_normal_tab[NORM_TRANSFORM_NO_ROT] =
_mesa_sse_transform_normals_no_rot;
_mesa_normal_tab[NORM_TRANSFORM | NORM_RESCALE] =
_mesa_sse_transform_rescale_normals;
_mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_RESCALE] =
_mesa_sse_transform_rescale_normals_no_rot;
#else
ASSIGN_XFORM_GROUP( sse, 4 );
ASSIGN_NORM_GROUP( sse );
#endif
#ifdef DEBUG
_math_test_all_transform_functions( "SSE" );
_math_test_all_normal_transform_functions( "SSE" );
#endif
#endif
}