bit_test.py revision 6096
15326Sgblack@eecs.umich.edu# Copyright (c) 2008 The Regents of The University of Michigan
25326Sgblack@eecs.umich.edu# All rights reserved.
35326Sgblack@eecs.umich.edu#
45326Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
55326Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
65326Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
75326Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
85326Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
95326Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
105326Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
115326Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
125326Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
135326Sgblack@eecs.umich.edu# this software without specific prior written permission.
145326Sgblack@eecs.umich.edu#
155326Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
165326Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
175326Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
185326Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
195326Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
205326Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
215326Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
225326Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
235326Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
245326Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
255326Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265326Sgblack@eecs.umich.edu#
275326Sgblack@eecs.umich.edu# Authors: Gabe Black
285326Sgblack@eecs.umich.edu
295326Sgblack@eecs.umich.edu# Copyright (c) 2007-2008 The Hewlett-Packard Development Company
305081Sgblack@eecs.umich.edu# All rights reserved.
315081Sgblack@eecs.umich.edu#
325081Sgblack@eecs.umich.edu# Redistribution and use of this software in source and binary forms,
335081Sgblack@eecs.umich.edu# with or without modification, are permitted provided that the
345081Sgblack@eecs.umich.edu# following conditions are met:
355081Sgblack@eecs.umich.edu#
365081Sgblack@eecs.umich.edu# The software must be used only for Non-Commercial Use which means any
375081Sgblack@eecs.umich.edu# use which is NOT directed to receiving any direct monetary
385081Sgblack@eecs.umich.edu# compensation for, or commercial advantage from such use.  Illustrative
395081Sgblack@eecs.umich.edu# examples of non-commercial use are academic research, personal study,
405081Sgblack@eecs.umich.edu# teaching, education and corporate research & development.
415081Sgblack@eecs.umich.edu# Illustrative examples of commercial use are distributing products for
425081Sgblack@eecs.umich.edu# commercial advantage and providing services using the software for
435081Sgblack@eecs.umich.edu# commercial advantage.
445081Sgblack@eecs.umich.edu#
455081Sgblack@eecs.umich.edu# If you wish to use this software or functionality therein that may be
465081Sgblack@eecs.umich.edu# covered by patents for commercial use, please contact:
475081Sgblack@eecs.umich.edu#     Director of Intellectual Property Licensing
485081Sgblack@eecs.umich.edu#     Office of Strategy and Technology
495081Sgblack@eecs.umich.edu#     Hewlett-Packard Company
505081Sgblack@eecs.umich.edu#     1501 Page Mill Road
515081Sgblack@eecs.umich.edu#     Palo Alto, California  94304
525081Sgblack@eecs.umich.edu#
535081Sgblack@eecs.umich.edu# Redistributions of source code must retain the above copyright notice,
545081Sgblack@eecs.umich.edu# this list of conditions and the following disclaimer.  Redistributions
555081Sgblack@eecs.umich.edu# in binary form must reproduce the above copyright notice, this list of
565081Sgblack@eecs.umich.edu# conditions and the following disclaimer in the documentation and/or
575081Sgblack@eecs.umich.edu# other materials provided with the distribution.  Neither the name of
585081Sgblack@eecs.umich.edu# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
595081Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
605081Sgblack@eecs.umich.edu# this software without specific prior written permission.  No right of
615081Sgblack@eecs.umich.edu# sublicense is granted herewith.  Derivatives of the software and
625081Sgblack@eecs.umich.edu# output created using the software may be prepared, but only for
635081Sgblack@eecs.umich.edu# Non-Commercial Uses.  Derivatives of the software may be shared with
645081Sgblack@eecs.umich.edu# others provided: (i) the others agree to abide by the list of
655081Sgblack@eecs.umich.edu# conditions herein which includes the Non-Commercial Use restrictions;
665081Sgblack@eecs.umich.edu# and (ii) such Derivatives of the software include the above copyright
675081Sgblack@eecs.umich.edu# notice to acknowledge the contribution from this software where
685081Sgblack@eecs.umich.edu# applicable, this list of conditions and the disclaimer below.
695081Sgblack@eecs.umich.edu#
705081Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
715081Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
725081Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
735081Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
745081Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
755081Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
765081Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
775081Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
785081Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
795081Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
805081Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
815081Sgblack@eecs.umich.edu#
825081Sgblack@eecs.umich.edu# Authors: Gabe Black
835081Sgblack@eecs.umich.edu
845240Sgblack@eecs.umich.edumicrocode = '''
855240Sgblack@eecs.umich.edudef macroop BT_R_I {
865240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
875240Sgblack@eecs.umich.edu};
885240Sgblack@eecs.umich.edu
895240Sgblack@eecs.umich.edudef macroop BT_M_I {
905306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
915240Sgblack@eecs.umich.edu    # This fudges just a tiny bit, but it's reasonable to expect the
925240Sgblack@eecs.umich.edu    # microcode generation logic to have the log of the various sizes
935240Sgblack@eecs.umich.edu    # floating around as well.
945326Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
955240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
965240Sgblack@eecs.umich.edu};
975240Sgblack@eecs.umich.edu
985240Sgblack@eecs.umich.edudef macroop BT_P_I {
995240Sgblack@eecs.umich.edu    rdip t7
1005306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1015326Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp, dataSize=asz
1025240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1035240Sgblack@eecs.umich.edu};
1045240Sgblack@eecs.umich.edu
1055240Sgblack@eecs.umich.edudef macroop BT_R_R {
1065240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
1075240Sgblack@eecs.umich.edu};
1085240Sgblack@eecs.umich.edu
1095240Sgblack@eecs.umich.edudef macroop BT_M_R {
1105326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
1115326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
1125326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
1135326Sgblack@eecs.umich.edu    ld t1, seg, [scale, index, t3], disp
1145240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
1155240Sgblack@eecs.umich.edu};
1165240Sgblack@eecs.umich.edu
1175240Sgblack@eecs.umich.edudef macroop BT_P_R {
1185240Sgblack@eecs.umich.edu    rdip t7
1195326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
1205326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
1215326Sgblack@eecs.umich.edu    lea t3, flatseg, [ldsz, t3, base], dataSize=asz
1225326Sgblack@eecs.umich.edu    ld t1, seg, [1, t3, t7], disp
1235240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
1245240Sgblack@eecs.umich.edu};
1255240Sgblack@eecs.umich.edu
1265240Sgblack@eecs.umich.edudef macroop BTC_R_I {
1275240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
1285240Sgblack@eecs.umich.edu    limm t1, 1
1295240Sgblack@eecs.umich.edu    roli t1, t1, imm
1305240Sgblack@eecs.umich.edu    xor reg, reg, t1
1315240Sgblack@eecs.umich.edu};
1325240Sgblack@eecs.umich.edu
1335240Sgblack@eecs.umich.edudef macroop BTC_M_I {
1345306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1355240Sgblack@eecs.umich.edu    # This fudges just a tiny bit, but it's reasonable to expect the
1365240Sgblack@eecs.umich.edu    # microcode generation logic to have the log of the various sizes
1375240Sgblack@eecs.umich.edu    # floating around as well.
1385326Sgblack@eecs.umich.edu    limm t4, 1
1395326Sgblack@eecs.umich.edu    roli t4, t4, imm
1405326Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
1415240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1425326Sgblack@eecs.umich.edu    xor t1, t1, t4
1435326Sgblack@eecs.umich.edu    st t1, seg, sib, disp
1445240Sgblack@eecs.umich.edu};
1455240Sgblack@eecs.umich.edu
1465240Sgblack@eecs.umich.edudef macroop BTC_P_I {
1475306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
1485306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1495326Sgblack@eecs.umich.edu    limm t4, 1
1505326Sgblack@eecs.umich.edu    roli t4, t4, imm
1515326Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
1525240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1535326Sgblack@eecs.umich.edu    xor t1, t1, t4
1545326Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
1555240Sgblack@eecs.umich.edu};
1565240Sgblack@eecs.umich.edu
1576096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_M_I {
1586096Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1596096Sgblack@eecs.umich.edu    limm t4, 1
1606096Sgblack@eecs.umich.edu    roli t4, t4, imm
1616096Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
1626096Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1636096Sgblack@eecs.umich.edu    xor t1, t1, t4
1646096Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
1656096Sgblack@eecs.umich.edu};
1666096Sgblack@eecs.umich.edu
1676096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_P_I {
1686096Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
1696096Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1706096Sgblack@eecs.umich.edu    limm t4, 1
1716096Sgblack@eecs.umich.edu    roli t4, t4, imm
1726096Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
1736096Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1746096Sgblack@eecs.umich.edu    xor t1, t1, t4
1756096Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
1766096Sgblack@eecs.umich.edu};
1776096Sgblack@eecs.umich.edu
1785240Sgblack@eecs.umich.edudef macroop BTC_R_R {
1795240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
1805240Sgblack@eecs.umich.edu    limm t1, 1
1815240Sgblack@eecs.umich.edu    rol t1, t1, regm
1825240Sgblack@eecs.umich.edu    xor reg, reg, t1
1835240Sgblack@eecs.umich.edu};
1845240Sgblack@eecs.umich.edu
1855240Sgblack@eecs.umich.edudef macroop BTC_M_R {
1865326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
1875326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
1885326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
1895326Sgblack@eecs.umich.edu    limm t4, 1
1905326Sgblack@eecs.umich.edu    rol t4, t4, reg
1915326Sgblack@eecs.umich.edu    ldst t1, seg, [scale, index, t3], disp
1925240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
1935326Sgblack@eecs.umich.edu    xor t1, t1, t4
1945326Sgblack@eecs.umich.edu    st t1, seg, [scale, index, t3], disp
1955240Sgblack@eecs.umich.edu};
1965240Sgblack@eecs.umich.edu
1975240Sgblack@eecs.umich.edudef macroop BTC_P_R {
1985306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
1995326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2005326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2015326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
2025326Sgblack@eecs.umich.edu    limm t4, 1
2035326Sgblack@eecs.umich.edu    rol t4, t4, reg
2045326Sgblack@eecs.umich.edu    ldst t1, seg, [1, t2, t7], disp
2055240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
2065326Sgblack@eecs.umich.edu    xor t1, t1, t4
2075297Sgblack@eecs.umich.edu    st t1, seg, [1, t2, t7], disp
2085240Sgblack@eecs.umich.edu};
2095240Sgblack@eecs.umich.edu
2106096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_M_R {
2116096Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2126096Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2136096Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
2146096Sgblack@eecs.umich.edu    limm t4, 1
2156096Sgblack@eecs.umich.edu    rol t4, t4, reg
2166096Sgblack@eecs.umich.edu    ldstl t1, seg, [scale, index, t3], disp
2176096Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
2186096Sgblack@eecs.umich.edu    xor t1, t1, t4
2196096Sgblack@eecs.umich.edu    stul t1, seg, [scale, index, t3], disp
2206096Sgblack@eecs.umich.edu};
2216096Sgblack@eecs.umich.edu
2226096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_P_R {
2236096Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
2246096Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2256096Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2266096Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
2276096Sgblack@eecs.umich.edu    limm t4, 1
2286096Sgblack@eecs.umich.edu    rol t4, t4, reg
2296096Sgblack@eecs.umich.edu    ldstl t1, seg, [1, t2, t7], disp
2306096Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
2316096Sgblack@eecs.umich.edu    xor t1, t1, t4
2326096Sgblack@eecs.umich.edu    stul t1, seg, [1, t2, t7], disp
2336096Sgblack@eecs.umich.edu};
2346096Sgblack@eecs.umich.edu
2355240Sgblack@eecs.umich.edudef macroop BTR_R_I {
2365240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
2375240Sgblack@eecs.umich.edu    limm t1, "(uint64_t(-(2ULL)))"
2385240Sgblack@eecs.umich.edu    roli t1, t1, imm
2395240Sgblack@eecs.umich.edu    and reg, reg, t1
2405240Sgblack@eecs.umich.edu};
2415240Sgblack@eecs.umich.edu
2425240Sgblack@eecs.umich.edudef macroop BTR_M_I {
2435306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2445326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2455326Sgblack@eecs.umich.edu    roli t4, t4, imm
2465326Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
2475240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2485326Sgblack@eecs.umich.edu    and t1, t1, t4
2495326Sgblack@eecs.umich.edu    st t1, seg, sib, disp
2505240Sgblack@eecs.umich.edu};
2515240Sgblack@eecs.umich.edu
2525240Sgblack@eecs.umich.edudef macroop BTR_P_I {
2535306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
2545306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2555326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2565326Sgblack@eecs.umich.edu    roli t4, t4, imm
2575326Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
2585240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2595326Sgblack@eecs.umich.edu    and t1, t1, t4
2605326Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
2615240Sgblack@eecs.umich.edu};
2625240Sgblack@eecs.umich.edu
2636095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_M_I {
2646095Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2656095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2666095Sgblack@eecs.umich.edu    roli t4, t4, imm
2676095Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
2686095Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2696095Sgblack@eecs.umich.edu    and t1, t1, t4
2706095Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
2716095Sgblack@eecs.umich.edu};
2726095Sgblack@eecs.umich.edu
2736095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_P_I {
2746095Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
2756095Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2766095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2776095Sgblack@eecs.umich.edu    roli t4, t4, imm
2786095Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
2796095Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2806095Sgblack@eecs.umich.edu    and t1, t1, t4
2816095Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
2826095Sgblack@eecs.umich.edu};
2836095Sgblack@eecs.umich.edu
2845240Sgblack@eecs.umich.edudef macroop BTR_R_R {
2855240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
2865240Sgblack@eecs.umich.edu    limm t1, "(uint64_t(-(2ULL)))"
2875240Sgblack@eecs.umich.edu    rol t1, t1, regm
2885240Sgblack@eecs.umich.edu    and reg, reg, t1
2895240Sgblack@eecs.umich.edu};
2905240Sgblack@eecs.umich.edu
2915240Sgblack@eecs.umich.edudef macroop BTR_M_R {
2925326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2935326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2945326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
2955326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2965326Sgblack@eecs.umich.edu    rol t4, t4, reg
2975326Sgblack@eecs.umich.edu    ldst t1, seg, [scale, index, t3], disp
2985240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
2995326Sgblack@eecs.umich.edu    and t1, t1, t4
3005326Sgblack@eecs.umich.edu    st t1, seg, [scale, index, t3], disp
3015240Sgblack@eecs.umich.edu};
3025240Sgblack@eecs.umich.edu
3035240Sgblack@eecs.umich.edudef macroop BTR_P_R {
3045306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
3055326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
3065326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
3075326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
3085326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
3095326Sgblack@eecs.umich.edu    rol t4, t4, reg
3105326Sgblack@eecs.umich.edu    ldst t1, seg, [1, t3, t7], disp
3115240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
3125326Sgblack@eecs.umich.edu    and t1, t1, t4
3135326Sgblack@eecs.umich.edu    st t1, seg, [1, t3, t7], disp
3145240Sgblack@eecs.umich.edu};
3155240Sgblack@eecs.umich.edu
3166095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_M_R {
3176095Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
3186095Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
3196095Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
3206095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
3216095Sgblack@eecs.umich.edu    rol t4, t4, reg
3226095Sgblack@eecs.umich.edu    ldstl t1, seg, [scale, index, t3], disp
3236095Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
3246095Sgblack@eecs.umich.edu    and t1, t1, t4
3256095Sgblack@eecs.umich.edu    stul t1, seg, [scale, index, t3], disp
3266095Sgblack@eecs.umich.edu};
3276095Sgblack@eecs.umich.edu
3286095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_P_R {
3296095Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
3306095Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
3316095Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
3326095Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
3336095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
3346095Sgblack@eecs.umich.edu    rol t4, t4, reg
3356095Sgblack@eecs.umich.edu    ldstl t1, seg, [1, t3, t7], disp
3366095Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
3376095Sgblack@eecs.umich.edu    and t1, t1, t4
3386095Sgblack@eecs.umich.edu    stul t1, seg, [1, t3, t7], disp
3396095Sgblack@eecs.umich.edu};
3406095Sgblack@eecs.umich.edu
3415240Sgblack@eecs.umich.edudef macroop BTS_R_I {
3425240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
3435240Sgblack@eecs.umich.edu    limm t1, 1
3445240Sgblack@eecs.umich.edu    roli t1, t1, imm
3455240Sgblack@eecs.umich.edu    or reg, reg, t1
3465240Sgblack@eecs.umich.edu};
3475240Sgblack@eecs.umich.edu
3485240Sgblack@eecs.umich.edudef macroop BTS_M_I {
3495306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3505326Sgblack@eecs.umich.edu    limm t4, 1
3515326Sgblack@eecs.umich.edu    roli t4, t4, imm
3525326Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
3535240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3545326Sgblack@eecs.umich.edu    or t1, t1, t4
3555326Sgblack@eecs.umich.edu    st t1, seg, sib, disp
3565240Sgblack@eecs.umich.edu};
3575240Sgblack@eecs.umich.edu
3585240Sgblack@eecs.umich.edudef macroop BTS_P_I {
3595306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
3605306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3615326Sgblack@eecs.umich.edu    limm t4, 1
3625326Sgblack@eecs.umich.edu    roli t4, t4, imm
3635326Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
3645240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3655326Sgblack@eecs.umich.edu    or t1, t1, t4
3665326Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
3675240Sgblack@eecs.umich.edu};
3685240Sgblack@eecs.umich.edu
3696093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_M_I {
3706093Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3716093Sgblack@eecs.umich.edu    limm t4, 1
3726093Sgblack@eecs.umich.edu    roli t4, t4, imm
3736093Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
3746093Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3756093Sgblack@eecs.umich.edu    or t1, t1, t4
3766093Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
3776093Sgblack@eecs.umich.edu};
3786093Sgblack@eecs.umich.edu
3796093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_P_I {
3806093Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
3816093Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3826093Sgblack@eecs.umich.edu    limm t4, 1
3836093Sgblack@eecs.umich.edu    roli t4, t4, imm
3846093Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
3856093Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3866093Sgblack@eecs.umich.edu    or t1, t1, t4
3876093Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
3886093Sgblack@eecs.umich.edu};
3896093Sgblack@eecs.umich.edu
3905240Sgblack@eecs.umich.edudef macroop BTS_R_R {
3915240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
3925240Sgblack@eecs.umich.edu    limm t1, 1
3935240Sgblack@eecs.umich.edu    rol t1, t1, regm
3945240Sgblack@eecs.umich.edu    or reg, reg, t1
3955240Sgblack@eecs.umich.edu};
3965240Sgblack@eecs.umich.edu
3975240Sgblack@eecs.umich.edudef macroop BTS_M_R {
3985326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
3995326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
4005326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
4015326Sgblack@eecs.umich.edu    limm t4, 1
4025326Sgblack@eecs.umich.edu    rol t4, t4, reg
4035326Sgblack@eecs.umich.edu    ldst t1, seg, [scale, index, t3], disp
4045240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
4055326Sgblack@eecs.umich.edu    or t1, t1, t4
4065326Sgblack@eecs.umich.edu    st t1, seg, [scale, index, t3], disp
4075240Sgblack@eecs.umich.edu};
4085240Sgblack@eecs.umich.edu
4095240Sgblack@eecs.umich.edudef macroop BTS_P_R {
4105306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
4115326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
4125326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
4135326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
4145326Sgblack@eecs.umich.edu    limm t4, 1
4155326Sgblack@eecs.umich.edu    rol t4, t4, reg
4165326Sgblack@eecs.umich.edu    ldst t1, seg, [1, t3, t7], disp
4175240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
4185326Sgblack@eecs.umich.edu    or t1, t1, t4
4195326Sgblack@eecs.umich.edu    st t1, seg, [1, t3, t7], disp
4205240Sgblack@eecs.umich.edu};
4216093Sgblack@eecs.umich.edu
4226093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_M_R {
4236093Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
4246093Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
4256093Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
4266093Sgblack@eecs.umich.edu    limm t4, 1
4276093Sgblack@eecs.umich.edu    rol t4, t4, reg
4286093Sgblack@eecs.umich.edu    ldstl t1, seg, [scale, index, t3], disp
4296093Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
4306093Sgblack@eecs.umich.edu    or t1, t1, t4
4316093Sgblack@eecs.umich.edu    stul t1, seg, [scale, index, t3], disp
4326093Sgblack@eecs.umich.edu};
4336093Sgblack@eecs.umich.edu
4346093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_P_R {
4356093Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
4366093Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
4376093Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
4386093Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
4396093Sgblack@eecs.umich.edu    limm t4, 1
4406093Sgblack@eecs.umich.edu    rol t4, t4, reg
4416093Sgblack@eecs.umich.edu    ldstl t1, seg, [1, t3, t7], disp
4426093Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
4436093Sgblack@eecs.umich.edu    or t1, t1, t4
4446093Sgblack@eecs.umich.edu    stul t1, seg, [1, t3, t7], disp
4456093Sgblack@eecs.umich.edu};
4465240Sgblack@eecs.umich.edu'''
447