1;
2; mmx format converter main loops for HERMES
3; Some routines Copyright (c) 1998 Christian Nentwich (c.nentwich@cs.ucl.ac.uk)
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
10BITS 32
11
12%include "common.inc"
13
14SDL_FUNC _ConvertMMX
15
16SECTION .text
17		
18;; _ConvertMMX:	 
19;; [ESP+8] ConverterInfo*
20;; --------------------------------------------------------------------------
21;; ConverterInfo (ebp+..)
22;;   0:	void *s_pixels
23;;   4:	int s_width
24;;   8:	int s_height
25;;  12:	int s_add
26;;  16:	void *d_pixels
27;;  20:	int d_width
28;;  24:	int d_height
29;;  28:	int d_add
30;;  32:	void (*converter_function)() 
31;;  36: int32 *lookup
32	
33_ConvertMMX:
34	push ebp
35	mov ebp,esp
36
37; Save the registers used by the blitters, necessary for optimized code
38	pusha
39
40	mov eax,[ebp+8]
41
42        cmp dword [eax+4],BYTE 0
43	je endconvert
44	
45	mov ebp,eax
46	
47	mov esi,[ebp+0]
48	mov edi,[ebp+16]
49	
50y_loop:	
51	mov ecx,[ebp+4]
52
53	call [ebp+32]
54
55	add esi,[ebp+12]
56	add edi,[ebp+28]
57	
58	dec dword  [ebp+8]
59	jnz y_loop
60
61	
62; Restore the registers used by the blitters, necessary for optimized code
63	popa
64
65	pop ebp
66
67endconvert:
68	emms
69	
70	ret		
71
72%ifidn __OUTPUT_FORMAT__,elf32
73section .note.GNU-stack noalloc noexec nowrite progbits
74%endif
75