00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef __X86EMU_PRIM_OPS_H
00040 #define __X86EMU_PRIM_OPS_H
00041
00042 u16 aaa_word (u16 d);
00043 u16 aas_word (u16 d);
00044 u16 aad_word (u16 d);
00045 u16 aam_word (u8 d);
00046 u8 adc_byte (u8 d, u8 s);
00047 u16 adc_word (u16 d, u16 s);
00048 u32 adc_long (u32 d, u32 s);
00049 u8 add_byte (u8 d, u8 s);
00050 u16 add_word (u16 d, u16 s);
00051 u32 add_long (u32 d, u32 s);
00052 u8 and_byte (u8 d, u8 s);
00053 u16 and_word (u16 d, u16 s);
00054 u32 and_long (u32 d, u32 s);
00055 u8 cmp_byte (u8 d, u8 s);
00056 u16 cmp_word (u16 d, u16 s);
00057 u32 cmp_long (u32 d, u32 s);
00058 u8 daa_byte (u8 d);
00059 u8 das_byte (u8 d);
00060 u8 dec_byte (u8 d);
00061 u16 dec_word (u16 d);
00062 u32 dec_long (u32 d);
00063 u8 inc_byte (u8 d);
00064 u16 inc_word (u16 d);
00065 u32 inc_long (u32 d);
00066 u8 or_byte (u8 d, u8 s);
00067 u16 or_word (u16 d, u16 s);
00068 u32 or_long (u32 d, u32 s);
00069 u8 neg_byte (u8 s);
00070 u16 neg_word (u16 s);
00071 u32 neg_long (u32 s);
00072 u8 not_byte (u8 s);
00073 u16 not_word (u16 s);
00074 u32 not_long (u32 s);
00075 u8 rcl_byte (u8 d, u8 s);
00076 u16 rcl_word (u16 d, u8 s);
00077 u32 rcl_long (u32 d, u8 s);
00078 u8 rcr_byte (u8 d, u8 s);
00079 u16 rcr_word (u16 d, u8 s);
00080 u32 rcr_long (u32 d, u8 s);
00081 u8 rol_byte (u8 d, u8 s);
00082 u16 rol_word (u16 d, u8 s);
00083 u32 rol_long (u32 d, u8 s);
00084 u8 ror_byte (u8 d, u8 s);
00085 u16 ror_word (u16 d, u8 s);
00086 u32 ror_long (u32 d, u8 s);
00087 u8 shl_byte (u8 d, u8 s);
00088 u16 shl_word (u16 d, u8 s);
00089 u32 shl_long (u32 d, u8 s);
00090 u8 shr_byte (u8 d, u8 s);
00091 u16 shr_word (u16 d, u8 s);
00092 u32 shr_long (u32 d, u8 s);
00093 u8 sar_byte (u8 d, u8 s);
00094 u16 sar_word (u16 d, u8 s);
00095 u32 sar_long (u32 d, u8 s);
00096 u16 shld_word (u16 d, u16 fill, u8 s);
00097 u32 shld_long (u32 d, u32 fill, u8 s);
00098 u16 shrd_word (u16 d, u16 fill, u8 s);
00099 u32 shrd_long (u32 d, u32 fill, u8 s);
00100 u8 sbb_byte (u8 d, u8 s);
00101 u16 sbb_word (u16 d, u16 s);
00102 u32 sbb_long (u32 d, u32 s);
00103 u8 sub_byte (u8 d, u8 s);
00104 u16 sub_word (u16 d, u16 s);
00105 u32 sub_long (u32 d, u32 s);
00106 void test_byte (u8 d, u8 s);
00107 void test_word (u16 d, u16 s);
00108 void test_long (u32 d, u32 s);
00109 u8 xor_byte (u8 d, u8 s);
00110 u16 xor_word (u16 d, u16 s);
00111 u32 xor_long (u32 d, u32 s);
00112 void imul_byte (u8 s);
00113 void imul_word (u16 s);
00114 void imul_long (u32 s);
00115 void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s);
00116 void mul_byte (u8 s);
00117 void mul_word (u16 s);
00118 void mul_long (u32 s);
00119 void idiv_byte (u8 s);
00120 void idiv_word (u16 s);
00121 void idiv_long (u32 s);
00122 void div_byte (u8 s);
00123 void div_word (u16 s);
00124 void div_long (u32 s);
00125 void ins (int size);
00126 void outs (int size);
00127 u16 mem_access_word (int addr);
00128 void push_word (u16 w);
00129 void push_long (u32 w);
00130 u16 pop_word (void);
00131 u32 pop_long (void);
00132
00133 #if defined(__HAVE_INLINE_ASSEMBLER__) && !defined(PRIM_OPS_NO_REDEFINE_ASM)
00134
00135 #define aaa_word(d) aaa_word_asm(&M.x86.R_EFLG,d)
00136 #define aas_word(d) aas_word_asm(&M.x86.R_EFLG,d)
00137 #define aad_word(d) aad_word_asm(&M.x86.R_EFLG,d)
00138 #define aam_word(d) aam_word_asm(&M.x86.R_EFLG,d)
00139 #define adc_byte(d,s) adc_byte_asm(&M.x86.R_EFLG,d,s)
00140 #define adc_word(d,s) adc_word_asm(&M.x86.R_EFLG,d,s)
00141 #define adc_long(d,s) adc_long_asm(&M.x86.R_EFLG,d,s)
00142 #define add_byte(d,s) add_byte_asm(&M.x86.R_EFLG,d,s)
00143 #define add_word(d,s) add_word_asm(&M.x86.R_EFLG,d,s)
00144 #define add_long(d,s) add_long_asm(&M.x86.R_EFLG,d,s)
00145 #define and_byte(d,s) and_byte_asm(&M.x86.R_EFLG,d,s)
00146 #define and_word(d,s) and_word_asm(&M.x86.R_EFLG,d,s)
00147 #define and_long(d,s) and_long_asm(&M.x86.R_EFLG,d,s)
00148 #define cmp_byte(d,s) cmp_byte_asm(&M.x86.R_EFLG,d,s)
00149 #define cmp_word(d,s) cmp_word_asm(&M.x86.R_EFLG,d,s)
00150 #define cmp_long(d,s) cmp_long_asm(&M.x86.R_EFLG,d,s)
00151 #define daa_byte(d) daa_byte_asm(&M.x86.R_EFLG,d)
00152 #define das_byte(d) das_byte_asm(&M.x86.R_EFLG,d)
00153 #define dec_byte(d) dec_byte_asm(&M.x86.R_EFLG,d)
00154 #define dec_word(d) dec_word_asm(&M.x86.R_EFLG,d)
00155 #define dec_long(d) dec_long_asm(&M.x86.R_EFLG,d)
00156 #define inc_byte(d) inc_byte_asm(&M.x86.R_EFLG,d)
00157 #define inc_word(d) inc_word_asm(&M.x86.R_EFLG,d)
00158 #define inc_long(d) inc_long_asm(&M.x86.R_EFLG,d)
00159 #define or_byte(d,s) or_byte_asm(&M.x86.R_EFLG,d,s)
00160 #define or_word(d,s) or_word_asm(&M.x86.R_EFLG,d,s)
00161 #define or_long(d,s) or_long_asm(&M.x86.R_EFLG,d,s)
00162 #define neg_byte(s) neg_byte_asm(&M.x86.R_EFLG,s)
00163 #define neg_word(s) neg_word_asm(&M.x86.R_EFLG,s)
00164 #define neg_long(s) neg_long_asm(&M.x86.R_EFLG,s)
00165 #define not_byte(s) not_byte_asm(&M.x86.R_EFLG,s)
00166 #define not_word(s) not_word_asm(&M.x86.R_EFLG,s)
00167 #define not_long(s) not_long_asm(&M.x86.R_EFLG,s)
00168 #define rcl_byte(d,s) rcl_byte_asm(&M.x86.R_EFLG,d,s)
00169 #define rcl_word(d,s) rcl_word_asm(&M.x86.R_EFLG,d,s)
00170 #define rcl_long(d,s) rcl_long_asm(&M.x86.R_EFLG,d,s)
00171 #define rcr_byte(d,s) rcr_byte_asm(&M.x86.R_EFLG,d,s)
00172 #define rcr_word(d,s) rcr_word_asm(&M.x86.R_EFLG,d,s)
00173 #define rcr_long(d,s) rcr_long_asm(&M.x86.R_EFLG,d,s)
00174 #define rol_byte(d,s) rol_byte_asm(&M.x86.R_EFLG,d,s)
00175 #define rol_word(d,s) rol_word_asm(&M.x86.R_EFLG,d,s)
00176 #define rol_long(d,s) rol_long_asm(&M.x86.R_EFLG,d,s)
00177 #define ror_byte(d,s) ror_byte_asm(&M.x86.R_EFLG,d,s)
00178 #define ror_word(d,s) ror_word_asm(&M.x86.R_EFLG,d,s)
00179 #define ror_long(d,s) ror_long_asm(&M.x86.R_EFLG,d,s)
00180 #define shl_byte(d,s) shl_byte_asm(&M.x86.R_EFLG,d,s)
00181 #define shl_word(d,s) shl_word_asm(&M.x86.R_EFLG,d,s)
00182 #define shl_long(d,s) shl_long_asm(&M.x86.R_EFLG,d,s)
00183 #define shr_byte(d,s) shr_byte_asm(&M.x86.R_EFLG,d,s)
00184 #define shr_word(d,s) shr_word_asm(&M.x86.R_EFLG,d,s)
00185 #define shr_long(d,s) shr_long_asm(&M.x86.R_EFLG,d,s)
00186 #define sar_byte(d,s) sar_byte_asm(&M.x86.R_EFLG,d,s)
00187 #define sar_word(d,s) sar_word_asm(&M.x86.R_EFLG,d,s)
00188 #define sar_long(d,s) sar_long_asm(&M.x86.R_EFLG,d,s)
00189 #define shld_word(d,fill,s) shld_word_asm(&M.x86.R_EFLG,d,fill,s)
00190 #define shld_long(d,fill,s) shld_long_asm(&M.x86.R_EFLG,d,fill,s)
00191 #define shrd_word(d,fill,s) shrd_word_asm(&M.x86.R_EFLG,d,fill,s)
00192 #define shrd_long(d,fill,s) shrd_long_asm(&M.x86.R_EFLG,d,fill,s)
00193 #define sbb_byte(d,s) sbb_byte_asm(&M.x86.R_EFLG,d,s)
00194 #define sbb_word(d,s) sbb_word_asm(&M.x86.R_EFLG,d,s)
00195 #define sbb_long(d,s) sbb_long_asm(&M.x86.R_EFLG,d,s)
00196 #define sub_byte(d,s) sub_byte_asm(&M.x86.R_EFLG,d,s)
00197 #define sub_word(d,s) sub_word_asm(&M.x86.R_EFLG,d,s)
00198 #define sub_long(d,s) sub_long_asm(&M.x86.R_EFLG,d,s)
00199 #define test_byte(d,s) test_byte_asm(&M.x86.R_EFLG,d,s)
00200 #define test_word(d,s) test_word_asm(&M.x86.R_EFLG,d,s)
00201 #define test_long(d,s) test_long_asm(&M.x86.R_EFLG,d,s)
00202 #define xor_byte(d,s) xor_byte_asm(&M.x86.R_EFLG,d,s)
00203 #define xor_word(d,s) xor_word_asm(&M.x86.R_EFLG,d,s)
00204 #define xor_long(d,s) xor_long_asm(&M.x86.R_EFLG,d,s)
00205 #define imul_byte(s) imul_byte_asm(&M.x86.R_EFLG,&M.x86.R_AX,M.x86.R_AL,s)
00206 #define imul_word(s) imul_word_asm(&M.x86.R_EFLG,&M.x86.R_AX,&M.x86.R_DX,M.x86.R_AX,s)
00207 #define imul_long(s) imul_long_asm(&M.x86.R_EFLG,&M.x86.R_EAX,&M.x86.R_EDX,M.x86.R_EAX,s)
00208 #define imul_long_direct(res_lo,res_hi,d,s) imul_long_asm(&M.x86.R_EFLG,res_lo,res_hi,d,s)
00209 #define mul_byte(s) mul_byte_asm(&M.x86.R_EFLG,&M.x86.R_AX,M.x86.R_AL,s)
00210 #define mul_word(s) mul_word_asm(&M.x86.R_EFLG,&M.x86.R_AX,&M.x86.R_DX,M.x86.R_AX,s)
00211 #define mul_long(s) mul_long_asm(&M.x86.R_EFLG,&M.x86.R_EAX,&M.x86.R_EDX,M.x86.R_EAX,s)
00212 #define idiv_byte(s) idiv_byte_asm(&M.x86.R_EFLG,&M.x86.R_AL,&M.x86.R_AH,M.x86.R_AX,s)
00213 #define idiv_word(s) idiv_word_asm(&M.x86.R_EFLG,&M.x86.R_AX,&M.x86.R_DX,M.x86.R_AX,M.x86.R_DX,s)
00214 #define idiv_long(s) idiv_long_asm(&M.x86.R_EFLG,&M.x86.R_EAX,&M.x86.R_EDX,M.x86.R_EAX,M.x86.R_EDX,s)
00215 #define div_byte(s) div_byte_asm(&M.x86.R_EFLG,&M.x86.R_AL,&M.x86.R_AH,M.x86.R_AX,s)
00216 #define div_word(s) div_word_asm(&M.x86.R_EFLG,&M.x86.R_AX,&M.x86.R_DX,M.x86.R_AX,M.x86.R_DX,s)
00217 #define div_long(s) div_long_asm(&M.x86.R_EFLG,&M.x86.R_EAX,&M.x86.R_EDX,M.x86.R_EAX,M.x86.R_EDX,s)
00218
00219 #endif
00220
00221 #endif