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