logical.py revision 8610
14338Sgblack@eecs.umich.edu# Copyright (c) 2007 The Hewlett-Packard Development Company
24338Sgblack@eecs.umich.edu# All rights reserved.
34338Sgblack@eecs.umich.edu#
44338Sgblack@eecs.umich.edu# The license below extends only to copyright in the software and shall
54338Sgblack@eecs.umich.edu# not be construed as granting a license to any other intellectual
64338Sgblack@eecs.umich.edu# property including but not limited to intellectual property relating
74338Sgblack@eecs.umich.edu# to a hardware implementation of the functionality of the software
84338Sgblack@eecs.umich.edu# licensed hereunder.  You may use the software subject to the license
94338Sgblack@eecs.umich.edu# terms below provided that you ensure that this notice is replicated
104338Sgblack@eecs.umich.edu# unmodified and in its entirety in all distributions of the software,
114338Sgblack@eecs.umich.edu# modified or unmodified, in source code or in binary form.
124338Sgblack@eecs.umich.edu#
134338Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
144338Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
154338Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
164338Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
174338Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
184338Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
194338Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
204338Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
214338Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
224338Sgblack@eecs.umich.edu# this software without specific prior written permission.
234338Sgblack@eecs.umich.edu#
244338Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
254338Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
264338Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
274338Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
284338Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
294338Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
304338Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
314338Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
324338Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
334338Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
344338Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
354338Sgblack@eecs.umich.edu#
364338Sgblack@eecs.umich.edu# Authors: Gabe Black
374338Sgblack@eecs.umich.edu
384338Sgblack@eecs.umich.edumicrocode = '''
394338Sgblack@eecs.umich.edudef macroop OR_R_R
404338Sgblack@eecs.umich.edu{
414338Sgblack@eecs.umich.edu    or reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
424338Sgblack@eecs.umich.edu};
434338Sgblack@eecs.umich.edu
444338Sgblack@eecs.umich.edudef macroop OR_M_I
454338Sgblack@eecs.umich.edu{
464338Sgblack@eecs.umich.edu    limm t2, imm
474338Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
484338Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
494338Sgblack@eecs.umich.edu    st t1, seg, sib, disp
504338Sgblack@eecs.umich.edu};
514338Sgblack@eecs.umich.edu
524338Sgblack@eecs.umich.edudef macroop OR_P_I
534338Sgblack@eecs.umich.edu{
544338Sgblack@eecs.umich.edu    limm t2, imm
554338Sgblack@eecs.umich.edu    rdip t7
564338Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
574338Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
584519Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
594519Sgblack@eecs.umich.edu};
604519Sgblack@eecs.umich.edu
614519Sgblack@eecs.umich.edudef macroop OR_LOCKED_M_I
624338Sgblack@eecs.umich.edu{
634338Sgblack@eecs.umich.edu    limm t2, imm
644344Sgblack@eecs.umich.edu    mfence
654338Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
664338Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
674338Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
684338Sgblack@eecs.umich.edu    mfence
694338Sgblack@eecs.umich.edu};
704371Sgblack@eecs.umich.edu
714343Sgblack@eecs.umich.edudef macroop OR_LOCKED_P_I
724343Sgblack@eecs.umich.edu{
734343Sgblack@eecs.umich.edu    limm t2, imm
744371Sgblack@eecs.umich.edu    rdip t7
754371Sgblack@eecs.umich.edu    mfence
764371Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
774338Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
784338Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
794371Sgblack@eecs.umich.edu    mfence
804371Sgblack@eecs.umich.edu};
814338Sgblack@eecs.umich.edu
824338Sgblack@eecs.umich.edudef macroop OR_M_R
834338Sgblack@eecs.umich.edu{
844338Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
854338Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
864338Sgblack@eecs.umich.edu    st t1, seg, sib, disp
874371Sgblack@eecs.umich.edu};
884371Sgblack@eecs.umich.edu
894371Sgblack@eecs.umich.edudef macroop OR_P_R
904371Sgblack@eecs.umich.edu{
914371Sgblack@eecs.umich.edu    rdip t7
924371Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
934371Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
944371Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
954371Sgblack@eecs.umich.edu};
964371Sgblack@eecs.umich.edu
974338Sgblack@eecs.umich.edudef macroop OR_LOCKED_M_R
984338Sgblack@eecs.umich.edu{
994338Sgblack@eecs.umich.edu    mfence
1004519Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
1014519Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1024519Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
1034519Sgblack@eecs.umich.edu    mfence
1044519Sgblack@eecs.umich.edu};
1054519Sgblack@eecs.umich.edu
1064519Sgblack@eecs.umich.edudef macroop OR_LOCKED_P_R
1074519Sgblack@eecs.umich.edu{
1084519Sgblack@eecs.umich.edu    rdip t7
1094519Sgblack@eecs.umich.edu    mfence
1104519Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
1114519Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1124519Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
1134519Sgblack@eecs.umich.edu    mfence
1144519Sgblack@eecs.umich.edu};
1154519Sgblack@eecs.umich.edu
1164519Sgblack@eecs.umich.edudef macroop OR_R_M
1174519Sgblack@eecs.umich.edu{
1184519Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
1194519Sgblack@eecs.umich.edu    or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1204519Sgblack@eecs.umich.edu};
1214519Sgblack@eecs.umich.edu
1224338Sgblack@eecs.umich.edudef macroop OR_R_P
1234338Sgblack@eecs.umich.edu{
1244519Sgblack@eecs.umich.edu    rdip t7
1254519Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
1264519Sgblack@eecs.umich.edu    or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1274519Sgblack@eecs.umich.edu};
1284519Sgblack@eecs.umich.edu
1294338Sgblack@eecs.umich.edudef macroop OR_R_I
1304519Sgblack@eecs.umich.edu{
1314519Sgblack@eecs.umich.edu    limm t1, imm
1324338Sgblack@eecs.umich.edu    or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1334338Sgblack@eecs.umich.edu};
1344519Sgblack@eecs.umich.edu
1354519Sgblack@eecs.umich.edudef macroop XOR_R_R
1364519Sgblack@eecs.umich.edu{
1374519Sgblack@eecs.umich.edu    xor reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
1384519Sgblack@eecs.umich.edu};
1394519Sgblack@eecs.umich.edu
1404519Sgblack@eecs.umich.edudef macroop XOR_R_I
1414519Sgblack@eecs.umich.edu{
1424338Sgblack@eecs.umich.edu    limm t1, imm
1434338Sgblack@eecs.umich.edu    xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1444338Sgblack@eecs.umich.edu};
1454371Sgblack@eecs.umich.edu
1464371Sgblack@eecs.umich.edudef macroop XOR_M_I
1474519Sgblack@eecs.umich.edu{
1484519Sgblack@eecs.umich.edu    limm t2, imm
1494519Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
1504519Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1514519Sgblack@eecs.umich.edu    st t1, seg, sib, disp
1524338Sgblack@eecs.umich.edu};
1534371Sgblack@eecs.umich.edu
1544519Sgblack@eecs.umich.edudef macroop XOR_P_I
1554519Sgblack@eecs.umich.edu{
1564519Sgblack@eecs.umich.edu    limm t2, imm
1574519Sgblack@eecs.umich.edu    rdip t7
1584519Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
1594338Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1604338Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
1614338Sgblack@eecs.umich.edu};
1624338Sgblack@eecs.umich.edu
1634338Sgblack@eecs.umich.edudef macroop XOR_LOCKED_M_I
1644519Sgblack@eecs.umich.edu{
1654338Sgblack@eecs.umich.edu    limm t2, imm
1664519Sgblack@eecs.umich.edu    mfence
1674338Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
1684338Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1694338Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
1704338Sgblack@eecs.umich.edu    mfence
1714519Sgblack@eecs.umich.edu};
1724519Sgblack@eecs.umich.edu
1734519Sgblack@eecs.umich.edudef macroop XOR_LOCKED_P_I
1744519Sgblack@eecs.umich.edu{
1754519Sgblack@eecs.umich.edu    limm t2, imm
1764519Sgblack@eecs.umich.edu    rdip t7
1774371Sgblack@eecs.umich.edu    mfence
1784519Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
1794519Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1804519Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
1814519Sgblack@eecs.umich.edu    mfence
1824519Sgblack@eecs.umich.edu};
1834338Sgblack@eecs.umich.edu
1844338Sgblack@eecs.umich.edudef macroop XOR_M_R
1854338Sgblack@eecs.umich.edu{
1864338Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
1874519Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1884371Sgblack@eecs.umich.edu    st t1, seg, sib, disp
1894519Sgblack@eecs.umich.edu};
1904519Sgblack@eecs.umich.edu
1914519Sgblack@eecs.umich.edudef macroop XOR_P_R
1924519Sgblack@eecs.umich.edu{
1934519Sgblack@eecs.umich.edu    rdip t7
1944519Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
1954519Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1964519Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
1974519Sgblack@eecs.umich.edu};
1984519Sgblack@eecs.umich.edu
1994519Sgblack@eecs.umich.edudef macroop XOR_LOCKED_M_R
2004338Sgblack@eecs.umich.edu{
2014338Sgblack@eecs.umich.edu    mfence
2024338Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
2034338Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
2044519Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
2054519Sgblack@eecs.umich.edu    mfence
2064519Sgblack@eecs.umich.edu};
2074519Sgblack@eecs.umich.edu
2084519Sgblack@eecs.umich.edudef macroop XOR_LOCKED_P_R
2094519Sgblack@eecs.umich.edu{
2104519Sgblack@eecs.umich.edu    rdip t7
2114519Sgblack@eecs.umich.edu    mfence
2124519Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
2134519Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
2144519Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
2154519Sgblack@eecs.umich.edu    mfence
2164519Sgblack@eecs.umich.edu};
2174519Sgblack@eecs.umich.edu
2184519Sgblack@eecs.umich.edudef macroop XOR_R_M
2194519Sgblack@eecs.umich.edu{
2204519Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
2214519Sgblack@eecs.umich.edu    xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2224519Sgblack@eecs.umich.edu};
2234519Sgblack@eecs.umich.edu
2244519Sgblack@eecs.umich.edudef macroop XOR_R_P
2254519Sgblack@eecs.umich.edu{
2264519Sgblack@eecs.umich.edu    rdip t7
2274519Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
2284519Sgblack@eecs.umich.edu    xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2294519Sgblack@eecs.umich.edu};
2304519Sgblack@eecs.umich.edu
2314519Sgblack@eecs.umich.edudef macroop AND_R_R
2324519Sgblack@eecs.umich.edu{
2334519Sgblack@eecs.umich.edu    and reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
2344519Sgblack@eecs.umich.edu};
2354519Sgblack@eecs.umich.edu
2364519Sgblack@eecs.umich.edudef macroop AND_R_M
2374519Sgblack@eecs.umich.edu{
2384519Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
2394519Sgblack@eecs.umich.edu    and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2404519Sgblack@eecs.umich.edu};
2414519Sgblack@eecs.umich.edu
2424519Sgblack@eecs.umich.edudef macroop AND_R_P
2434519Sgblack@eecs.umich.edu{
2444519Sgblack@eecs.umich.edu    rdip t7
2454519Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
2464519Sgblack@eecs.umich.edu    and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2474519Sgblack@eecs.umich.edu};
2484519Sgblack@eecs.umich.edu
2494519Sgblack@eecs.umich.edudef macroop AND_R_I
2504519Sgblack@eecs.umich.edu{
2514519Sgblack@eecs.umich.edu    limm t1, imm
2524519Sgblack@eecs.umich.edu    and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2534519Sgblack@eecs.umich.edu};
2544519Sgblack@eecs.umich.edu
2554519Sgblack@eecs.umich.edudef macroop AND_M_I
2564519Sgblack@eecs.umich.edu{
2574519Sgblack@eecs.umich.edu    ldst t2, seg, sib, disp
2584519Sgblack@eecs.umich.edu    limm t1, imm
2594519Sgblack@eecs.umich.edu    and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
2604519Sgblack@eecs.umich.edu    st t2, seg, sib, disp
2614519Sgblack@eecs.umich.edu};
2624519Sgblack@eecs.umich.edu
2634519Sgblack@eecs.umich.edudef macroop AND_P_I
2644519Sgblack@eecs.umich.edu{
2654519Sgblack@eecs.umich.edu    rdip t7
2664519Sgblack@eecs.umich.edu    ldst t2, seg, riprel, disp
2674519Sgblack@eecs.umich.edu    limm t1, imm
2684519Sgblack@eecs.umich.edu    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'''
371