93d21161a987c7cef811e70dcc2cbd60aea6cb3e
[mesa.git] / src / mesa / x86 / common_x86.c
1 /* $Id: common_x86.c,v 1.7 2000/10/23 00:16:28 gareth Exp $ */
2
3 /*
4 * Mesa 3-D graphics library
5 * Version: 3.5
6 *
7 * Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27
28 /*
29 * Check CPU capabilities & initialize optimized funtions for this particular
30 * processor.
31 *
32 * Written by Holger Waechtler <holger@akaflieg.extern.tu-berlin.de>
33 * Changed by Andre Werthmann <wertmann@cs.uni-potsdam.de> for using the
34 * new Katmai functions.
35 */
36
37 #include <stdlib.h>
38 #include <stdio.h>
39
40 #include "common_x86_asm.h"
41
42
43 int gl_x86_cpu_features = 0;
44
45 /* No reason for this to be public.
46 */
47 extern int gl_identify_x86_cpu_features( void );
48
49
50 static void message( const char *msg )
51 {
52 if ( getenv( "MESA_DEBUG" ) ) {
53 fprintf( stderr, "%s\n", msg );
54 }
55 }
56
57
58 void gl_init_all_x86_transform_asm( void )
59 {
60 #ifdef USE_X86_ASM
61 gl_x86_cpu_features = gl_identify_x86_cpu_features();
62
63 if ( getenv( "MESA_NO_ASM" ) ) {
64 gl_x86_cpu_features = 0;
65 }
66
67 if ( gl_x86_cpu_features ) {
68 gl_init_x86_transform_asm();
69 }
70
71 #ifdef USE_MMX_ASM
72 if ( cpu_has_mmx ) {
73 if ( getenv( "MESA_NO_MMX" ) == 0 ) {
74 message( "MMX cpu detected." );
75 } else {
76 gl_x86_cpu_features &= ~(X86_FEATURE_MMX);
77 }
78 }
79 #endif
80
81 #ifdef USE_3DNOW_ASM
82 if ( cpu_has_3dnow ) {
83 if ( getenv( "MESA_NO_3DNOW" ) == 0 ) {
84 message( "3Dnow cpu detected." );
85 gl_init_3dnow_transform_asm();
86 } else {
87 gl_x86_cpu_features &= ~(X86_FEATURE_3DNOW);
88 }
89 }
90 #endif
91
92 #ifdef USE_KATMAI_ASM
93 if ( cpu_has_xmm ) {
94 if ( getenv( "MESA_NO_KATMAI" ) == 0 ) {
95 message( "Katmai cpu detected." );
96 gl_init_katmai_transform_asm();
97 } else {
98 gl_x86_cpu_features &= ~(X86_FEATURE_XMM);
99 }
100 }
101 #endif
102 #endif
103 }
104
105 /* Note: the above function must be called before this one, so that
106 * gl_x86_cpu_features gets correctly initialized.
107 */
108 void gl_init_all_x86_vertex_asm( void )
109 {
110 #ifdef USE_X86_ASM
111 if ( gl_x86_cpu_features ) {
112 gl_init_x86_vertex_asm();
113 }
114
115 #ifdef USE_3DNOW_ASM
116 if ( cpu_has_3dnow && getenv( "MESA_NO_3DNOW" ) == 0 ) {
117 gl_init_3dnow_vertex_asm();
118 }
119 #endif
120
121 #ifdef USE_KATMAI_ASM
122 if ( cpu_has_xmm && getenv( "MESA_NO_KATMAI" ) == 0 ) {
123 gl_init_katmai_vertex_asm();
124 }
125 #endif
126 #endif
127 }