common_x86.c revision d8aec9b55b0180384e96cddff48fc48751bbc320
1d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul/* $Id: common_x86.c,v 1.6 2000/01/25 17:04:47 brianp Exp $ */ 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library 5d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul * Version: 3.3 6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 7d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul * Copyright (C) 1999-2000 Brian Paul All Rights Reserved. 8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"), 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the 14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions: 15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included 17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software. 18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Check CPU capabilities & initialize optimized funtions for this particular 30afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * processor. 31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Written by Holger Waechtler <holger@akaflieg.extern.tu-berlin.de> 336630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann * Changed by Andre Werthmann <wertmann@cs.uni-potsdam.de> for using the 346630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann * new Katmai functions 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include <stdlib.h> 382be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell#include <stdio.h> 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "common_x86asm.h" 40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgint gl_x86_cpu_features = 0; 42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 43d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paulstatic void message(const char *msg) 44d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul{ 45d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul if (getenv("MESA_DEBUG")) 46d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul fprintf(stderr, "%s\n", msg); 47d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul} 48d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul 49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 50afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgvoid gl_init_all_x86_asm (void) 51afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_X86_ASM 53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_x86_cpu_features = gl_identify_x86_cpu_features (); 54da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell gl_x86_cpu_features |= GL_CPU_AnyX86; 55da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell 56da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell if (getenv("MESA_NO_ASM") != 0) 57da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell gl_x86_cpu_features = 0; 58afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 59afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_GenuineIntel) { 60d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul message("GenuineIntel cpu detected."); 61afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 62afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 63da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell if (gl_x86_cpu_features) { 64d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul gl_init_x86_asm_transforms (); 65da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell } 66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 67afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_MMX_ASM 68afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_MMX) { 69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_MMX" ); 70afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 71d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul message("MMX cpu detected."); 72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 734f738b4c1010ddf2e1dc404c198137abeef117d4Josh Vanderhoof gl_x86_cpu_features &= (~GL_CPU_MMX); 74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 76afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 77afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 78d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul 79afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_3DNOW_ASM 80afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_3Dnow) { 81afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_3DNOW" ); 82afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 83d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul message("3Dnow cpu detected."); 84afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_init_3dnow_asm_transforms (); 85afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 864f738b4c1010ddf2e1dc404c198137abeef117d4Josh Vanderhoof gl_x86_cpu_features &= (~GL_CPU_3Dnow); 87afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 88afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 89afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 90afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 916630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann 926630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann#ifdef USE_KATMAI_ASM 936630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann if (gl_x86_cpu_features & GL_CPU_Katmai) { 946630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann char *s = getenv( "MESA_NO_KATMAI" ); 956630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann if (s == NULL) { 96d8aec9b55b0180384e96cddff48fc48751bbc320Brian Paul message("Katmai cpu detected."); 976630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann gl_init_katmai_asm_transforms (); 986630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann } else { 996630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann gl_x86_cpu_features &= (~GL_CPU_Katmai); 1006630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann } 1016630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann } 1026630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann#endif 1036630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann 104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 107