Home | History | Annotate | Download | only in hermes
      1 /*
      2    Header definitions for the MMX routines for the HERMES library
      3    Copyright (c) 1998 Christian Nentwich (c.nentwich (at) 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 #include "SDL_config.h"
     10 
     11 #ifndef __HERMES_HEAD_MMX__
     12 #define __HERMES_HEAD_MMX__
     13 
     14 
     15 /* If you cannot stand ifdefs, then please do not look into this file, it's
     16    going to end your life :) */
     17 
     18 #ifdef X86_ASSEMBLER
     19 
     20 
     21 #ifdef __cplusplus
     22 extern "C" {
     23 #endif
     24 
     25 void STACKCALL ConvertMMX(HermesConverterInterface *);
     26 
     27 void STACKCALL ClearMMX_32(HermesClearInterface *);
     28 void STACKCALL ClearMMX_24(HermesClearInterface *);
     29 void STACKCALL ClearMMX_16(HermesClearInterface *);
     30 void STACKCALL ClearMMX_8(HermesClearInterface *);
     31 
     32 void ConvertMMXpII32_24RGB888();
     33 void ConvertMMXpII32_16RGB565();
     34 void ConvertMMXpII32_16BGR565();
     35 void ConvertMMXpII32_16RGB555();
     36 void ConvertMMXpII32_16BGR565();
     37 void ConvertMMXpII32_16BGR555();
     38 
     39 void ConvertMMXp32_16RGB555();
     40 
     41 #ifdef __cplusplus
     42 }
     43 #endif
     44 
     45 
     46 
     47 /* Fix the underscore business with ELF compilers */
     48 
     49 #if defined(__ELF__) && defined(__GNUC__)
     50   #ifdef __cplusplus
     51   extern "C" {
     52   #endif
     53 
     54   extern void _ConvertMMX(HermesConverterInterface *);
     55   extern void _ConvertMMXpII32_24RGB888();
     56   extern void _ConvertMMXpII32_16RGB565();
     57   extern void _ConvertMMXpII32_16BGR565();
     58   extern void _ConvertMMXpII32_16RGB555();
     59   extern void _ConvertMMXpII32_16BGR555();
     60 
     61   #define ConvertMMX _ConvertMMX
     62   #define ConvertMMXpII32_24RGB888 _ConvertMMXpII32_24RGB888
     63   #define ConvertMMXpII32_16RGB565 _ConvertMMXpII32_16RGB565
     64   #define ConvertMMXpII32_16BGR565 _ConvertMMXpII32_16BGR565
     65   #define ConvertMMXpII32_16RGB555 _ConvertMMXpII32_16RGB555
     66   #define ConvertMMXpII32_16BGR555 _ConvertMMXpII32_16BGR555
     67 
     68   #ifdef __cplusplus
     69   }
     70   #endif
     71 
     72 #endif /* ELF and GNUC */
     73 
     74 
     75 
     76 
     77 /* Make it work with Watcom */
     78 #ifdef __WATCOMC__
     79 #pragma warning 601 9
     80 
     81 #pragma aux ConvertMMX "_*" modify [EAX EBX ECX EDX ESI EDI]
     82 
     83 #pragma aux ClearMMX_32 "_*" modify [EAX EBX ECX EDX ESI EDI]
     84 #pragma aux ClearMMX_24 "_*" modify [EAX EBX ECX EDX ESI EDI]
     85 #pragma aux ClearMMX_16 "_*" modify [EAX EBX ECX EDX ESI EDI]
     86 #pragma aux ClearMMX_8 "_*" modify [EAX EBX ECX EDX ESI EDI]
     87 
     88 #pragma aux ConvertMMXpII32_24RGB888 "_*"
     89 #pragma aux ConvertMMXpII32_16RGB565 "_*"
     90 #pragma aux ConvertMMXpII32_16BGR565 "_*"
     91 #pragma aux ConvertMMXpII32_16RGB555 "_*"
     92 #pragma aux ConvertMMXpII32_16BGR555 "_*"
     93 #pragma aux ConvertMMXp32_16RGB555 "_*"
     94 
     95 #endif /* WATCOM */
     96 
     97 #endif /* X86_ASSEMBLER */
     98 
     99 
    100 #endif
    101