19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;
29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; mmx format converter main loops for HERMES
39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Some routines Copyright (c) 1998 Christian Nentwich (c.nentwich@cs.ucl.ac.uk)
49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; This source code is licensed under the GNU LGPL
59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; 
69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Please refer to the file COPYING.LIB contained in the distribution for
79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; licensing conditions		
89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;
99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallBITS 32
119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall%include "common.inc"
139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallSDL_FUNC _ConvertMMX
159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallSECTION .text
179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		
189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; _ConvertMMX:	 
199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; [ESP+8] ConverterInfo*
209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; --------------------------------------------------------------------------
219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; ConverterInfo (ebp+..)
229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;   0:	void *s_pixels
239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;   4:	int s_width
249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;   8:	int s_height
259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;  12:	int s_add
269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;  16:	void *d_pixels
279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;  20:	int d_width
289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;  24:	int d_height
299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;  28:	int d_add
309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;  32:	void (*converter_function)() 
319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;;  36: int32 *lookup
329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	
339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall_ConvertMMX:
349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	push ebp
359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	mov ebp,esp
369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Save the registers used by the blitters, necessary for optimized code
389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	pusha
399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	mov eax,[ebp+8]
419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall        cmp dword [eax+4],BYTE 0
439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	je endconvert
449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	
459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	mov ebp,eax
469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	
479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	mov esi,[ebp+0]
489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	mov edi,[ebp+16]
499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	
509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hally_loop:	
519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	mov ecx,[ebp+4]
529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	call [ebp+32]
549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	add esi,[ebp+12]
569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	add edi,[ebp+28]
579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	
589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	dec dword  [ebp+8]
599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	jnz y_loop
609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	
629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Restore the registers used by the blitters, necessary for optimized code
639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	popa
649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	pop ebp
669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallendconvert:
689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	emms
699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	
709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	ret		
719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall%ifidn __OUTPUT_FORMAT__,elf32
739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallsection .note.GNU-stack noalloc noexec nowrite progbits
749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall%endif
75