- compilation fixes for MSVC toolkit 2003
[bochs-mirror.git] / cpu / logical16.cc
blob393632f0f99869eba70639fbdb86b0ff68e0ec51
1 /////////////////////////////////////////////////////////////////////////
2 // $Id: logical16.cc,v 1.42 2008/08/11 20:34:05 sshwarts Exp $
3 /////////////////////////////////////////////////////////////////////////
4 //
5 // Copyright (C) 2001 MandrakeSoft S.A.
6 //
7 // MandrakeSoft S.A.
8 // 43, rue d'Aboukir
9 // 75002 Paris - France
10 // http://www.linux-mandrake.com/
11 // http://www.mandrakesoft.com/
13 // This library is free software; you can redistribute it and/or
14 // modify it under the terms of the GNU Lesser General Public
15 // License as published by the Free Software Foundation; either
16 // version 2 of the License, or (at your option) any later version.
18 // This library is distributed in the hope that it will be useful,
19 // but WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 // Lesser General Public License for more details.
23 // You should have received a copy of the GNU Lesser General Public
24 // License along with this library; if not, write to the Free Software
25 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 /////////////////////////////////////////////////////////////////////////
28 #define NEED_CPU_REG_SHORTCUTS 1
29 #include "bochs.h"
30 #include "cpu.h"
31 #define LOG_THIS BX_CPU_THIS_PTR
33 void BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_EwGwM(bxInstruction_c *i)
35 Bit16u op1_16, op2_16;
37 bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
39 op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
40 op2_16 = BX_READ_16BIT_REG(i->nnn());
41 op1_16 ^= op2_16;
42 write_RMW_virtual_word(op1_16);
44 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
47 void BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_GwEwR(bxInstruction_c *i)
49 Bit16u op1_16, op2_16;
51 op1_16 = BX_READ_16BIT_REG(i->nnn());
52 op2_16 = BX_READ_16BIT_REG(i->rm());
53 op1_16 ^= op2_16;
54 BX_WRITE_16BIT_REG(i->nnn(), op1_16);
56 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
59 void BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_AXIw(bxInstruction_c *i)
61 Bit16u op1_16;
63 op1_16 = AX;
64 op1_16 ^= i->Iw();
65 AX = op1_16;
67 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
70 void BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_EwIwM(bxInstruction_c *i)
72 Bit16u op1_16;
74 bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
76 op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
77 op1_16 ^= i->Iw();
78 write_RMW_virtual_word(op1_16);
80 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
83 void BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_EwIwR(bxInstruction_c *i)
85 Bit16u op1_16 = BX_READ_16BIT_REG(i->rm());
86 op1_16 ^= i->Iw();
87 BX_WRITE_16BIT_REG(i->rm(), op1_16);
89 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
92 void BX_CPP_AttrRegparmN(1) BX_CPU_C::OR_EwIwM(bxInstruction_c *i)
94 Bit16u op1_16;
96 bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
98 op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
99 op1_16 |= i->Iw();
100 write_RMW_virtual_word(op1_16);
102 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
105 void BX_CPP_AttrRegparmN(1) BX_CPU_C::OR_EwIwR(bxInstruction_c *i)
107 Bit16u op1_16 = BX_READ_16BIT_REG(i->rm());
108 op1_16 |= i->Iw();
109 BX_WRITE_16BIT_REG(i->rm(), op1_16);
111 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
114 void BX_CPP_AttrRegparmN(1) BX_CPU_C::NOT_EwM(bxInstruction_c *i)
116 Bit16u op1_16;
118 bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
120 op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
121 op1_16 = ~op1_16;
122 write_RMW_virtual_word(op1_16);
125 void BX_CPP_AttrRegparmN(1) BX_CPU_C::NOT_EwR(bxInstruction_c *i)
127 Bit16u op1_16 = BX_READ_16BIT_REG(i->rm());
128 op1_16 = ~op1_16;
129 BX_WRITE_16BIT_REG(i->rm(), op1_16);
132 void BX_CPP_AttrRegparmN(1) BX_CPU_C::OR_EwGwM(bxInstruction_c *i)
134 Bit16u op1_16, op2_16;
136 bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
138 op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
139 op2_16 = BX_READ_16BIT_REG(i->nnn());
140 op1_16 |= op2_16;
141 write_RMW_virtual_word(op1_16);
143 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
146 void BX_CPP_AttrRegparmN(1) BX_CPU_C::OR_GwEwR(bxInstruction_c *i)
148 Bit16u op1_16, op2_16;
150 op1_16 = BX_READ_16BIT_REG(i->nnn());
151 op2_16 = BX_READ_16BIT_REG(i->rm());
152 op1_16 |= op2_16;
153 BX_WRITE_16BIT_REG(i->nnn(), op1_16);
155 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
158 void BX_CPP_AttrRegparmN(1) BX_CPU_C::OR_AXIw(bxInstruction_c *i)
160 Bit16u op1_16, op2_16;
162 op1_16 = AX;
163 op2_16 = i->Iw();
164 op1_16 |= op2_16;
165 AX = op1_16;
167 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
170 void BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_EwGwM(bxInstruction_c *i)
172 Bit16u op1_16, op2_16;
174 bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
176 op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
177 op2_16 = BX_READ_16BIT_REG(i->nnn());
178 op1_16 &= op2_16;
179 write_RMW_virtual_word(op1_16);
181 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
184 void BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_GwEwR(bxInstruction_c *i)
186 Bit16u op1_16, op2_16;
188 op1_16 = BX_READ_16BIT_REG(i->nnn());
189 op2_16 = BX_READ_16BIT_REG(i->rm());
190 op1_16 &= op2_16;
191 BX_WRITE_16BIT_REG(i->nnn(), op1_16);
193 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
196 void BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_AXIw(bxInstruction_c *i)
198 Bit16u op1_16, op2_16;
200 op1_16 = AX;
201 op2_16 = i->Iw();
202 op1_16 &= op2_16;
203 AX = op1_16;
205 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
208 void BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_EwIwM(bxInstruction_c *i)
210 Bit16u op1_16;
212 bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
214 op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
215 op1_16 &= i->Iw();
216 write_RMW_virtual_word(op1_16);
218 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
221 void BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_EwIwR(bxInstruction_c *i)
223 Bit16u op1_16 = BX_READ_16BIT_REG(i->rm());
224 op1_16 &= i->Iw();
225 BX_WRITE_16BIT_REG(i->rm(), op1_16);
227 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
230 void BX_CPP_AttrRegparmN(1) BX_CPU_C::TEST_EwGwR(bxInstruction_c *i)
232 Bit16u op1_16, op2_16;
234 op1_16 = BX_READ_16BIT_REG(i->rm());
235 op2_16 = BX_READ_16BIT_REG(i->nnn());
236 op1_16 &= op2_16;
237 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
240 void BX_CPP_AttrRegparmN(1) BX_CPU_C::TEST_AXIw(bxInstruction_c *i)
242 Bit16u op1_16, op2_16;
244 op1_16 = AX;
245 op2_16 = i->Iw();
246 op1_16 &= op2_16;
248 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);
251 void BX_CPP_AttrRegparmN(1) BX_CPU_C::TEST_EwIwR(bxInstruction_c *i)
253 Bit16u op1_16 = BX_READ_16BIT_REG(i->rm());
254 op1_16 &= i->Iw();
255 SET_FLAGS_OSZAPC_LOGIC_16(op1_16);