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