1# Copyright (c) 2007 The Hewlett-Packard Development Company
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder.  You may use the software subject to the license
9# terms below provided that you ensure that this notice is replicated
10# unmodified and in its entirety in all distributions of the software,
11# modified or unmodified, in source code or in binary form.
12#
13# Redistribution and use in source and binary forms, with or without
14# modification, are permitted provided that the following conditions are
15# met: redistributions of source code must retain the above copyright
16# notice, this list of conditions and the following disclaimer;
17# redistributions in binary form must reproduce the above copyright
18# notice, this list of conditions and the following disclaimer in the
19# documentation and/or other materials provided with the distribution;
20# neither the name of the copyright holders nor the names of its
21# contributors may be used to endorse or promote products derived from
22# this software without specific prior written permission.
23#
24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35#
36# Authors: Gabe Black
37
38microcode = '''
39def macroop SALC_R
40{
41    sbb reg, reg, reg, dataSize=1
42};
43
44def macroop SETZ_R
45{
46    movi reg, reg, 1, flags=(CZF,)
47    movi reg, reg, 0, flags=(nCZF,)
48};
49
50def macroop SETZ_M
51{
52    movi t1, t1, 1, flags=(CZF,)
53    movi t1, t1, 0, flags=(nCZF,)
54    st t1, seg, sib, disp
55};
56
57def macroop SETZ_P
58{
59    rdip t7
60    movi t1, t1, 1, flags=(CZF,)
61    movi t1, t1, 0, flags=(nCZF,)
62    st t1, seg, riprel, disp
63};
64
65def macroop SETNZ_R
66{
67    movi reg, reg, 1, flags=(nCZF,)
68    movi reg, reg, 0, flags=(CZF,)
69};
70
71def macroop SETNZ_M
72{
73    movi t1, t1, 1, flags=(nCZF,)
74    movi t1, t1, 0, flags=(CZF,)
75    st t1, seg, sib, disp
76};
77
78def macroop SETNZ_P
79{
80    rdip t7
81    movi t1, t1, 1, flags=(nCZF,)
82    movi t1, t1, 0, flags=(CZF,)
83    st t1, seg, riprel, disp
84};
85
86def macroop SETB_R
87{
88    movi reg, reg, 1, flags=(CCF,)
89    movi reg, reg, 0, flags=(nCCF,)
90};
91
92def macroop SETB_M
93{
94    movi t1, t1, 1, flags=(CCF,)
95    movi t1, t1, 0, flags=(nCCF,)
96    st t1, seg, sib, disp
97};
98
99def macroop SETB_P
100{
101    rdip t7
102    movi t1, t1, 1, flags=(CCF,)
103    movi t1, t1, 0, flags=(nCCF,)
104    st t1, seg, riprel, disp
105};
106
107def macroop SETNB_R
108{
109    movi reg, reg, 1, flags=(nCCF,)
110    movi reg, reg, 0, flags=(CCF,)
111};
112
113def macroop SETNB_M
114{
115    movi t1, t1, 1, flags=(nCCF,)
116    movi t1, t1, 0, flags=(CCF,)
117    st t1, seg, sib, disp
118};
119
120def macroop SETNB_P
121{
122    rdip t7
123    movi t1, t1, 1, flags=(nCCF,)
124    movi t1, t1, 0, flags=(CCF,)
125    st t1, seg, riprel, disp
126};
127
128def macroop SETBE_R
129{
130    movi reg, reg, 1, flags=(CCvZF,)
131    movi reg, reg, 0, flags=(nCCvZF,)
132};
133
134def macroop SETBE_M
135{
136    movi t1, t1, 1, flags=(CCvZF,)
137    movi t1, t1, 0, flags=(nCCvZF,)
138    st t1, seg, sib, disp
139};
140
141def macroop SETBE_P
142{
143    rdip t7
144    movi t1, t1, 1, flags=(CCvZF,)
145    movi t1, t1, 0, flags=(nCCvZF,)
146    st t1, seg, riprel, disp
147};
148
149def macroop SETNBE_R
150{
151    movi reg, reg, 1, flags=(nCCvZF,)
152    movi reg, reg, 0, flags=(CCvZF,)
153};
154
155def macroop SETNBE_M
156{
157    movi t1, t1, 1, flags=(nCCvZF,)
158    movi t1, t1, 0, flags=(CCvZF,)
159    st t1, seg, sib, disp
160};
161
162def macroop SETNBE_P
163{
164    rdip t7
165    movi t1, t1, 1, flags=(nCCvZF,)
166    movi t1, t1, 0, flags=(CCvZF,)
167    st t1, seg, riprel, disp
168};
169
170def macroop SETS_R
171{
172    movi reg, reg, 1, flags=(CSF,)
173    movi reg, reg, 0, flags=(nCSF,)
174};
175
176def macroop SETS_M
177{
178    movi t1, t1, 1, flags=(CSF,)
179    movi t1, t1, 0, flags=(nCSF,)
180    st t1, seg, sib, disp
181};
182
183def macroop SETS_P
184{
185    rdip t7
186    movi t1, t1, 1, flags=(CSF,)
187    movi t1, t1, 0, flags=(nCSF,)
188    st t1, seg, riprel, disp
189};
190
191def macroop SETNS_R
192{
193    movi reg, reg, 1, flags=(nCSF,)
194    movi reg, reg, 0, flags=(CSF,)
195};
196
197def macroop SETNS_M
198{
199    movi t1, t1, 1, flags=(nCSF,)
200    movi t1, t1, 0, flags=(CSF,)
201    st t1, seg, sib, disp
202};
203
204def macroop SETNS_P
205{
206    rdip t7
207    movi t1, t1, 1, flags=(nCSF,)
208    movi t1, t1, 0, flags=(CSF,)
209    st t1, seg, riprel, disp
210};
211
212def macroop SETP_R
213{
214    movi reg, reg, 1, flags=(CPF,)
215    movi reg, reg, 0, flags=(nCPF,)
216};
217
218def macroop SETP_M
219{
220    movi t1, t1, 1, flags=(CPF,)
221    movi t1, t1, 0, flags=(nCPF,)
222    st t1, seg, sib, disp
223};
224
225def macroop SETP_P
226{
227    rdip t7
228    movi t1, t1, 1, flags=(CPF,)
229    movi t1, t1, 0, flags=(nCPF,)
230    st t1, seg, riprel, disp
231};
232
233def macroop SETNP_R
234{
235    movi reg, reg, 1, flags=(nCPF,)
236    movi reg, reg, 0, flags=(CPF,)
237};
238
239def macroop SETNP_M
240{
241    movi t1, t1, 1, flags=(nCPF,)
242    movi t1, t1, 0, flags=(CPF,)
243    st t1, seg, sib, disp
244};
245
246def macroop SETNP_P
247{
248    rdip t7
249    movi t1, t1, 1, flags=(nCPF,)
250    movi t1, t1, 0, flags=(CPF,)
251    st t1, seg, riprel, disp
252};
253
254def macroop SETL_R
255{
256    movi reg, reg, 1, flags=(CSxOF,)
257    movi reg, reg, 0, flags=(nCSxOF,)
258};
259
260def macroop SETL_M
261{
262    movi t1, t1, 1, flags=(CSxOF,)
263    movi t1, t1, 0, flags=(nCSxOF,)
264    st t1, seg, sib, disp
265};
266
267def macroop SETL_P
268{
269    rdip t7
270    movi t1, t1, 1, flags=(CSxOF,)
271    movi t1, t1, 0, flags=(nCSxOF,)
272    st t1, seg, riprel, disp
273};
274
275def macroop SETNL_R
276{
277    movi reg, reg, 1, flags=(nCSxOF,)
278    movi reg, reg, 0, flags=(CSxOF,)
279};
280
281def macroop SETNL_M
282{
283    movi t1, t1, 1, flags=(nCSxOF,)
284    movi t1, t1, 0, flags=(CSxOF,)
285    st t1, seg, sib, disp
286};
287
288def macroop SETNL_P
289{
290    rdip t7
291    movi t1, t1, 1, flags=(nCSxOF,)
292    movi t1, t1, 0, flags=(CSxOF,)
293    st t1, seg, riprel, disp
294};
295
296def macroop SETLE_R
297{
298    movi reg, reg, 1, flags=(CSxOvZF,)
299    movi reg, reg, 0, flags=(nCSxOvZF,)
300};
301
302def macroop SETLE_M
303{
304    movi t1, t1, 1, flags=(CSxOvZF,)
305    movi t1, t1, 0, flags=(nCSxOvZF,)
306    st t1, seg, sib, disp
307};
308
309def macroop SETLE_P
310{
311    rdip t7
312    movi t1, t1, 1, flags=(CSxOvZF,)
313    movi t1, t1, 0, flags=(nCSxOvZF,)
314    st t1, seg, riprel, disp
315};
316
317def macroop SETNLE_R
318{
319    movi reg, reg, 1, flags=(nCSxOvZF,)
320    movi reg, reg, 0, flags=(CSxOvZF,)
321};
322
323def macroop SETNLE_M
324{
325    movi t1, t1, 1, flags=(nCSxOvZF,)
326    movi t1, t1, 0, flags=(CSxOvZF,)
327    st t1, seg, sib, disp
328};
329
330def macroop SETNLE_P
331{
332    rdip t7
333    movi t1, t1, 1, flags=(nCSxOvZF,)
334    movi t1, t1, 0, flags=(CSxOvZF,)
335    st t1, seg, riprel, disp
336};
337
338def macroop SETO_R
339{
340    movi reg, reg, 1, flags=(COF,)
341    movi reg, reg, 0, flags=(nCOF,)
342};
343
344def macroop SETO_M
345{
346    movi t1, t1, 1, flags=(COF,)
347    movi t1, t1, 0, flags=(nCOF,)
348    st t1, seg, sib, disp
349};
350
351def macroop SETO_P
352{
353    rdip t7
354    movi t1, t1, 1, flags=(COF,)
355    movi t1, t1, 0, flags=(nCOF,)
356    st t1, seg, riprel, disp
357};
358
359def macroop SETNO_R
360{
361    movi reg, reg, 1, flags=(nCOF,)
362    movi reg, reg, 0, flags=(COF,)
363};
364
365def macroop SETNO_M
366{
367    movi t1, t1, 1, flags=(nCOF,)
368    movi t1, t1, 0, flags=(COF,)
369    st t1, seg, sib, disp
370};
371
372def macroop SETNO_P
373{
374    rdip t7
375    movi t1, t1, 1, flags=(nCOF,)
376    movi t1, t1, 0, flags=(COF,)
377    st t1, seg, riprel, disp
378};
379'''
380