1/*
2   Header definitions for the x86 routines for the HERMES library
3   Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
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
10#ifndef __HERMES_HEAD_X86__
11#define __HERMES_HEAD_X86__
12
13
14#ifdef X86_ASSEMBLER
15
16/* If you can't stand IFDEFS, then close your eyes now, please :) */
17
18/* Ok, we start with normal function definitions */
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23
24void STACKCALL ConvertX86(HermesConverterInterface *);
25void STACKCALL ClearX86_32(HermesClearInterface *);
26void STACKCALL ClearX86_24(HermesClearInterface *);
27void STACKCALL ClearX86_16(HermesClearInterface *);
28void STACKCALL ClearX86_8(HermesClearInterface *);
29
30int STACKCALL Hermes_X86_CPU();
31
32void ConvertX86p32_32BGR888();
33void ConvertX86p32_32RGBA888();
34void ConvertX86p32_32BGRA888();
35void ConvertX86p32_24RGB888();
36void ConvertX86p32_24BGR888();
37void ConvertX86p32_16RGB565();
38void ConvertX86p32_16BGR565();
39void ConvertX86p32_16RGB555();
40void ConvertX86p32_16BGR555();
41void ConvertX86p32_8RGB332();
42
43void ConvertX86p16_32RGB888();
44void ConvertX86p16_32BGR888();
45void ConvertX86p16_32RGBA888();
46void ConvertX86p16_32BGRA888();
47void ConvertX86p16_24RGB888();
48void ConvertX86p16_24BGR888();
49void ConvertX86p16_16BGR565();
50void ConvertX86p16_16RGB555();
51void ConvertX86p16_16BGR555();
52void ConvertX86p16_8RGB332();
53
54void CopyX86p_4byte();
55void CopyX86p_3byte();
56void CopyX86p_2byte();
57void CopyX86p_1byte();
58
59void ConvertX86pI8_32();
60void ConvertX86pI8_24();
61void ConvertX86pI8_16();
62
63extern int ConvertX86p16_32RGB888_LUT_X86[512];
64extern int ConvertX86p16_32BGR888_LUT_X86[512];
65extern int ConvertX86p16_32RGBA888_LUT_X86[512];
66extern int ConvertX86p16_32BGRA888_LUT_X86[512];
67
68#ifdef __cplusplus
69}
70#endif
71
72
73
74
75/* Now fix up the ELF underscore problem */
76
77#if (defined(__ELF__) && defined(__GNUC__)) || defined(__SUNPRO_C)
78  #ifdef __cplusplus
79  extern "C" {
80  #endif
81
82  extern int _Hermes_X86_CPU();
83
84  extern void _ConvertX86(HermesConverterInterface *);
85
86  extern void _ConvertX86p32_32BGR888();
87  extern void _ConvertX86p32_32RGBA888();
88  extern void _ConvertX86p32_32BGRA888();
89  extern void _ConvertX86p32_24RGB888();
90  extern void _ConvertX86p32_24BGR888();
91  extern void _ConvertX86p32_16RGB565();
92  extern void _ConvertX86p32_16BGR565();
93  extern void _ConvertX86p32_16RGB555();
94  extern void _ConvertX86p32_16BGR555();
95  extern void _ConvertX86p32_8RGB332();
96
97  extern void _ConvertX86p16_16BGR565();
98  extern void _ConvertX86p16_16RGB555();
99  extern void _ConvertX86p16_16BGR555();
100  extern void _ConvertX86p16_8RGB332();
101
102
103  #define Hermes_X86_CPU _Hermes_X86_CPU
104
105  #define ConvertX86 _ConvertX86
106
107  #define ConvertX86p32_32BGR888 _ConvertX86p32_32BGR888
108  #define ConvertX86p32_32RGBA888 _ConvertX86p32_32RGBA888
109  #define ConvertX86p32_32BGRA888 _ConvertX86p32_32BGRA888
110  #define ConvertX86p32_24RGB888 _ConvertX86p32_24RGB888
111  #define ConvertX86p32_24BGR888 _ConvertX86p32_24BGR888
112  #define ConvertX86p32_16RGB565 _ConvertX86p32_16RGB565
113  #define ConvertX86p32_16BGR565 _ConvertX86p32_16BGR565
114  #define ConvertX86p32_16RGB555 _ConvertX86p32_16RGB555
115  #define ConvertX86p32_16BGR555 _ConvertX86p32_16BGR555
116  #define ConvertX86p32_8RGB332 _ConvertX86p32_8RGB332
117
118  #define ConvertX86p16_16BGR565 _ConvertX86p16_16BGR565
119  #define ConvertX86p16_16RGB555 _ConvertX86p16_16RGB555
120  #define ConvertX86p16_16BGR555 _ConvertX86p16_16BGR555
121  #define ConvertX86p16_8RGB332 _ConvertX86p16_8RGB332
122
123
124  #ifdef __cplusplus
125  }
126  #endif
127
128#endif /* ELF & GNU */
129
130
131
132/* Make it run with WATCOM C */
133#ifdef __WATCOMC__
134#pragma warning 601 9
135
136#pragma aux Hermes_X86_CPU "_*"
137
138#pragma aux ConvertX86 "_*" modify [EAX EBX ECX EDX ESI EDI]
139#pragma aux ClearX86_32 "_*" modify [EAX EBX ECX EDX ESI EDI]
140#pragma aux ClearX86_24 "_*" modify [EAX EBX ECX EDX ESI EDI]
141#pragma aux ClearX86_16 "_*" modify [EAX EBX ECX EDX ESI EDI]
142#pragma aux ClearX86_8 "_*" modify [EAX EBX ECX EDX ESI EDI]
143
144#pragma aux ConvertX86p32_32BGR888 "_*"
145#pragma aux ConvertX86p32_32RGBA888 "_*"
146#pragma aux ConvertX86p32_32BGRA888 "_*"
147#pragma aux ConvertX86p32_24RGB888 "_*"
148#pragma aux ConvertX86p32_24BGR888 "_*"
149#pragma aux ConvertX86p32_16RGB565 "_*"
150#pragma aux ConvertX86p32_16BGR565 "_*"
151#pragma aux ConvertX86p32_16RGB555 "_*"
152#pragma aux ConvertX86p32_16BGR555 "_*"
153#pragma aux ConvertX86p32_8RGB332 "_*"
154
155#pragma aux ConvertX86p16_32RGB888 "_*"
156#pragma aux ConvertX86p16_32BGR888 "_*"
157#pragma aux ConvertX86p16_32RGBA888 "_*"
158#pragma aux ConvertX86p16_32BGRA888 "_*"
159#pragma aux ConvertX86p16_24RGB888 "_*"
160#pragma aux ConvertX86p16_24BGR888 "_*"
161#pragma aux ConvertX86p16_16BGR565 "_*"
162#pragma aux ConvertX86p16_16RGB555 "_*"
163#pragma aux ConvertX86p16_16BGR555 "_*"
164#pragma aux ConvertX86p16_8RGB332 "_*"
165
166#pragma aux CopyX86p_4byte "_*"
167#pragma aux CopyX86p_3byte "_*"
168#pragma aux CopyX86p_2byte "_*"
169#pragma aux CopyX86p_1byte "_*"
170
171#pragma aux ConvertX86pI8_32 "_*"
172#pragma aux ConvertX86pI8_24 "_*"
173#pragma aux ConvertX86pI8_16 "_*"
174
175#pragma aux ConvertX86p16_32RGB888_LUT_X86 "_*"
176#pragma aux ConvertX86p16_32BGR888_LUT_X86 "_*"
177#pragma aux ConvertX86p16_32RGBA888_LUT_X86 "_*"
178#pragma aux ConvertX86p16_32BGRA888_LUT_X86 "_*"
179
180#endif /* __WATCOMC__ */
181
182
183#endif /* X86_ASSEMBLER */
184
185
186#endif
187