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 ADD_R_R
40{
41 add reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
42};
43
44def macroop ADD_R_I
45{
46 limm t1, imm
47 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
48};
49
50def macroop ADD_M_I
51{
52 limm t2, imm
53 ldst t1, seg, sib, disp
54 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
55 st t1, seg, sib, disp
56};
57
58def macroop ADD_P_I
59{
60 rdip t7
61 limm t2, imm
62 ldst t1, seg, riprel, disp
63 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
64 st t1, seg, riprel, disp
65};
66
67def macroop ADD_LOCKED_M_I
68{
69 limm t2, imm
70 mfence
71 ldstl t1, seg, sib, disp
72 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
73 stul t1, seg, sib, disp
74 mfence
75};
76
77def macroop ADD_LOCKED_P_I
78{
79 rdip t7
80 limm t2, imm
81 mfence
82 ldstl t1, seg, riprel, disp
83 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
84 stul t1, seg, riprel, disp
85 mfence
86};
87
88def macroop ADD_M_R
89{
90 ldst t1, seg, sib, disp
91 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
92 st t1, seg, sib, disp
93};
94
95def macroop ADD_P_R
96{
97 rdip t7
98 ldst t1, seg, riprel, disp
99 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
100 st t1, seg, riprel, disp
101};
102
103def macroop ADD_LOCKED_M_R
104{
105 mfence
106 ldstl t1, seg, sib, disp
107 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
108 stul t1, seg, sib, disp
109 mfence
110};
111
112def macroop ADD_LOCKED_P_R
113{
114 rdip t7
115 mfence
116 ldstl t1, seg, riprel, disp
117 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
118 stul t1, seg, riprel, disp
119 mfence
120};
121
122def macroop ADD_R_M
123{
124 ld t1, seg, sib, disp
125 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
126};
127
128def macroop ADD_R_P
129{
130 rdip t7
131 ld t1, seg, riprel, disp
132 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
133};
134
135def macroop SUB_R_R
136{
137 sub reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
138};
139
140def macroop SUB_R_I
141{
142 limm t1, imm
143 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
144};
145
146def macroop SUB_R_M
147{
148 ld t1, seg, sib, disp
149 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
150};
151
152def macroop SUB_R_P
153{
154 rdip t7
155 ld t1, seg, riprel, disp
156 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
157};
158
159def macroop SUB_M_I
160{
161 limm t2, imm
162 ldst t1, seg, sib, disp
163 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
164 st t1, seg, sib, disp
165};
166
167def macroop SUB_P_I
168{
169 rdip t7
170 limm t2, imm
171 ldst t1, seg, riprel, disp
172 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
173 st t1, seg, riprel, disp
174};
175
176def macroop SUB_LOCKED_M_I
177{
178 limm t2, imm
179 mfence
180 ldstl t1, seg, sib, disp
181 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
182 stul t1, seg, sib, disp
183 mfence
184};
185
186def macroop SUB_LOCKED_P_I
187{
188 rdip t7
189 limm t2, imm
190 mfence
191 ldstl t1, seg, riprel, disp
192 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
193 stul t1, seg, riprel, disp
194 mfence
195};
196
197def macroop SUB_M_R
198{
199 ldst t1, seg, sib, disp
200 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
201 st t1, seg, sib, disp
202};
203
204def macroop SUB_P_R
205{
206 rdip t7
207 ldst t1, seg, riprel, disp
208 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
209 st t1, seg, riprel, disp
210};
211
212def macroop SUB_LOCKED_M_R
213{
214 mfence
215 ldstl t1, seg, sib, disp
216 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
217 stul t1, seg, sib, disp
218 mfence
219};
220
221def macroop SUB_LOCKED_P_R
222{
223 rdip t7
224 mfence
225 ldstl t1, seg, riprel, disp
226 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
227 stul t1, seg, riprel, disp
228 mfence
229};
230
231def macroop ADC_R_R
232{
233 adc reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
234};
235
236def macroop ADC_R_I
237{
238 limm t1, imm
239 adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
240};
241
242def macroop ADC_M_I
243{
244 limm t2, imm
245 ldst t1, seg, sib, disp
246 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
247 st t1, seg, sib, disp
248};
249
250def macroop ADC_P_I
251{
252 rdip t7
253 limm t2, imm
254 ldst t1, seg, riprel, disp
255 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
256 st t1, seg, riprel, disp
257};
258
259def macroop ADC_LOCKED_M_I
260{
261 limm t2, imm
262 mfence
263 ldstl t1, seg, sib, disp
264 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
265 stul t1, seg, sib, disp
266 mfence
267};
268
269def macroop ADC_LOCKED_P_I
270{
271 rdip t7
272 limm t2, imm
273 mfence
274 ldstl t1, seg, riprel, disp
275 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
276 stul t1, seg, riprel, disp
277 mfence
278};
279
280def macroop ADC_M_R
281{
282 ldst t1, seg, sib, disp
283 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
284 st t1, seg, sib, disp
285};
286
287def macroop ADC_P_R
288{
289 rdip t7
290 ldst t1, seg, riprel, disp
291 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
292 st t1, seg, riprel, disp
293};
294
295def macroop ADC_LOCKED_M_R
296{
297 mfence
298 ldstl t1, seg, sib, disp
299 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
300 stul t1, seg, sib, disp
301 mfence
302};
303
304def macroop ADC_LOCKED_P_R
305{
306 rdip t7
307 mfence
308 ldstl t1, seg, riprel, disp
309 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
310 stul t1, seg, riprel, disp
311 mfence
312};
313
314def macroop ADC_R_M
315{
316 ld t1, seg, sib, disp
317 adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
318};
319
320def macroop ADC_R_P
321{
322 rdip t7
323 ld t1, seg, riprel, disp
324 adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
325};
326
327def macroop SBB_R_R
328{
329 sbb reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
330};
331
332def macroop SBB_R_I
333{
334 limm t1, imm
335 sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
336};
337
338def macroop SBB_R_M
339{
340 ld t1, seg, sib, disp
341 sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
342};
343
344def macroop SBB_R_P
345{
346 rdip t7
347 ld t1, seg, riprel, disp
348 sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
349};
350
351def macroop SBB_M_I
352{
353 limm t2, imm
354 ldst t1, seg, sib, disp
355 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
356 st t1, seg, sib, disp
357};
358
359def macroop SBB_P_I
360{
361 rdip t7
362 limm t2, imm
363 ldst t1, seg, riprel, disp
364 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
365 st t1, seg, riprel, disp
366};
367
368def macroop SBB_LOCKED_M_I
369{
370 limm t2, imm
371 mfence
372 ldstl t1, seg, sib, disp
373 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
374 stul t1, seg, sib, disp
375 mfence
376};
377
378def macroop SBB_LOCKED_P_I
379{
380 rdip t7
381 limm t2, imm
382 mfence
383 ldstl t1, seg, riprel, disp
384 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
385 stul t1, seg, riprel, disp
386 mfence
387};
388
389def macroop SBB_M_R
390{
391 ldst t1, seg, sib, disp
392 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
393 st t1, seg, sib, disp
394};
395
396def macroop SBB_P_R
397{
398 rdip t7
399 ldst t1, seg, riprel, disp
400 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
401 st t1, seg, riprel, disp
402};
403
404def macroop SBB_LOCKED_M_R
405{
406 mfence
407 ldstl t1, seg, sib, disp
408 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
409 stul t1, seg, sib, disp
410 mfence
411};
412
413def macroop SBB_LOCKED_P_R
414{
415 rdip t7
416 mfence
417 ldstl t1, seg, riprel, disp
418 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
419 stul t1, seg, riprel, disp
420 mfence
421};
422
423def macroop NEG_R
424{
425 sub reg, t0, reg, flags=(CF,OF,SF,ZF,AF,PF)
426};
427
428def macroop NEG_M
429{
430 ldst t1, seg, sib, disp
431 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
432 st t1, seg, sib, disp
433};
434
435def macroop NEG_P
436{
437 rdip t7
438 ldst t1, seg, riprel, disp
439 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
440 st t1, seg, riprel, disp
441};
442
443def macroop NEG_LOCKED_M
444{
445 mfence
446 ldstl t1, seg, sib, disp
447 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
448 stul t1, seg, sib, disp
449 mfence
450};
451
452def macroop NEG_LOCKED_P
453{
454 rdip t7
455 mfence
456 ldstl t1, seg, riprel, disp
457 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
458 stul t1, seg, riprel, disp
459 mfence
460};
461'''