conditional_move.py revision 6482:e4b8ec60fd4b
1# Copyright (c) 2007 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# Redistribution and use of this software in source and binary forms,
5# with or without modification, are permitted provided that the
6# following conditions are met:
7#
8# The software must be used only for Non-Commercial Use which means any
9# use which is NOT directed to receiving any direct monetary
10# compensation for, or commercial advantage from such use.  Illustrative
11# examples of non-commercial use are academic research, personal study,
12# teaching, education and corporate research & development.
13# Illustrative examples of commercial use are distributing products for
14# commercial advantage and providing services using the software for
15# commercial advantage.
16#
17# If you wish to use this software or functionality therein that may be
18# covered by patents for commercial use, please contact:
19#     Director of Intellectual Property Licensing
20#     Office of Strategy and Technology
21#     Hewlett-Packard Company
22#     1501 Page Mill Road
23#     Palo Alto, California  94304
24#
25# Redistributions of source code must retain the above copyright notice,
26# this list of conditions and the following disclaimer.  Redistributions
27# in binary form must reproduce the above copyright notice, this list of
28# conditions and the following disclaimer in the documentation and/or
29# other materials provided with the distribution.  Neither the name of
30# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
31# contributors may be used to endorse or promote products derived from
32# this software without specific prior written permission.  No right of
33# sublicense is granted herewith.  Derivatives of the software and
34# output created using the software may be prepared, but only for
35# Non-Commercial Uses.  Derivatives of the software may be shared with
36# others provided: (i) the others agree to abide by the list of
37# conditions herein which includes the Non-Commercial Use restrictions;
38# and (ii) such Derivatives of the software include the above copyright
39# notice to acknowledge the contribution from this software where
40# applicable, this list of conditions and the disclaimer below.
41#
42# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53#
54# Authors: Gabe Black
55
56microcode = '''
57def macroop CMOVZ_R_R
58{
59    mov reg, reg, reg, flags=(nCZF,)
60    mov reg, reg, regm, flags=(CZF,)
61};
62
63def macroop CMOVZ_R_M
64{
65    ld t1, seg, sib, disp
66    mov reg, reg, reg, flags=(nCZF,)
67    mov reg, reg, t1, flags=(CZF,)
68};
69
70def macroop CMOVZ_R_P
71{
72    rdip t7
73    ld t1, seg, riprel, disp
74    mov reg, reg, reg, flags=(nCZF,)
75    mov reg, reg, t1, flags=(CZF,)
76};
77
78def macroop CMOVNZ_R_R
79{
80    mov reg, reg, reg, flags=(CZF,)
81    mov reg, reg, regm, flags=(nCZF,)
82};
83
84def macroop CMOVNZ_R_M
85{
86    ld t1, seg, sib, disp
87    mov reg, reg, reg, flags=(CZF,)
88    mov reg, reg, t1, flags=(nCZF,)
89};
90
91def macroop CMOVNZ_R_P
92{
93    rdip t7
94    ld t1, seg, riprel, disp
95    mov reg, reg, reg, flags=(CZF,)
96    mov reg, reg, t1, flags=(nCZF,)
97};
98
99def macroop CMOVB_R_R
100{
101    mov reg, reg, reg, flags=(nCCF,)
102    mov reg, reg, regm, flags=(CCF,)
103};
104
105def macroop CMOVB_R_M
106{
107    ld t1, seg, sib, disp
108    mov reg, reg, reg, flags=(nCCF,)
109    mov reg, reg, t1, flags=(CCF,)
110};
111
112def macroop CMOVB_R_P
113{
114    rdip t7
115    ld t1, seg, riprel, disp
116    mov reg, reg, reg, flags=(nCCF,)
117    mov reg, reg, t1, flags=(CCF,)
118};
119
120def macroop CMOVNB_R_R
121{
122    mov reg, reg, reg, flags=(CCF,)
123    mov reg, reg, regm, flags=(nCCF,)
124};
125
126def macroop CMOVNB_R_M
127{
128    ld t1, seg, sib, disp
129    mov reg, reg, reg, flags=(CCF,)
130    mov reg, reg, t1, flags=(nCCF,)
131};
132
133def macroop CMOVNB_R_P
134{
135    rdip t7
136    ld t1, seg, riprel, disp
137    mov reg, reg, reg, flags=(CCF,)
138    mov reg, reg, t1, flags=(nCCF,)
139};
140
141def macroop CMOVBE_R_R
142{
143    mov reg, reg, reg, flags=(nCCvZF,)
144    mov reg, reg, regm, flags=(CCvZF,)
145};
146
147def macroop CMOVBE_R_M
148{
149    ld t1, seg, sib, disp
150    mov reg, reg, reg, flags=(nCCvZF,)
151    mov reg, reg, t1, flags=(CCvZF,)
152};
153
154def macroop CMOVBE_R_P
155{
156    rdip t7
157    ld t1, seg, riprel, disp
158    mov reg, reg, reg, flags=(nCCvZF,)
159    mov reg, reg, t1, flags=(CCvZF,)
160};
161
162def macroop CMOVNBE_R_R
163{
164    mov reg, reg, reg, flags=(CCvZF,)
165    mov reg, reg, regm, flags=(nCCvZF,)
166};
167
168def macroop CMOVNBE_R_M
169{
170    ld t1, seg, sib, disp
171    mov reg, reg, reg, flags=(CCvZF,)
172    mov reg, reg, t1, flags=(nCCvZF,)
173};
174
175def macroop CMOVNBE_R_P
176{
177    rdip t7
178    ld t1, seg, riprel, disp
179    mov reg, reg, reg, flags=(CCvZF,)
180    mov reg, reg, t1, flags=(nCCvZF,)
181};
182
183def macroop CMOVS_R_R
184{
185    mov reg, reg, reg, flags=(nCSF,)
186    mov reg, reg, regm, flags=(CSF,)
187};
188
189def macroop CMOVS_R_M
190{
191    ld t1, seg, sib, disp
192    mov reg, reg, reg, flags=(nCSF,)
193    mov reg, reg, t1, flags=(CSF,)
194};
195
196def macroop CMOVS_R_P
197{
198    rdip t7
199    ld t1, seg, riprel, disp
200    mov reg, reg, reg, flags=(nCSF,)
201    mov reg, reg, t1, flags=(CSF,)
202};
203
204def macroop CMOVNS_R_R
205{
206    mov reg, reg, reg, flags=(CSF,)
207    mov reg, reg, regm, flags=(nCSF,)
208};
209
210def macroop CMOVNS_R_M
211{
212    ld t1, seg, sib, disp
213    mov reg, reg, reg, flags=(CSF,)
214    mov reg, reg, t1, flags=(nCSF,)
215};
216
217def macroop CMOVNS_R_P
218{
219    rdip t7
220    ld t1, seg, riprel, disp
221    mov reg, reg, reg, flags=(CSF,)
222    mov reg, reg, t1, flags=(nCSF,)
223};
224
225def macroop CMOVP_R_R
226{
227    mov reg, reg, reg, flags=(nCPF,)
228    mov reg, reg, regm, flags=(CPF,)
229};
230
231def macroop CMOVP_R_M
232{
233    ld t1, seg, sib, disp
234    mov reg, reg, reg, flags=(nCPF,)
235    mov reg, reg, t1, flags=(CPF,)
236};
237
238def macroop CMOVP_R_P
239{
240    rdip t7
241    ld t1, seg, riprel, disp
242    mov reg, reg, reg, flags=(nCPF,)
243    mov reg, reg, t1, flags=(CPF,)
244};
245
246def macroop CMOVNP_R_R
247{
248    mov reg, reg, reg, flags=(CPF,)
249    mov reg, reg, regm, flags=(nCPF,)
250};
251
252def macroop CMOVNP_R_M
253{
254    ld t1, seg, sib, disp
255    mov reg, reg, reg, flags=(CPF,)
256    mov reg, reg, t1, flags=(nCPF,)
257};
258
259def macroop CMOVNP_R_P
260{
261    rdip t7
262    ld t1, seg, riprel, disp
263    mov reg, reg, reg, flags=(CPF,)
264    mov reg, reg, t1, flags=(nCPF,)
265};
266
267def macroop CMOVL_R_R
268{
269    mov reg, reg, reg, flags=(nCSxOF,)
270    mov reg, reg, regm, flags=(CSxOF,)
271};
272
273def macroop CMOVL_R_M
274{
275    ld t1, seg, sib, disp
276    mov reg, reg, reg, flags=(nCSxOF,)
277    mov reg, reg, t1, flags=(CSxOF,)
278};
279
280def macroop CMOVL_R_P
281{
282    rdip t7
283    ld t1, seg, riprel, disp
284    mov reg, reg, reg, flags=(nCSxOF,)
285    mov reg, reg, t1, flags=(CSxOF,)
286};
287
288def macroop CMOVNL_R_R
289{
290    mov reg, reg, reg, flags=(CSxOF,)
291    mov reg, reg, regm, flags=(nCSxOF,)
292};
293
294def macroop CMOVNL_R_M
295{
296    ld t1, seg, sib, disp
297    mov reg, reg, reg, flags=(CSxOF,)
298    mov reg, reg, t1, flags=(nCSxOF,)
299};
300
301def macroop CMOVNL_R_P
302{
303    rdip t7
304    ld t1, seg, riprel, disp
305    mov reg, reg, reg, flags=(CSxOF,)
306    mov reg, reg, t1, flags=(nCSxOF,)
307};
308
309def macroop CMOVLE_R_R
310{
311    mov reg, reg, reg, flags=(nCSxOvZF,)
312    mov reg, reg, regm, flags=(CSxOvZF,)
313};
314
315def macroop CMOVLE_R_M
316{
317    ld t1, seg, sib, disp
318    mov reg, reg, reg, flags=(nCSxOvZF,)
319    mov reg, reg, t1, flags=(CSxOvZF,)
320};
321
322def macroop CMOVLE_R_P
323{
324    rdip t7
325    ld t1, seg, riprel, disp
326    mov reg, reg, reg, flags=(nCSxOvZF,)
327    mov reg, reg, t1, flags=(CSxOvZF,)
328};
329
330def macroop CMOVNLE_R_R
331{
332    mov reg, reg, reg, flags=(CSxOvZF,)
333    mov reg, reg, regm, flags=(nCSxOvZF,)
334};
335
336def macroop CMOVNLE_R_M
337{
338    ld t1, seg, sib, disp
339    mov reg, reg, reg, flags=(CSxOvZF,)
340    mov reg, reg, t1, flags=(nCSxOvZF,)
341};
342
343def macroop CMOVNLE_R_P
344{
345    rdip t7
346    ld t1, seg, riprel, disp
347    mov reg, reg, reg, flags=(CSxOvZF,)
348    mov reg, reg, t1, flags=(nCSxOvZF,)
349};
350
351def macroop CMOVO_R_R
352{
353    mov reg, reg, reg, flags=(nCOF,)
354    mov reg, reg, regm, flags=(COF,)
355};
356
357def macroop CMOVO_R_M
358{
359    ld t1, seg, sib, disp
360    mov reg, reg, reg, flags=(nCOF,)
361    mov reg, reg, t1, flags=(COF,)
362};
363
364def macroop CMOVO_R_P
365{
366    rdip t7
367    ld t1, seg, riprel, disp
368    mov reg, reg, reg, flags=(nCOF,)
369    mov reg, reg, t1, flags=(COF,)
370};
371
372def macroop CMOVNO_R_R
373{
374    mov reg, reg, reg, flags=(COF,)
375    mov reg, reg, regm, flags=(nCOF,)
376};
377
378def macroop CMOVNO_R_M
379{
380    ld t1, seg, sib, disp
381    mov reg, reg, reg, flags=(COF,)
382    mov reg, reg, t1, flags=(nCOF,)
383};
384
385def macroop CMOVNO_R_P
386{
387    rdip t7
388    ld t1, seg, riprel, disp
389    mov reg, reg, reg, flags=(COF,)
390    mov reg, reg, t1, flags=(nCOF,)
391};
392'''
393