src/hermes/x86_main.asm
author Sam Lantinga <slouken@libsdl.org>
Sun, 21 Sep 2003 18:32:04 +0000
changeset 720 f90d80d68071
parent 0 74212992fb08
child 1166 da33b7e6d181
permissions -rw-r--r--
N Sep 17 8791 Sam Lantinga Re: tks source released
Date: Sun, 07 Sep 2003 02:51:58 +0200
From: Stephane Marchesin
Subject: [SDL] Two little patches

Compiling SDL with a recent gcc (gcc 3.3.1, 3.3 doesn't have this
behaviour) gives some nasty warnings :

SDL_blit_A.c: In function `BlitRGBtoRGBSurfaceAlpha128MMX':
SDL_blit_A.c:223: warning: integer constant is too large for "long" type
SDL_blit_A.c:225: warning: integer constant is too large for "long" type
SDL_blit_A.c:227: warning: integer constant is too large for "long" type
[...]

The first attached patch (longlongfix.patch) tells gcc to really treat
those constants as unsigned long long and not long.

The second patch (nasinclude.patch) fixes an include problem I had while
compiling nas audio : when the <audio/audiolib.h> file lies in
/usr/X11R6/include, a -I/usr/X11R6/include option is needed or the file
isn't found.
     1 ;
     2 ; x86 format converters for HERMES
     3 ; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
     4 ; This source code is licensed under the GNU LGPL
     5 ; 
     6 ; Please refer to the file COPYING.LIB contained in the distribution for
     7 ; licensing conditions		
     8 ;
     9 ; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission
    10 ; 
    11 
    12 BITS 32
    13 
    14 GLOBAL _ConvertX86
    15 GLOBAL _x86return
    16 	
    17 GLOBAL _Hermes_X86_CPU
    18 
    19 
    20 SECTION .data
    21 	
    22 cpu_flags dd 0
    23 	
    24 		
    25 SECTION .text
    26 		
    27 ;; _ConvertX86:	 
    28 ;; [ESP+8] ConverterInfo*
    29 ;; --------------------------------------------------------------------------
    30 ;; ConverterInfo (ebp+..)
    31 ;;   0:	void *s_pixels
    32 ;;   4:	int s_width
    33 ;;   8:	int s_height
    34 ;;  12:	int s_add
    35 ;;  16:	void *d_pixels
    36 ;;  20:	int d_width
    37 ;;  24:	int d_height
    38 ;;  28:	int d_add
    39 ;;  32:	void (*converter_function)() 
    40 ;;  36: int32 *lookup
    41 	
    42 _ConvertX86:
    43 	push ebp
    44 	mov ebp,esp
    45 
    46 ; Save the registers used by the blitters, necessary for optimized code
    47 	pusha
    48 
    49 	mov eax,[ebp+8]
    50 
    51         cmp dword [eax+4],BYTE 0
    52 	je endconvert
    53 	
    54 	mov ebp,eax
    55 	
    56 	mov esi,[ebp+0]
    57 	mov edi,[ebp+16]
    58 	
    59 y_loop:	
    60 	mov ecx,[ebp+4]
    61 
    62 	jmp [ebp+32]
    63 
    64 _x86return:	
    65 	add esi,[ebp+12]
    66 	add edi,[ebp+28]
    67 	
    68 	dec dword  [ebp+8]
    69 	jnz y_loop
    70 
    71 ; Restore the registers used by the blitters, necessary for optimized code
    72 	popa
    73 	
    74 	pop ebp
    75 
    76 endconvert:	
    77 	ret		
    78 
    79 
    80 
    81 ;; Hermes_X86_CPU returns the CPUID flags in eax
    82 	
    83 _Hermes_X86_CPU:
    84 	pushfd
    85 	pop eax
    86 	
    87 	mov ecx,eax
    88 	
    89 	xor eax,040000h
    90 	push eax
    91 	
    92 	popfd
    93 	pushfd
    94 
    95 	pop eax
    96 	xor eax,ecx
    97 	jz .L1			; Processor is 386
    98 
    99 	push ecx
   100 	popfd
   101 
   102 	mov eax,ecx
   103 	xor eax,200000h
   104 
   105 	push eax
   106 	popfd
   107 	pushfd
   108 
   109 	pop eax
   110 	xor eax,ecx
   111 	je .L1
   112 	
   113 	pusha
   114 	
   115 	mov eax,1
   116 	cpuid
   117 
   118 	mov [cpu_flags],edx
   119 
   120 	popa
   121 
   122 	mov eax,[cpu_flags]
   123 
   124 .L1:	
   125 	ret