1 /////////////////////////////////////////////////////////////////////////
2 // $Id: logical16.cc,v 1.42 2008/08/11 20:34:05 sshwarts Exp $
3 /////////////////////////////////////////////////////////////////////////
5 // Copyright (C) 2001 MandrakeSoft S.A.
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
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());
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());
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
)
67 SET_FLAGS_OSZAPC_LOGIC_16(op1_16
);
70 void BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_EwIwM(bxInstruction_c
*i
)
74 bx_address eaddr
= BX_CPU_CALL_METHODR(i
->ResolveModrm
, (i
));
76 op1_16
= read_RMW_virtual_word(i
->seg(), eaddr
);
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());
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
)
96 bx_address eaddr
= BX_CPU_CALL_METHODR(i
->ResolveModrm
, (i
));
98 op1_16
= read_RMW_virtual_word(i
->seg(), eaddr
);
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());
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
)
118 bx_address eaddr
= BX_CPU_CALL_METHODR(i
->ResolveModrm
, (i
));
120 op1_16
= read_RMW_virtual_word(i
->seg(), eaddr
);
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());
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());
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());
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
;
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());
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());
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
;
205 SET_FLAGS_OSZAPC_LOGIC_16(op1_16
);
208 void BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_EwIwM(bxInstruction_c
*i
)
212 bx_address eaddr
= BX_CPU_CALL_METHODR(i
->ResolveModrm
, (i
));
214 op1_16
= read_RMW_virtual_word(i
->seg(), eaddr
);
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());
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());
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
;
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());
255 SET_FLAGS_OSZAPC_LOGIC_16(op1_16
);