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