common_x86.c revision da54ffc852996f94dcf46b0cdc40c5ff12b55496
1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Version: 3.1 5afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Copyright (C) 1999 Brian Paul All Rights Reserved. 7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"), 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions: 14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software. 17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Check CPU capabilities & initialize optimized funtions for this particular 29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * processor. 30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Written by Holger Waechtler <holger@akaflieg.extern.tu-berlin.de> 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include <stdlib.h> 352be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell#include <stdio.h> 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "common_x86asm.h" 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgint gl_x86_cpu_features = 0; 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgvoid gl_init_all_x86_asm (void) 42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_X86_ASM 44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_x86_cpu_features = gl_identify_x86_cpu_features (); 45da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell gl_x86_cpu_features |= GL_CPU_AnyX86; 46da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell 47da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell if (getenv("MESA_NO_ASM") != 0) 48da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell gl_x86_cpu_features = 0; 49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 50afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_GenuineIntel) { 512be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell fprintf (stderr, "GenuineIntel cpu detected.\n"); 52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 54da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell if (gl_x86_cpu_features) { 55da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell gl_init_x86_asm_transforms (); 56da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell } 57afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 58afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_MMX_ASM 59afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_MMX) { 60afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_MMX" ); 61afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 622be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell fprintf (stderr, "MMX cpu detected.\n"); 63afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 644f738b4c1010ddf2e1dc404c198137abeef117d4Josh Vanderhoof gl_x86_cpu_features &= (~GL_CPU_MMX); 65afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 67afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 68afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 70afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_3DNOW_ASM 71afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_3Dnow) { 72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_3DNOW" ); 73afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 742be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell fprintf (stderr, "3Dnow cpu detected.\n"); 75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_init_3dnow_asm_transforms (); 76afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 774f738b4c1010ddf2e1dc404c198137abeef117d4Josh Vanderhoof gl_x86_cpu_features &= (~GL_CPU_3Dnow); 78afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 79afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 80afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 81afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 82afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 83afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 84afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 85