common_x86.c revision afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1c
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> 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "common_x86asm.h" 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgint gl_x86_cpu_features = 0; 38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgvoid gl_init_all_x86_asm (void) 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_X86_ASM 43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_x86_cpu_features = gl_identify_x86_cpu_features (); 44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_GenuineIntel) { 46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg printf ("GenuineIntel cpu detected.\n"); 47afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 48afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_init_x86_asm_transforms (); 49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 50afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 51afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_MMX_ASM 52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_MMX) { 53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_MMX" ); 54afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg printf ("MMX cpu detected.\n"); 56afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 57afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_x86_cpu_features &= (!GL_CPU_MMX); 58afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 59afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 60afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 61afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 62afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 63afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_3DNOW_ASM 64afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_3Dnow) { 65afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_3DNOW" ); 66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 67afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg printf ("3Dnow cpu detected.\n"); 68afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_init_3dnow_asm_transforms (); 69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 70afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_x86_cpu_features &= (!GL_CPU_3Dnow); 71afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 73afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 76afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 77afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 78