1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
/////////////////////////////////////////////////////////////////////////
// $Id: lazy_flags.h,v 1.23 2005/10/13 20:21:35 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
//
// MandrakeSoft S.A.
// 43, rue d'Aboukir
// 75002 Paris - France
// http://www.linux-mandrake.com/
// http://www.mandrakesoft.com/
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#if BX_PROVIDE_CPU_MEMORY==1
#define BX_INSTR_ADD8 1
#define BX_INSTR_ADD16 2
#define BX_INSTR_ADD32 3
#define BX_INSTR_ADD64 4
// used only if CF = 1 when executing ADC instruction
#define BX_INSTR_ADC8 5
#define BX_INSTR_ADC16 6
#define BX_INSTR_ADC32 7
#define BX_INSTR_ADC64 8
#define BX_INSTR_ADD_ADC8(cf) (1 + ((cf)<<2))
#define BX_INSTR_ADD_ADC16(cf) (2 + ((cf)<<2))
#define BX_INSTR_ADD_ADC32(cf) (3 + ((cf)<<2))
#define BX_INSTR_ADD_ADC64(cf) (4 + ((cf)<<2))
#define BX_INSTR_SUB8 9
#define BX_INSTR_SUB16 10
#define BX_INSTR_SUB32 11
#define BX_INSTR_SUB64 12
// used only if CF = 1 when executing SBB instruction
#define BX_INSTR_SBB8 13
#define BX_INSTR_SBB16 14
#define BX_INSTR_SBB32 15
#define BX_INSTR_SBB64 16
#define BX_INSTR_SUB_SBB8(cf) (9 + ((cf)<<2))
#define BX_INSTR_SUB_SBB16(cf) (10 + ((cf)<<2))
#define BX_INSTR_SUB_SBB32(cf) (11 + ((cf)<<2))
#define BX_INSTR_SUB_SBB64(cf) (12 + ((cf)<<2))
#define BX_INSTR_INC8 17
#define BX_INSTR_INC16 18
#define BX_INSTR_INC32 19
#define BX_INSTR_INC64 20
#define BX_INSTR_DEC8 21
#define BX_INSTR_DEC16 22
#define BX_INSTR_DEC32 23
#define BX_INSTR_DEC64 24
#define BX_INSTR_NEG8 25
#define BX_INSTR_NEG16 26
#define BX_INSTR_NEG32 27
#define BX_INSTR_NEG64 28
#define BX_INSTR_LOGIC8 29
#define BX_INSTR_LOGIC16 30
#define BX_INSTR_LOGIC32 31
#define BX_INSTR_LOGIC64 32
// BX_INSTR_BITSCAN8 not exists, leave number for alignment
#define BX_INSTR_BITSCAN16 34
#define BX_INSTR_BITSCAN32 35
#define BX_INSTR_BITSCAN64 36
#define BX_INSTR_SHL8 37
#define BX_INSTR_SHL16 38
#define BX_INSTR_SHL32 39
#define BX_INSTR_SHL64 40
#define BX_INSTR_SHR8 41
#define BX_INSTR_SHR16 42
#define BX_INSTR_SHR32 43
#define BX_INSTR_SHR64 44
#define BX_INSTR_SAR8 45
#define BX_INSTR_SAR16 46
#define BX_INSTR_SAR32 47
#define BX_INSTR_SAR64 48
#define BX_INSTR_MUL8 49
#define BX_INSTR_MUL16 50
#define BX_INSTR_MUL32 51
#define BX_INSTR_MUL64 52
#define BX_INSTR_IMUL8 53
#define BX_INSTR_IMUL16 54
#define BX_INSTR_IMUL32 55
#define BX_INSTR_IMUL64 56
// BX_INSTR_SHRD8 not exists, leave number for alignment
#define BX_INSTR_SHRD16 58
#define BX_INSTR_SHRD32 59
#define BX_INSTR_SHRD64 60
#define BX_INSTR_COMPARE8 BX_INSTR_SUB8
#define BX_INSTR_COMPARE16 BX_INSTR_SUB16
#define BX_INSTR_COMPARE32 BX_INSTR_SUB32
#define BX_INSTR_COMPARE64 BX_INSTR_SUB64
#define BX_LF_INDEX_OSZAPC 1
#define BX_LF_INDEX_OSZAP 2
#define BX_LF_MASK_OSZAPC 0x111111
#define BX_LF_MASK_OSZAP 0x222220
typedef struct {
Bit8u op1_8;
Bit8u op2_8;
Bit8u result_8;
Bit16u op1_16;
Bit16u op2_16;
Bit16u result_16;
Bit32u op1_32;
Bit32u op2_32;
Bit32u result_32;
#if BX_SUPPORT_X86_64
Bit64u op1_64;
Bit64u op2_64;
Bit64u result_64;
#endif
unsigned instr;
} bx_lf_flags_entry;
#endif /* BX_PROVIDE_CPU_MEMORY==1 */
|