1/****************************************************************************
2*
3*						Realmode X86 Emulator Library
4*
5*            	Copyright (C) 1996-1999 SciTech Software, Inc.
6* 				     Copyright (C) David Mosberger-Tang
7* 					   Copyright (C) 1999 Egbert Eich
8*
9*  ========================================================================
10*
11*  Permission to use, copy, modify, distribute, and sell this software and
12*  its documentation for any purpose is hereby granted without fee,
13*  provided that the above copyright notice appear in all copies and that
14*  both that copyright notice and this permission notice appear in
15*  supporting documentation, and that the name of the authors not be used
16*  in advertising or publicity pertaining to distribution of the software
17*  without specific, written prior permission.  The authors makes no
18*  representations about the suitability of this software for any purpose.
19*  It is provided "as is" without express or implied warranty.
20*
21*  THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
22*  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
23*  EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
24*  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
25*  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
26*  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
27*  PERFORMANCE OF THIS SOFTWARE.
28*
29*  ========================================================================
30*
31* Language:		ANSI C
32* Environment:	Any
33* Developer:    Kendall Bennett
34*
35* Description:  Header file for primitive operation functions.
36*
37****************************************************************************/
38
39#ifndef __X86EMU_PRIM_OPS_H
40#define __X86EMU_PRIM_OPS_H
41
42#ifdef  __cplusplus
43extern "C" {            			/* Use "C" linkage when in C++ mode */
44#endif
45
46u16     aaa_word (u16 d);
47u16     aas_word (u16 d);
48u16     aad_word (u16 d);
49u16     aam_word (u8 d);
50u8      adc_byte (u8 d, u8 s);
51u16     adc_word (u16 d, u16 s);
52u32     adc_long (u32 d, u32 s);
53u8      add_byte (u8 d, u8 s);
54u16     add_word (u16 d, u16 s);
55u32     add_long (u32 d, u32 s);
56u8      and_byte (u8 d, u8 s);
57u16     and_word (u16 d, u16 s);
58u32     and_long (u32 d, u32 s);
59u8      cmp_byte (u8 d, u8 s);
60u16     cmp_word (u16 d, u16 s);
61u32     cmp_long (u32 d, u32 s);
62u8      daa_byte (u8 d);
63u8      das_byte (u8 d);
64u8      dec_byte (u8 d);
65u16     dec_word (u16 d);
66u32     dec_long (u32 d);
67u8      inc_byte (u8 d);
68u16     inc_word (u16 d);
69u32     inc_long (u32 d);
70u8      or_byte (u8 d, u8 s);
71u16     or_word (u16 d, u16 s);
72u32     or_long (u32 d, u32 s);
73u8      neg_byte (u8 s);
74u16     neg_word (u16 s);
75u32     neg_long (u32 s);
76u8      not_byte (u8 s);
77u16     not_word (u16 s);
78u32     not_long (u32 s);
79u8      rcl_byte (u8 d, u8 s);
80u16     rcl_word (u16 d, u8 s);
81u32     rcl_long (u32 d, u8 s);
82u8      rcr_byte (u8 d, u8 s);
83u16     rcr_word (u16 d, u8 s);
84u32     rcr_long (u32 d, u8 s);
85u8      rol_byte (u8 d, u8 s);
86u16     rol_word (u16 d, u8 s);
87u32     rol_long (u32 d, u8 s);
88u8      ror_byte (u8 d, u8 s);
89u16     ror_word (u16 d, u8 s);
90u32     ror_long (u32 d, u8 s);
91u8      shl_byte (u8 d, u8 s);
92u16     shl_word (u16 d, u8 s);
93u32     shl_long (u32 d, u8 s);
94u8      shr_byte (u8 d, u8 s);
95u16     shr_word (u16 d, u8 s);
96u32     shr_long (u32 d, u8 s);
97u8      sar_byte (u8 d, u8 s);
98u16     sar_word (u16 d, u8 s);
99u32     sar_long (u32 d, u8 s);
100u16     shld_word (u16 d, u16 fill, u8 s);
101u32     shld_long (u32 d, u32 fill, u8 s);
102u16     shrd_word (u16 d, u16 fill, u8 s);
103u32     shrd_long (u32 d, u32 fill, u8 s);
104u8      sbb_byte (u8 d, u8 s);
105u16     sbb_word (u16 d, u16 s);
106u32     sbb_long (u32 d, u32 s);
107u8      sub_byte (u8 d, u8 s);
108u16     sub_word (u16 d, u16 s);
109u32     sub_long (u32 d, u32 s);
110void    test_byte (u8 d, u8 s);
111void    test_word (u16 d, u16 s);
112void    test_long (u32 d, u32 s);
113u8      xor_byte (u8 d, u8 s);
114u16     xor_word (u16 d, u16 s);
115u32     xor_long (u32 d, u32 s);
116void    imul_byte (u8 s);
117void    imul_word (u16 s);
118void    imul_long (u32 s);
119void 	imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s);
120void    mul_byte (u8 s);
121void    mul_word (u16 s);
122void    mul_long (u32 s);
123void    idiv_byte (u8 s);
124void    idiv_word (u16 s);
125void    idiv_long (u32 s);
126void    div_byte (u8 s);
127void    div_word (u16 s);
128void    div_long (u32 s);
129void    ins (int size);
130void    outs (int size);
131u16     mem_access_word (int addr);
132void    push_word (u16 w);
133void    push_long (u32 w);
134u16     pop_word (void);
135u32		pop_long (void);
136
137#ifdef  __cplusplus
138}                       			/* End of "C" linkage for C++   	*/
139#endif
140
141#endif /* __X86EMU_PRIM_OPS_H */
142