common_x86.c revision 6630e2be01f41fb3b0fdf815e00a82d8e980f116
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> 326630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann * Changed by Andre Werthmann <wertmann@cs.uni-potsdam.de> for using the 336630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann * new Katmai functions 34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include <stdlib.h> 372be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell#include <stdio.h> 38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "common_x86asm.h" 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgint gl_x86_cpu_features = 0; 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgvoid gl_init_all_x86_asm (void) 44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 456630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann 46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_X86_ASM 47afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_x86_cpu_features = gl_identify_x86_cpu_features (); 48da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell gl_x86_cpu_features |= GL_CPU_AnyX86; 49da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell 50da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell if (getenv("MESA_NO_ASM") != 0) 51da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell gl_x86_cpu_features = 0; 52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_GenuineIntel) { 542be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell fprintf (stderr, "GenuineIntel cpu detected.\n"); 55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 56afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 57da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell if (gl_x86_cpu_features) { 586630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann gl_init_x86_asm_transforms (); 59da54ffc852996f94dcf46b0cdc40c5ff12b55496Keith Whitwell } 60afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 61afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_MMX_ASM 62afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_MMX) { 63afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_MMX" ); 64afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 652be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell fprintf (stderr, "MMX cpu detected.\n"); 66afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 674f738b4c1010ddf2e1dc404c198137abeef117d4Josh Vanderhoof gl_x86_cpu_features &= (~GL_CPU_MMX); 68afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 69afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 70afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 71afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 72afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef USE_3DNOW_ASM 73afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (gl_x86_cpu_features & GL_CPU_3Dnow) { 74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *s = getenv( "MESA_NO_3DNOW" ); 75afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (s == NULL) { 762be79c1aa2c168b7ecfb8289ce462ffb1de935ebKeith Whitwell fprintf (stderr, "3Dnow cpu detected.\n"); 77afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg gl_init_3dnow_asm_transforms (); 78afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } else { 794f738b4c1010ddf2e1dc404c198137abeef117d4Josh Vanderhoof gl_x86_cpu_features &= (~GL_CPU_3Dnow); 80afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 81afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 82afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 83afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 846630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann 856630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann#ifdef USE_KATMAI_ASM 866630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann if (gl_x86_cpu_features & GL_CPU_Katmai) { 876630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann char *s = getenv( "MESA_NO_KATMAI" ); 886630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann if (s == NULL) { 896630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann fprintf (stderr, "Katmai cpu detected.\n"); 906630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann gl_init_katmai_asm_transforms (); 916630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann } else { 926630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann gl_x86_cpu_features &= (~GL_CPU_Katmai); 936630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann } 946630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann } 956630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann#endif 966630e2be01f41fb3b0fdf815e00a82d8e980f116Andre Werthmann 97afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 98afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 99afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 100