logical.py revision 7087
15081Sgblack@eecs.umich.edu# Copyright (c) 2007 The Hewlett-Packard Development Company
25081Sgblack@eecs.umich.edu# All rights reserved.
35081Sgblack@eecs.umich.edu#
47087Snate@binkert.org# The license below extends only to copyright in the software and shall
57087Snate@binkert.org# not be construed as granting a license to any other intellectual
67087Snate@binkert.org# property including but not limited to intellectual property relating
77087Snate@binkert.org# to a hardware implementation of the functionality of the software
87087Snate@binkert.org# licensed hereunder.  You may use the software subject to the license
97087Snate@binkert.org# terms below provided that you ensure that this notice is replicated
107087Snate@binkert.org# unmodified and in its entirety in all distributions of the software,
117087Snate@binkert.org# modified or unmodified, in source code or in binary form.
125081Sgblack@eecs.umich.edu#
137087Snate@binkert.org# Redistribution and use in source and binary forms, with or without
147087Snate@binkert.org# modification, are permitted provided that the following conditions are
157087Snate@binkert.org# met: redistributions of source code must retain the above copyright
167087Snate@binkert.org# notice, this list of conditions and the following disclaimer;
177087Snate@binkert.org# redistributions in binary form must reproduce the above copyright
187087Snate@binkert.org# notice, this list of conditions and the following disclaimer in the
197087Snate@binkert.org# documentation and/or other materials provided with the distribution;
207087Snate@binkert.org# neither the name of the copyright holders nor the names of its
215081Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
227087Snate@binkert.org# this software without specific prior written permission.
235081Sgblack@eecs.umich.edu#
245081Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
255081Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
265081Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
275081Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
285081Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
295081Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
305081Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
315081Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
325081Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
335081Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
345081Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
355081Sgblack@eecs.umich.edu#
365081Sgblack@eecs.umich.edu# Authors: Gabe Black
375081Sgblack@eecs.umich.edu
385081Sgblack@eecs.umich.edumicrocode = '''
395081Sgblack@eecs.umich.edudef macroop OR_R_R
405081Sgblack@eecs.umich.edu{
415081Sgblack@eecs.umich.edu    or reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
425081Sgblack@eecs.umich.edu};
435081Sgblack@eecs.umich.edu
445081Sgblack@eecs.umich.edudef macroop OR_M_I
455081Sgblack@eecs.umich.edu{
465081Sgblack@eecs.umich.edu    limm t2, imm
475119Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
485081Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
495081Sgblack@eecs.umich.edu    st t1, seg, sib, disp
505081Sgblack@eecs.umich.edu};
515081Sgblack@eecs.umich.edu
525081Sgblack@eecs.umich.edudef macroop OR_P_I
535081Sgblack@eecs.umich.edu{
545081Sgblack@eecs.umich.edu    limm t2, imm
555081Sgblack@eecs.umich.edu    rdip t7
565119Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
575081Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
585081Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
595081Sgblack@eecs.umich.edu};
605081Sgblack@eecs.umich.edu
616082Sgblack@eecs.umich.edudef macroop OR_LOCKED_M_I
626082Sgblack@eecs.umich.edu{
636082Sgblack@eecs.umich.edu    limm t2, imm
646082Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
656082Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
666082Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
676082Sgblack@eecs.umich.edu};
686082Sgblack@eecs.umich.edu
696082Sgblack@eecs.umich.edudef macroop OR_LOCKED_P_I
706082Sgblack@eecs.umich.edu{
716082Sgblack@eecs.umich.edu    limm t2, imm
726082Sgblack@eecs.umich.edu    rdip t7
736082Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
746082Sgblack@eecs.umich.edu    or t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
756082Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
766082Sgblack@eecs.umich.edu};
776082Sgblack@eecs.umich.edu
785081Sgblack@eecs.umich.edudef macroop OR_M_R
795081Sgblack@eecs.umich.edu{
805119Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
815081Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
825081Sgblack@eecs.umich.edu    st t1, seg, sib, disp
835081Sgblack@eecs.umich.edu};
845081Sgblack@eecs.umich.edu
855081Sgblack@eecs.umich.edudef macroop OR_P_R
865081Sgblack@eecs.umich.edu{
875081Sgblack@eecs.umich.edu    rdip t7
885119Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
895081Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
905081Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
915081Sgblack@eecs.umich.edu};
925081Sgblack@eecs.umich.edu
936082Sgblack@eecs.umich.edudef macroop OR_LOCKED_M_R
946082Sgblack@eecs.umich.edu{
956082Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
966082Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
976082Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
986082Sgblack@eecs.umich.edu};
996082Sgblack@eecs.umich.edu
1006082Sgblack@eecs.umich.edudef macroop OR_LOCKED_P_R
1016082Sgblack@eecs.umich.edu{
1026082Sgblack@eecs.umich.edu    rdip t7
1036082Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
1046082Sgblack@eecs.umich.edu    or t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1056082Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
1066082Sgblack@eecs.umich.edu};
1076082Sgblack@eecs.umich.edu
1085081Sgblack@eecs.umich.edudef macroop OR_R_M
1095081Sgblack@eecs.umich.edu{
1105081Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
1115081Sgblack@eecs.umich.edu    or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1125081Sgblack@eecs.umich.edu};
1135081Sgblack@eecs.umich.edu
1145081Sgblack@eecs.umich.edudef macroop OR_R_P
1155081Sgblack@eecs.umich.edu{
1165081Sgblack@eecs.umich.edu    rdip t7
1175081Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
1185081Sgblack@eecs.umich.edu    or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1195081Sgblack@eecs.umich.edu};
1205081Sgblack@eecs.umich.edu
1215081Sgblack@eecs.umich.edudef macroop OR_R_I
1225081Sgblack@eecs.umich.edu{
1235081Sgblack@eecs.umich.edu    limm t1, imm
1245081Sgblack@eecs.umich.edu    or reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1255081Sgblack@eecs.umich.edu};
1265081Sgblack@eecs.umich.edu
1275081Sgblack@eecs.umich.edudef macroop XOR_R_R
1285081Sgblack@eecs.umich.edu{
1295081Sgblack@eecs.umich.edu    xor reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
1305081Sgblack@eecs.umich.edu};
1315081Sgblack@eecs.umich.edu
1325081Sgblack@eecs.umich.edudef macroop XOR_R_I
1335081Sgblack@eecs.umich.edu{
1345081Sgblack@eecs.umich.edu    limm t1, imm
1355081Sgblack@eecs.umich.edu    xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
1365081Sgblack@eecs.umich.edu};
1375081Sgblack@eecs.umich.edu
1385081Sgblack@eecs.umich.edudef macroop XOR_M_I
1395081Sgblack@eecs.umich.edu{
1405081Sgblack@eecs.umich.edu    limm t2, imm
1415119Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
1425081Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1435081Sgblack@eecs.umich.edu    st t1, seg, sib, disp
1445081Sgblack@eecs.umich.edu};
1455081Sgblack@eecs.umich.edu
1465081Sgblack@eecs.umich.edudef macroop XOR_P_I
1475081Sgblack@eecs.umich.edu{
1485081Sgblack@eecs.umich.edu    limm t2, imm
1495081Sgblack@eecs.umich.edu    rdip t7
1505119Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
1515081Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1525081Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
1535081Sgblack@eecs.umich.edu};
1545081Sgblack@eecs.umich.edu
1556087Sgblack@eecs.umich.edudef macroop XOR_LOCKED_M_I
1566087Sgblack@eecs.umich.edu{
1576087Sgblack@eecs.umich.edu    limm t2, imm
1586087Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
1596087Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1606087Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
1616087Sgblack@eecs.umich.edu};
1626087Sgblack@eecs.umich.edu
1636087Sgblack@eecs.umich.edudef macroop XOR_LOCKED_P_I
1646087Sgblack@eecs.umich.edu{
1656087Sgblack@eecs.umich.edu    limm t2, imm
1666087Sgblack@eecs.umich.edu    rdip t7
1676087Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
1686087Sgblack@eecs.umich.edu    xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF)
1696087Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
1706087Sgblack@eecs.umich.edu};
1716087Sgblack@eecs.umich.edu
1725081Sgblack@eecs.umich.edudef macroop XOR_M_R
1735081Sgblack@eecs.umich.edu{
1745119Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
1755081Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1765081Sgblack@eecs.umich.edu    st t1, seg, sib, disp
1775081Sgblack@eecs.umich.edu};
1785081Sgblack@eecs.umich.edu
1795081Sgblack@eecs.umich.edudef macroop XOR_P_R
1805081Sgblack@eecs.umich.edu{
1815081Sgblack@eecs.umich.edu    rdip t7
1825119Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
1835081Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1845081Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
1855081Sgblack@eecs.umich.edu};
1865081Sgblack@eecs.umich.edu
1876087Sgblack@eecs.umich.edudef macroop XOR_LOCKED_M_R
1886087Sgblack@eecs.umich.edu{
1896087Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
1906087Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1916087Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
1926087Sgblack@eecs.umich.edu};
1936087Sgblack@eecs.umich.edu
1946087Sgblack@eecs.umich.edudef macroop XOR_LOCKED_P_R
1956087Sgblack@eecs.umich.edu{
1966087Sgblack@eecs.umich.edu    rdip t7
1976087Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
1986087Sgblack@eecs.umich.edu    xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
1996087Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
2006087Sgblack@eecs.umich.edu};
2016087Sgblack@eecs.umich.edu
2025081Sgblack@eecs.umich.edudef macroop XOR_R_M
2035081Sgblack@eecs.umich.edu{
2045081Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
2055081Sgblack@eecs.umich.edu    xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2065081Sgblack@eecs.umich.edu};
2075081Sgblack@eecs.umich.edu
2085081Sgblack@eecs.umich.edudef macroop XOR_R_P
2095081Sgblack@eecs.umich.edu{
2105081Sgblack@eecs.umich.edu    rdip t7
2115081Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
2125081Sgblack@eecs.umich.edu    xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2135081Sgblack@eecs.umich.edu};
2145081Sgblack@eecs.umich.edu
2155081Sgblack@eecs.umich.edudef macroop AND_R_R
2165081Sgblack@eecs.umich.edu{
2175081Sgblack@eecs.umich.edu    and reg, reg, regm, flags=(OF,SF,ZF,PF,CF)
2185081Sgblack@eecs.umich.edu};
2195081Sgblack@eecs.umich.edu
2205081Sgblack@eecs.umich.edudef macroop AND_R_M
2215081Sgblack@eecs.umich.edu{
2225081Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
2235081Sgblack@eecs.umich.edu    and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2245081Sgblack@eecs.umich.edu};
2255081Sgblack@eecs.umich.edu
2265081Sgblack@eecs.umich.edudef macroop AND_R_P
2275081Sgblack@eecs.umich.edu{
2285081Sgblack@eecs.umich.edu    rdip t7
2295081Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
2305081Sgblack@eecs.umich.edu    and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2315081Sgblack@eecs.umich.edu};
2325081Sgblack@eecs.umich.edu
2335081Sgblack@eecs.umich.edudef macroop AND_R_I
2345081Sgblack@eecs.umich.edu{
2355081Sgblack@eecs.umich.edu    limm t1, imm
2365081Sgblack@eecs.umich.edu    and reg, reg, t1, flags=(OF,SF,ZF,PF,CF)
2375081Sgblack@eecs.umich.edu};
2385081Sgblack@eecs.umich.edu
2395081Sgblack@eecs.umich.edudef macroop AND_M_I
2405081Sgblack@eecs.umich.edu{
2415119Sgblack@eecs.umich.edu    ldst t2, seg, sib, disp
2425081Sgblack@eecs.umich.edu    limm t1, imm
2435081Sgblack@eecs.umich.edu    and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
2445081Sgblack@eecs.umich.edu    st t2, seg, sib, disp
2455081Sgblack@eecs.umich.edu};
2465081Sgblack@eecs.umich.edu
2475081Sgblack@eecs.umich.edudef macroop AND_P_I
2485081Sgblack@eecs.umich.edu{
2495081Sgblack@eecs.umich.edu    rdip t7
2505119Sgblack@eecs.umich.edu    ldst t2, seg, riprel, disp
2515081Sgblack@eecs.umich.edu    limm t1, imm
2525081Sgblack@eecs.umich.edu    and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
2535081Sgblack@eecs.umich.edu    st t2, seg, riprel, disp
2545081Sgblack@eecs.umich.edu};
2555081Sgblack@eecs.umich.edu
2566085Sgblack@eecs.umich.edudef macroop AND_LOCKED_M_I
2576085Sgblack@eecs.umich.edu{
2586085Sgblack@eecs.umich.edu    ldstl t2, seg, sib, disp
2596085Sgblack@eecs.umich.edu    limm t1, imm
2606085Sgblack@eecs.umich.edu    and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
2616085Sgblack@eecs.umich.edu    stul t2, seg, sib, disp
2626085Sgblack@eecs.umich.edu};
2636085Sgblack@eecs.umich.edu
2646085Sgblack@eecs.umich.edudef macroop AND_LOCKED_P_I
2656085Sgblack@eecs.umich.edu{
2666085Sgblack@eecs.umich.edu    rdip t7
2676085Sgblack@eecs.umich.edu    ldstl t2, seg, riprel, disp
2686085Sgblack@eecs.umich.edu    limm t1, imm
2696085Sgblack@eecs.umich.edu    and t2, t2, t1, flags=(OF,SF,ZF,PF,CF)
2706085Sgblack@eecs.umich.edu    stul t2, seg, riprel, disp
2716085Sgblack@eecs.umich.edu};
2726085Sgblack@eecs.umich.edu
2735081Sgblack@eecs.umich.edudef macroop AND_M_R
2745081Sgblack@eecs.umich.edu{
2755119Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
2765081Sgblack@eecs.umich.edu    and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
2775081Sgblack@eecs.umich.edu    st t1, seg, sib, disp
2785081Sgblack@eecs.umich.edu};
2795081Sgblack@eecs.umich.edu
2805081Sgblack@eecs.umich.edudef macroop AND_P_R
2815081Sgblack@eecs.umich.edu{
2825081Sgblack@eecs.umich.edu    rdip t7
2835119Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
2845081Sgblack@eecs.umich.edu    and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
2855081Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
2865081Sgblack@eecs.umich.edu};
2875081Sgblack@eecs.umich.edu
2886085Sgblack@eecs.umich.edudef macroop AND_LOCKED_M_R
2896085Sgblack@eecs.umich.edu{
2906085Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
2916085Sgblack@eecs.umich.edu    and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
2926085Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
2936085Sgblack@eecs.umich.edu};
2946085Sgblack@eecs.umich.edu
2956085Sgblack@eecs.umich.edudef macroop AND_LOCKED_P_R
2966085Sgblack@eecs.umich.edu{
2976085Sgblack@eecs.umich.edu    rdip t7
2986085Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
2996085Sgblack@eecs.umich.edu    and t1, t1, reg, flags=(OF,SF,ZF,PF,CF)
3006085Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
3016085Sgblack@eecs.umich.edu};
3026085Sgblack@eecs.umich.edu
3035081Sgblack@eecs.umich.edudef macroop NOT_R
3045081Sgblack@eecs.umich.edu{
3055081Sgblack@eecs.umich.edu    limm t1, -1
3065081Sgblack@eecs.umich.edu    xor reg, reg, t1
3075081Sgblack@eecs.umich.edu};
3085081Sgblack@eecs.umich.edu
3095081Sgblack@eecs.umich.edudef macroop NOT_M
3105081Sgblack@eecs.umich.edu{
3115081Sgblack@eecs.umich.edu    limm t1, -1
3125119Sgblack@eecs.umich.edu    ldst t2, seg, sib, disp
3135081Sgblack@eecs.umich.edu    xor t2, t2, t1
3145081Sgblack@eecs.umich.edu    st t2, seg, sib, disp
3155081Sgblack@eecs.umich.edu};
3165081Sgblack@eecs.umich.edu
3175081Sgblack@eecs.umich.edudef macroop NOT_P
3185081Sgblack@eecs.umich.edu{
3195081Sgblack@eecs.umich.edu    limm t1, -1
3205081Sgblack@eecs.umich.edu    rdip t7
3215119Sgblack@eecs.umich.edu    ldst t2, seg, riprel, disp
3225081Sgblack@eecs.umich.edu    xor t2, t2, t1
3235081Sgblack@eecs.umich.edu    st t2, seg, riprel, disp
3245081Sgblack@eecs.umich.edu};
3256089Sgblack@eecs.umich.edu
3266089Sgblack@eecs.umich.edudef macroop NOT_LOCKED_M
3276089Sgblack@eecs.umich.edu{
3286089Sgblack@eecs.umich.edu    limm t1, -1
3296089Sgblack@eecs.umich.edu    ldstl t2, seg, sib, disp
3306089Sgblack@eecs.umich.edu    xor t2, t2, t1
3316089Sgblack@eecs.umich.edu    stul t2, seg, sib, disp
3326089Sgblack@eecs.umich.edu};
3336089Sgblack@eecs.umich.edu
3346089Sgblack@eecs.umich.edudef macroop NOT_LOCKED_P
3356089Sgblack@eecs.umich.edu{
3366089Sgblack@eecs.umich.edu    limm t1, -1
3376089Sgblack@eecs.umich.edu    rdip t7
3386089Sgblack@eecs.umich.edu    ldstl t2, seg, riprel, disp
3396089Sgblack@eecs.umich.edu    xor t2, t2, t1
3406089Sgblack@eecs.umich.edu    stul t2, seg, riprel, disp
3416089Sgblack@eecs.umich.edu};
3425081Sgblack@eecs.umich.edu'''
343