1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef DO_DEBUG_VERTS
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DO_DEBUG_VERTS 0
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef PRINT_VERTEX
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PRINT_VERTEX(x)
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(USE_X86_ASM)
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define COPY_DWORDS( j, vb, vertsize, v )				\
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo {									\
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	int __tmp;							\
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	__asm__ __volatile__( "rep ; movsl"				\
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			      : "=%c" (j), "=D" (vb), "=S" (__tmp)	\
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			      : "0" (vertsize),				\
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			        "D" ((long)vb),				\
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			        "S" ((long)v) );			\
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0)
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#elif defined(HAVE_LE32_VERTS)
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define COPY_DWORDS( j, vb, vertsize, v )				\
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo {									\
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for ( j = 0 ; j < vertsize ; j++ )					\
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      vb[j] = CPU_TO_LE32(((GLuint *)v)[j]);				\
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   vb += vertsize;							\
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0)
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define COPY_DWORDS( j, vb, vertsize, v )				\
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdo {									\
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for ( j = 0 ; j < vertsize ; j++ )					\
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      vb[j] = ((GLuint *)v)[j];						\
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   vb += vertsize;							\
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} while (0)
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if HAVE_QUADS
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(quad)( CTX_ARG,
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v0,
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v1,
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v2,
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v3 )
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertsize = GET_VERTEX_DWORDS();
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint *vb = (GLuint *)ALLOC_VERTS( 4, vertsize);
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint j;
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (DO_DEBUG_VERTS) {
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      fprintf(stderr, "%s\n", __FUNCTION__);
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v0);
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v1);
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v2);
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v3);
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v0 );
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v1 );
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v2 );
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v3 );
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(quad)( CTX_ARG,
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v0,
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v1,
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v2,
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v3 )
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertsize = GET_VERTEX_DWORDS();
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint *vb = (GLuint *)ALLOC_VERTS(  6, vertsize);
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint j;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (DO_DEBUG_VERTS) {
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      fprintf(stderr, "%s\n", __FUNCTION__);
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v0);
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v1);
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v2);
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v3);
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v0 );
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v1 );
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v3 );
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v1 );
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v2 );
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v3 );
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(triangle)( CTX_ARG,
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				    VERTEX *v0,
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				    VERTEX *v1,
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				    VERTEX *v2 )
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertsize = GET_VERTEX_DWORDS();
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint *vb = (GLuint *)ALLOC_VERTS( 3, vertsize);
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint j;
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (DO_DEBUG_VERTS) {
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      fprintf(stderr, "%s\n", __FUNCTION__);
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v0);
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v1);
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(v2);
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v0 );
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v1 );
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v2 );
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if HAVE_LINES
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(line)( CTX_ARG,
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v0,
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				VERTEX *v1 )
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertsize = GET_VERTEX_DWORDS();
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint *vb = (GLuint *)ALLOC_VERTS( 2, vertsize);
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint j;
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v0 );
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v1 );
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if HAVE_POINTS
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __inline void TAG(point)( CTX_ARG,
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				 VERTEX *v0 )
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertsize = GET_VERTEX_DWORDS();
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint *vb = (GLuint *)ALLOC_VERTS( 1, vertsize);
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int j;
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   COPY_DWORDS( j, vb, vertsize, v0 );
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void TAG(fast_clipped_poly)( struct gl_context *ctx, const GLuint *elts,
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				    GLuint n )
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   LOCAL_VARS
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint vertsize = GET_VERTEX_DWORDS();
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint *vb = (GLuint *)ALLOC_VERTS( (n-2) * 3, vertsize );
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const GLuint *start = (const GLuint *)VERT(elts[0]);
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLuint i,j;
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (DO_DEBUG_VERTS) {
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      fprintf(stderr, "%s\n", __FUNCTION__);
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(VERT(elts[0]));
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PRINT_VERTEX(VERT(elts[1]));
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (i = 2 ; i < n ; i++) {
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (DO_DEBUG_VERTS) {
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 PRINT_VERTEX(VERT(elts[i]));
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      COPY_DWORDS( j, vb, vertsize, VERT(elts[i-1]) );
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      COPY_DWORDS( j, vb, vertsize, VERT(elts[i]) );
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      COPY_DWORDS( j, vb, vertsize, start );
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
165