19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*
29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall   Header definitions for the x86 routines for the HERMES library
39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall   Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
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 Hall#ifndef __HERMES_HEAD_X86__
119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define __HERMES_HEAD_X86__
129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifdef X86_ASSEMBLER
159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* If you can't stand IFDEFS, then close your eyes now, please :) */
179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Ok, we start with normal function definitions */
199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifdef __cplusplus
209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallextern "C" {
219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid STACKCALL ConvertX86(HermesConverterInterface *);
259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid STACKCALL ClearX86_32(HermesClearInterface *);
269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid STACKCALL ClearX86_24(HermesClearInterface *);
279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid STACKCALL ClearX86_16(HermesClearInterface *);
289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid STACKCALL ClearX86_8(HermesClearInterface *);
299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallint STACKCALL Hermes_X86_CPU();
319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_32BGR888();
339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_32RGBA888();
349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_32BGRA888();
359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_24RGB888();
369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_24BGR888();
379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_16RGB565();
389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_16BGR565();
399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_16RGB555();
409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_16BGR555();
419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p32_8RGB332();
429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_32RGB888();
449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_32BGR888();
459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_32RGBA888();
469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_32BGRA888();
479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_24RGB888();
489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_24BGR888();
499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_16BGR565();
509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_16RGB555();
519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_16BGR555();
529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86p16_8RGB332();
539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CopyX86p_4byte();
559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CopyX86p_3byte();
569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CopyX86p_2byte();
579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CopyX86p_1byte();
589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86pI8_32();
609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86pI8_24();
619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid ConvertX86pI8_16();
629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallextern int ConvertX86p16_32RGB888_LUT_X86[512];
649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallextern int ConvertX86p16_32BGR888_LUT_X86[512];
659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallextern int ConvertX86p16_32RGBA888_LUT_X86[512];
669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallextern int ConvertX86p16_32BGRA888_LUT_X86[512];
679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifdef __cplusplus
699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Now fix up the ELF underscore problem */
769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#if (defined(__ELF__) && defined(__GNUC__)) || defined(__SUNPRO_C)
789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #ifdef __cplusplus
799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern "C" {
809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #endif
819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern int _Hermes_X86_CPU();
839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86(HermesConverterInterface *);
859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_32BGR888();
879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_32RGBA888();
889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_32BGRA888();
899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_24RGB888();
909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_24BGR888();
919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_16RGB565();
929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_16BGR565();
939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_16RGB555();
949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_16BGR555();
959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p32_8RGB332();
969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p16_16BGR565();
989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p16_16RGB555();
999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p16_16BGR555();
1009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  extern void _ConvertX86p16_8RGB332();
1019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define Hermes_X86_CPU _Hermes_X86_CPU
1049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86 _ConvertX86
1069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_32BGR888 _ConvertX86p32_32BGR888
1089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_32RGBA888 _ConvertX86p32_32RGBA888
1099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_32BGRA888 _ConvertX86p32_32BGRA888
1109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_24RGB888 _ConvertX86p32_24RGB888
1119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_24BGR888 _ConvertX86p32_24BGR888
1129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_16RGB565 _ConvertX86p32_16RGB565
1139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_16BGR565 _ConvertX86p32_16BGR565
1149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_16RGB555 _ConvertX86p32_16RGB555
1159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_16BGR555 _ConvertX86p32_16BGR555
1169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p32_8RGB332 _ConvertX86p32_8RGB332
1179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p16_16BGR565 _ConvertX86p16_16BGR565
1199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p16_16RGB555 _ConvertX86p16_16RGB555
1209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p16_16BGR555 _ConvertX86p16_16BGR555
1219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #define ConvertX86p16_8RGB332 _ConvertX86p16_8RGB332
1229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #ifdef __cplusplus
1259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  }
1269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall  #endif
1279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif /* ELF & GNU */
1299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Make it run with WATCOM C */
1339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifdef __WATCOMC__
1349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma warning 601 9
1359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux Hermes_X86_CPU "_*"
1379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86 "_*" modify [EAX EBX ECX EDX ESI EDI]
1399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ClearX86_32 "_*" modify [EAX EBX ECX EDX ESI EDI]
1409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ClearX86_24 "_*" modify [EAX EBX ECX EDX ESI EDI]
1419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ClearX86_16 "_*" modify [EAX EBX ECX EDX ESI EDI]
1429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ClearX86_8 "_*" modify [EAX EBX ECX EDX ESI EDI]
1439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_32BGR888 "_*"
1459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_32RGBA888 "_*"
1469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_32BGRA888 "_*"
1479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_24RGB888 "_*"
1489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_24BGR888 "_*"
1499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_16RGB565 "_*"
1509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_16BGR565 "_*"
1519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_16RGB555 "_*"
1529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_16BGR555 "_*"
1539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p32_8RGB332 "_*"
1549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32RGB888 "_*"
1569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32BGR888 "_*"
1579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32RGBA888 "_*"
1589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32BGRA888 "_*"
1599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_24RGB888 "_*"
1609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_24BGR888 "_*"
1619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_16BGR565 "_*"
1629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_16RGB555 "_*"
1639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_16BGR555 "_*"
1649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_8RGB332 "_*"
1659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux CopyX86p_4byte "_*"
1679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux CopyX86p_3byte "_*"
1689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux CopyX86p_2byte "_*"
1699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux CopyX86p_1byte "_*"
1709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86pI8_32 "_*"
1729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86pI8_24 "_*"
1739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86pI8_16 "_*"
1749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32RGB888_LUT_X86 "_*"
1769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32BGR888_LUT_X86 "_*"
1779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32RGBA888_LUT_X86 "_*"
1789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#pragma aux ConvertX86p16_32BGRA888_LUT_X86 "_*"
1799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif /* __WATCOMC__ */
1819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif /* X86_ASSEMBLER */
1849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
187