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