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 OR_R_R
40{
41 or reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
42};
43
44def macroop OR_M_I
45{
46 limm t2, imm
47 ldst t1, seg, sib, disp
48 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
49 st t1, seg, sib, disp
50};
51
52def macroop OR_P_I
53{
54 limm t2, imm
55 rdip t7
56 ldst t1, seg, riprel, disp
57 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
58 st t1, seg, riprel, disp
59};
60
61def macroop OR_LOCKED_M_I
62{
63 limm t2, imm
64 mfence
65 ldstl t1, seg, sib, disp
66 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
67 stul t1, seg, sib, disp
68 mfence
69};
70
71def macroop OR_LOCKED_P_I
72{
73 limm t2, imm
74 rdip t7
75 mfence
76 ldstl t1, seg, riprel, disp
77 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
78 stul t1, seg, riprel, disp
79 mfence
80};
81
82def macroop OR_M_R
83{
84 ldst t1, seg, sib, disp
85 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
86 st t1, seg, sib, disp
87};
88
89def macroop OR_P_R
90{
91 rdip t7
92 ldst t1, seg, riprel, disp
93 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
94 st t1, seg, riprel, disp
95};
96
97def macroop OR_LOCKED_M_R
98{
99 mfence
100 ldstl t1, seg, sib, disp
101 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
102 stul t1, seg, sib, disp
103 mfence
104};
105
106def macroop OR_LOCKED_P_R
107{
108 rdip t7
109 mfence
110 ldstl t1, seg, riprel, disp
111 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
112 stul t1, seg, riprel, disp
113 mfence
114};
115
116def macroop OR_R_M
117{
118 ld t1, seg, sib, disp
119 or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
120};
121
122def macroop OR_R_P
123{
124 rdip t7
125 ld t1, seg, riprel, disp
126 or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
127};
128
129def macroop OR_R_I
130{
131 limm t1, imm
132 or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
133};
134
135def macroop XOR_R_R
136{
137 xor reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
138};
139
140def macroop XOR_R_I
141{
142 limm t1, imm
143 xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
144};
145
146def macroop XOR_M_I
147{
148 limm t2, imm
149 ldst t1, seg, sib, disp
150 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
151 st t1, seg, sib, disp
152};
153
154def macroop XOR_P_I
155{
156 limm t2, imm
157 rdip t7
158 ldst t1, seg, riprel, disp
159 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
160 st t1, seg, riprel, disp
161};
162
163def macroop XOR_LOCKED_M_I
164{
165 limm t2, imm
166 mfence
167 ldstl t1, seg, sib, disp
168 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
169 stul t1, seg, sib, disp
170 mfence
171};
172
173def macroop XOR_LOCKED_P_I
174{
175 limm t2, imm
176 rdip t7
177 mfence
178 ldstl t1, seg, riprel, disp
179 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
180 stul t1, seg, riprel, disp
181 mfence
182};
183
184def macroop XOR_M_R
185{
186 ldst t1, seg, sib, disp
187 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
188 st t1, seg, sib, disp
189};
190
191def macroop XOR_P_R
192{
193 rdip t7
194 ldst t1, seg, riprel, disp
195 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
196 st t1, seg, riprel, disp
197};
198
199def macroop XOR_LOCKED_M_R
200{
201 mfence
202 ldstl t1, seg, sib, disp
203 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
204 stul t1, seg, sib, disp
205 mfence
206};
207
208def macroop XOR_LOCKED_P_R
209{
210 rdip t7
211 mfence
212 ldstl t1, seg, riprel, disp
213 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
214 stul t1, seg, riprel, disp
215 mfence
216};
217
218def macroop XOR_R_M
219{
220 ld t1, seg, sib, disp
221 xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
222};
223
224def macroop XOR_R_P
225{
226 rdip t7
227 ld t1, seg, riprel, disp
228 xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
229};
230
231def macroop AND_R_R
232{
233 and reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
234};
235
236def macroop AND_R_M
237{
238 ld t1, seg, sib, disp
239 and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
240};
241
242def macroop AND_R_P
243{
244 rdip t7
245 ld t1, seg, riprel, disp
246 and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
247};
248
249def macroop AND_R_I
250{
251 limm t1, imm
252 and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
253};
254
255def macroop AND_M_I
256{
257 ldst t2, seg, sib, disp
258 limm t1, imm
259 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
260 st t2, seg, sib, disp
261};
262
263def macroop AND_P_I
264{
265 rdip t7
266 ldst t2, seg, riprel, disp
267 limm t1, imm
268 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
269 st t2, seg, riprel, disp
270};
271
272def macroop AND_LOCKED_M_I
273{
274 mfence
275 ldstl t2, seg, sib, disp
276 limm t1, imm
277 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
278 stul t2, seg, sib, disp
279 mfence
280};
281
282def macroop AND_LOCKED_P_I
283{
284 rdip t7
285 mfence
286 ldstl t2, seg, riprel, disp
287 limm t1, imm
288 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
289 stul t2, seg, riprel, disp
290 mfence
291};
292
293def macroop AND_M_R
294{
295 ldst t1, seg, sib, disp
296 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
297 st t1, seg, sib, disp
298};
299
300def macroop AND_P_R
301{
302 rdip t7
303 ldst t1, seg, riprel, disp
304 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
305 st t1, seg, riprel, disp
306};
307
308def macroop AND_LOCKED_M_R
309{
310 mfence
311 ldstl t1, seg, sib, disp
312 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
313 stul t1, seg, sib, disp
314 mfence
315};
316
317def macroop AND_LOCKED_P_R
318{
319 rdip t7
320 mfence
321 ldstl t1, seg, riprel, disp
322 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
323 stul t1, seg, riprel, disp
324 mfence
325};
326
327def macroop NOT_R
328{
329 limm t1, -1
330 xor reg, reg, t1
331};
332
333def macroop NOT_M
334{
335 limm t1, -1
336 ldst t2, seg, sib, disp
337 xor t2, t2, t1
338 st t2, seg, sib, disp
339};
340
341def macroop NOT_P
342{
343 limm t1, -1
344 rdip t7
345 ldst t2, seg, riprel, disp
346 xor t2, t2, t1
347 st t2, seg, riprel, disp
348};
349
350def macroop NOT_LOCKED_M
351{
352 limm t1, -1
353 mfence
354 ldstl t2, seg, sib, disp
355 xor t2, t2, t1
356 stul t2, seg, sib, disp
357 mfence
358};
359
360def macroop NOT_LOCKED_P
361{
362 limm t1, -1
363 rdip t7
364 mfence
365 ldstl t2, seg, riprel, disp
366 xor t2, t2, t1
367 stul t2, seg, riprel, disp
368 mfence
369};
370'''