146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/*
246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   Header definitions for the x86 routines for the HERMES library
346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   This source code is licensed under the GNU LGPL
546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   Please refer to the file COPYING.LIB contained in the distribution for
746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   licensing conditions
846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef __HERMES_HEAD_X86__
1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define __HERMES_HEAD_X86__
1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef X86_ASSEMBLER
1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* If you can't stand IFDEFS, then close your eyes now, please :) */
1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Ok, we start with normal function definitions */
1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef __cplusplus
2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern "C" {
2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid STACKCALL ConvertX86(HermesConverterInterface *);
2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid STACKCALL ClearX86_32(HermesClearInterface *);
2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid STACKCALL ClearX86_24(HermesClearInterface *);
2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid STACKCALL ClearX86_16(HermesClearInterface *);
2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid STACKCALL ClearX86_8(HermesClearInterface *);
2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint STACKCALL Hermes_X86_CPU();
3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_32BGR888();
3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_32RGBA888();
3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_32BGRA888();
3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_24RGB888();
3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_24BGR888();
3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_16RGB565();
3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_16BGR565();
3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_16RGB555();
4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_16BGR555();
4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p32_8RGB332();
4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_32RGB888();
4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_32BGR888();
4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_32RGBA888();
4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_32BGRA888();
4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_24RGB888();
4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_24BGR888();
4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_16BGR565();
5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_16RGB555();
5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_16BGR555();
5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86p16_8RGB332();
5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid CopyX86p_4byte();
5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid CopyX86p_3byte();
5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid CopyX86p_2byte();
5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid CopyX86p_1byte();
5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86pI8_32();
6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86pI8_24();
6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid ConvertX86pI8_16();
6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int ConvertX86p16_32RGB888_LUT_X86[512];
6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int ConvertX86p16_32BGR888_LUT_X86[512];
6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int ConvertX86p16_32RGBA888_LUT_X86[512];
6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int ConvertX86p16_32BGRA888_LUT_X86[512];
6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef __cplusplus
6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner}
7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Now fix up the ELF underscore problem */
7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__ELF__) && defined(__GNUC__)
7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #ifdef __cplusplus
7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern "C" {
8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #endif
8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern int _Hermes_X86_CPU();
8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86(HermesConverterInterface *);
8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_32BGR888();
8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_32RGBA888();
8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_32BGRA888();
8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_24RGB888();
9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_24BGR888();
9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_16RGB565();
9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_16BGR565();
9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_16RGB555();
9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_16BGR555();
9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p32_8RGB332();
9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p16_16BGR565();
9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p16_16RGB555();
9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p16_16BGR555();
10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  extern void _ConvertX86p16_8RGB332();
10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define Hermes_X86_CPU _Hermes_X86_CPU
10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86 _ConvertX86
10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_32BGR888 _ConvertX86p32_32BGR888
10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_32RGBA888 _ConvertX86p32_32RGBA888
10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_32BGRA888 _ConvertX86p32_32BGRA888
11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_24RGB888 _ConvertX86p32_24RGB888
11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_24BGR888 _ConvertX86p32_24BGR888
11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_16RGB565 _ConvertX86p32_16RGB565
11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_16BGR565 _ConvertX86p32_16BGR565
11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_16RGB555 _ConvertX86p32_16RGB555
11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_16BGR555 _ConvertX86p32_16BGR555
11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p32_8RGB332 _ConvertX86p32_8RGB332
11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p16_16BGR565 _ConvertX86p16_16BGR565
11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p16_16RGB555 _ConvertX86p16_16RGB555
12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p16_16BGR555 _ConvertX86p16_16BGR555
12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #define ConvertX86p16_8RGB332 _ConvertX86p16_8RGB332
12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #ifdef __cplusplus
12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  }
12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner  #endif
12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* ELF & GNU */
12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Make it run with WATCOM C */
13346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef __WATCOMC__
13446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma warning 601 9
13546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux Hermes_X86_CPU "_*"
13746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86 "_*" modify [EAX EBX ECX EDX ESI EDI]
13946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ClearX86_32 "_*" modify [EAX EBX ECX EDX ESI EDI]
14046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ClearX86_24 "_*" modify [EAX EBX ECX EDX ESI EDI]
14146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ClearX86_16 "_*" modify [EAX EBX ECX EDX ESI EDI]
14246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ClearX86_8 "_*" modify [EAX EBX ECX EDX ESI EDI]
14346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
14446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_32BGR888 "_*"
14546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_32RGBA888 "_*"
14646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_32BGRA888 "_*"
14746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_24RGB888 "_*"
14846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_24BGR888 "_*"
14946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_16RGB565 "_*"
15046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_16BGR565 "_*"
15146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_16RGB555 "_*"
15246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_16BGR555 "_*"
15346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p32_8RGB332 "_*"
15446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
15546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32RGB888 "_*"
15646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32BGR888 "_*"
15746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32RGBA888 "_*"
15846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32BGRA888 "_*"
15946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_24RGB888 "_*"
16046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_24BGR888 "_*"
16146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_16BGR565 "_*"
16246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_16RGB555 "_*"
16346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_16BGR555 "_*"
16446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_8RGB332 "_*"
16546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
16646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux CopyX86p_4byte "_*"
16746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux CopyX86p_3byte "_*"
16846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux CopyX86p_2byte "_*"
16946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux CopyX86p_1byte "_*"
17046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
17146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86pI8_32 "_*"
17246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86pI8_24 "_*"
17346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86pI8_16 "_*"
17446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
17546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32RGB888_LUT_X86 "_*"
17646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32BGR888_LUT_X86 "_*"
17746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32RGBA888_LUT_X86 "_*"
17846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#pragma aux ConvertX86p16_32BGRA888_LUT_X86 "_*"
17946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
18046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* __WATCOMC__ */
18146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
18246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
18346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* X86_ASSEMBLER */
18446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
18546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
18646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
187