1
2 /*
3 * Mesa 3-D graphics library
4 *
5 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26 /*
27 * Intel x86 assembly code by Josh Vanderhoof
28 */
29
30 #include "main/glheader.h"
31 #include "main/context.h"
32 #include "math/m_xform.h"
33
34 #include "x86_xform.h"
35 #include "common_x86_asm.h"
36
37 #ifdef USE_X86_ASM
38 #ifdef USE_3DNOW_ASM
39 #include "3dnow.h"
40 #endif
41 #ifdef USE_SSE_ASM
42 #include "sse.h"
43 #endif
44 #endif
45
46 #ifdef DEBUG_MATH
47 #include "math/m_debug.h"
48 #endif
49
50
51 #ifdef USE_X86_ASM
52 DECLARE_XFORM_GROUP( x86, 2 )
53 DECLARE_XFORM_GROUP( x86, 3 )
54 DECLARE_XFORM_GROUP( x86, 4 )
55
56
57 extern GLvector4f *
58 _mesa_x86_cliptest_points4( GLvector4f *clip_vec,
59 GLvector4f *proj_vec,
60 GLubyte clipMask[],
61 GLubyte *orMask,
62 GLubyte *andMask,
63 GLboolean viewport_z_clip );
64
65 extern GLvector4f *
66 _mesa_x86_cliptest_points4_np( GLvector4f *clip_vec,
67 GLvector4f *proj_vec,
68 GLubyte clipMask[],
69 GLubyte *orMask,
70 GLubyte *andMask,
71 GLboolean viewport_z_clip );
72
73 extern void
74 _mesa_v16_x86_cliptest_points4( GLfloat *first_vert,
75 GLfloat *last_vert,
76 GLubyte *or_mask,
77 GLubyte *and_mask,
78 GLubyte *clip_mask,
79 GLboolean viewport_z_clip );
80
81 extern void
82 _mesa_v16_x86_general_xform( GLfloat *dest,
83 const GLfloat *m,
84 const GLfloat *src,
85 GLuint src_stride,
86 GLuint count );
87 #endif
88
89
90 #ifdef USE_X86_ASM
_mesa_init_x86_transform_asm(void)91 static void _mesa_init_x86_transform_asm( void )
92 {
93 ASSIGN_XFORM_GROUP( x86, 2 );
94 ASSIGN_XFORM_GROUP( x86, 3 );
95 ASSIGN_XFORM_GROUP( x86, 4 );
96
97 _mesa_clip_tab[4] = _mesa_x86_cliptest_points4;
98 _mesa_clip_np_tab[4] = _mesa_x86_cliptest_points4_np;
99
100 #ifdef DEBUG_MATH
101 _math_test_all_transform_functions( "x86" );
102 _math_test_all_cliptest_functions( "x86" );
103 #endif
104 }
105 #endif
106
107
_mesa_init_all_x86_transform_asm(void)108 void _mesa_init_all_x86_transform_asm( void )
109 {
110 _mesa_get_x86_features();
111
112 #ifdef USE_X86_ASM
113 if ( _mesa_x86_cpu_features ) {
114 _mesa_init_x86_transform_asm();
115 }
116
117 #ifdef USE_3DNOW_ASM
118 if (cpu_has_3dnow) {
119 _mesa_init_3dnow_transform_asm();
120 }
121 #endif
122
123 #ifdef USE_SSE_ASM
124 if ( cpu_has_xmm ) {
125 _mesa_init_sse_transform_asm();
126 }
127 #endif
128
129 #endif
130 }
131