File: lazy_flags.h

package info (click to toggle)
bochs 2.3-2etch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 14,116 kB
  • ctags: 16,927
  • sloc: cpp: 130,524; ansic: 18,822; sh: 7,922; makefile: 3,836; yacc: 1,056; asm: 463; perl: 381; lex: 280; csh: 3
file content (151 lines) | stat: -rw-r--r-- 4,512 bytes parent folder | download | duplicates (2)
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 */