17087Snate@binkert.org# Copyright (c) 2007-2008 The Hewlett-Packard Development Company
27087Snate@binkert.org# All rights reserved.
37087Snate@binkert.org#
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.
127087Snate@binkert.org#
135326Sgblack@eecs.umich.edu# Copyright (c) 2008 The Regents of The University of Michigan
145326Sgblack@eecs.umich.edu# All rights reserved.
155326Sgblack@eecs.umich.edu#
165326Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
175326Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
185326Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
195326Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
205326Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
215326Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
225326Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
235326Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
245326Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
255326Sgblack@eecs.umich.edu# this software without specific prior written permission.
265326Sgblack@eecs.umich.edu#
275326Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
285326Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
295326Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
305326Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
315326Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
325326Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
335326Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
345326Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
355326Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
365326Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
375326Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
385326Sgblack@eecs.umich.edu#
395326Sgblack@eecs.umich.edu# Authors: Gabe Black
405326Sgblack@eecs.umich.edu
415240Sgblack@eecs.umich.edumicrocode = '''
425240Sgblack@eecs.umich.edudef macroop BT_R_I {
435240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
445240Sgblack@eecs.umich.edu};
455240Sgblack@eecs.umich.edu
465240Sgblack@eecs.umich.edudef macroop BT_M_I {
475306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
485240Sgblack@eecs.umich.edu    # This fudges just a tiny bit, but it's reasonable to expect the
495240Sgblack@eecs.umich.edu    # microcode generation logic to have the log of the various sizes
505240Sgblack@eecs.umich.edu    # floating around as well.
515326Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
525240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
535240Sgblack@eecs.umich.edu};
545240Sgblack@eecs.umich.edu
555240Sgblack@eecs.umich.edudef macroop BT_P_I {
565240Sgblack@eecs.umich.edu    rdip t7
575306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
585326Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp, dataSize=asz
595240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
605240Sgblack@eecs.umich.edu};
615240Sgblack@eecs.umich.edu
625240Sgblack@eecs.umich.edudef macroop BT_R_R {
635240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
645240Sgblack@eecs.umich.edu};
655240Sgblack@eecs.umich.edu
665240Sgblack@eecs.umich.edudef macroop BT_M_R {
675326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
685326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
695326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
705326Sgblack@eecs.umich.edu    ld t1, seg, [scale, index, t3], disp
715240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
725240Sgblack@eecs.umich.edu};
735240Sgblack@eecs.umich.edu
745240Sgblack@eecs.umich.edudef macroop BT_P_R {
755240Sgblack@eecs.umich.edu    rdip t7
765326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
775326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
787690Sgblack@eecs.umich.edu    ld t1, seg, [dsz, t3, t7], disp
795240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
805240Sgblack@eecs.umich.edu};
815240Sgblack@eecs.umich.edu
825240Sgblack@eecs.umich.edudef macroop BTC_R_I {
835240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
845240Sgblack@eecs.umich.edu    limm t1, 1
855240Sgblack@eecs.umich.edu    roli t1, t1, imm
865240Sgblack@eecs.umich.edu    xor reg, reg, t1
875240Sgblack@eecs.umich.edu};
885240Sgblack@eecs.umich.edu
895240Sgblack@eecs.umich.edudef macroop BTC_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    limm t4, 1
955326Sgblack@eecs.umich.edu    roli t4, t4, imm
965326Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
975240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
985326Sgblack@eecs.umich.edu    xor t1, t1, t4
995326Sgblack@eecs.umich.edu    st t1, seg, sib, disp
1005240Sgblack@eecs.umich.edu};
1015240Sgblack@eecs.umich.edu
1025240Sgblack@eecs.umich.edudef macroop BTC_P_I {
1035306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
1045306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1055326Sgblack@eecs.umich.edu    limm t4, 1
1065326Sgblack@eecs.umich.edu    roli t4, t4, imm
1075326Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
1085240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1095326Sgblack@eecs.umich.edu    xor t1, t1, t4
1105326Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
1115240Sgblack@eecs.umich.edu};
1125240Sgblack@eecs.umich.edu
1136096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_M_I {
1146096Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1156096Sgblack@eecs.umich.edu    limm t4, 1
1166096Sgblack@eecs.umich.edu    roli t4, t4, imm
1178610Snilay@cs.wisc.edu    mfence
1186096Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
1196096Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1206096Sgblack@eecs.umich.edu    xor t1, t1, t4
1216096Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
1228610Snilay@cs.wisc.edu    mfence
1236096Sgblack@eecs.umich.edu};
1246096Sgblack@eecs.umich.edu
1256096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_P_I {
1266096Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
1276096Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
1286096Sgblack@eecs.umich.edu    limm t4, 1
1296096Sgblack@eecs.umich.edu    roli t4, t4, imm
1308610Snilay@cs.wisc.edu    mfence
1316096Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
1326096Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
1336096Sgblack@eecs.umich.edu    xor t1, t1, t4
1346096Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
1358610Snilay@cs.wisc.edu    mfence
1366096Sgblack@eecs.umich.edu};
1376096Sgblack@eecs.umich.edu
1385240Sgblack@eecs.umich.edudef macroop BTC_R_R {
1395240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
1405240Sgblack@eecs.umich.edu    limm t1, 1
1415240Sgblack@eecs.umich.edu    rol t1, t1, regm
1425240Sgblack@eecs.umich.edu    xor reg, reg, t1
1435240Sgblack@eecs.umich.edu};
1445240Sgblack@eecs.umich.edu
1455240Sgblack@eecs.umich.edudef macroop BTC_M_R {
1465326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
1475326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
1485326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
1495326Sgblack@eecs.umich.edu    limm t4, 1
1505326Sgblack@eecs.umich.edu    rol t4, t4, reg
1515326Sgblack@eecs.umich.edu    ldst t1, seg, [scale, index, t3], disp
1525240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
1535326Sgblack@eecs.umich.edu    xor t1, t1, t4
1545326Sgblack@eecs.umich.edu    st t1, seg, [scale, index, t3], disp
1555240Sgblack@eecs.umich.edu};
1565240Sgblack@eecs.umich.edu
1575240Sgblack@eecs.umich.edudef macroop BTC_P_R {
1585306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
1595326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
1605326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
1615326Sgblack@eecs.umich.edu    limm t4, 1
1625326Sgblack@eecs.umich.edu    rol t4, t4, reg
1637690Sgblack@eecs.umich.edu    ldst t1, seg, [dsz, t3, t7], disp
1645240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
1655326Sgblack@eecs.umich.edu    xor t1, t1, t4
1667690Sgblack@eecs.umich.edu    st t1, seg, [dsz, t3, t7], disp
1675240Sgblack@eecs.umich.edu};
1685240Sgblack@eecs.umich.edu
1696096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_M_R {
1706096Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
1716096Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
1726096Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
1736096Sgblack@eecs.umich.edu    limm t4, 1
1746096Sgblack@eecs.umich.edu    rol t4, t4, reg
1758610Snilay@cs.wisc.edu    mfence
1766096Sgblack@eecs.umich.edu    ldstl t1, seg, [scale, index, t3], disp
1776096Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
1786096Sgblack@eecs.umich.edu    xor t1, t1, t4
1796096Sgblack@eecs.umich.edu    stul t1, seg, [scale, index, t3], disp
1808610Snilay@cs.wisc.edu    mfence
1816096Sgblack@eecs.umich.edu};
1826096Sgblack@eecs.umich.edu
1836096Sgblack@eecs.umich.edudef macroop BTC_LOCKED_P_R {
1846096Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
1856096Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
1866096Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
1876096Sgblack@eecs.umich.edu    limm t4, 1
1886096Sgblack@eecs.umich.edu    rol t4, t4, reg
1898610Snilay@cs.wisc.edu    mfence
1907690Sgblack@eecs.umich.edu    ldstl t1, seg, [dsz, t3, t7], disp
1916096Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
1926096Sgblack@eecs.umich.edu    xor t1, t1, t4
1937690Sgblack@eecs.umich.edu    stul t1, seg, [dsz, t3, t7], disp
1948610Snilay@cs.wisc.edu    mfence
1956096Sgblack@eecs.umich.edu};
1966096Sgblack@eecs.umich.edu
1975240Sgblack@eecs.umich.edudef macroop BTR_R_I {
1985240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
1995240Sgblack@eecs.umich.edu    limm t1, "(uint64_t(-(2ULL)))"
2005240Sgblack@eecs.umich.edu    roli t1, t1, imm
2015240Sgblack@eecs.umich.edu    and reg, reg, t1
2025240Sgblack@eecs.umich.edu};
2035240Sgblack@eecs.umich.edu
2045240Sgblack@eecs.umich.edudef macroop BTR_M_I {
2055306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2065326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2075326Sgblack@eecs.umich.edu    roli t4, t4, imm
2085326Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
2095240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2105326Sgblack@eecs.umich.edu    and t1, t1, t4
2115326Sgblack@eecs.umich.edu    st t1, seg, sib, disp
2125240Sgblack@eecs.umich.edu};
2135240Sgblack@eecs.umich.edu
2145240Sgblack@eecs.umich.edudef macroop BTR_P_I {
2155306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
2165306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2175326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2185326Sgblack@eecs.umich.edu    roli t4, t4, imm
2195326Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
2205240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2215326Sgblack@eecs.umich.edu    and t1, t1, t4
2225326Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
2235240Sgblack@eecs.umich.edu};
2245240Sgblack@eecs.umich.edu
2256095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_M_I {
2266095Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2276095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2286095Sgblack@eecs.umich.edu    roli t4, t4, imm
2298610Snilay@cs.wisc.edu    mfence
2306095Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
2316095Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2326095Sgblack@eecs.umich.edu    and t1, t1, t4
2336095Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
2348610Snilay@cs.wisc.edu    mfence
2356095Sgblack@eecs.umich.edu};
2366095Sgblack@eecs.umich.edu
2376095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_P_I {
2386095Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
2396095Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
2406095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2416095Sgblack@eecs.umich.edu    roli t4, t4, imm
2428610Snilay@cs.wisc.edu    mfence
2436095Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
2446095Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
2456095Sgblack@eecs.umich.edu    and t1, t1, t4
2466095Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
2478610Snilay@cs.wisc.edu    mfence
2486095Sgblack@eecs.umich.edu};
2496095Sgblack@eecs.umich.edu
2505240Sgblack@eecs.umich.edudef macroop BTR_R_R {
2515240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
2525240Sgblack@eecs.umich.edu    limm t1, "(uint64_t(-(2ULL)))"
2535240Sgblack@eecs.umich.edu    rol t1, t1, regm
2545240Sgblack@eecs.umich.edu    and reg, reg, t1
2555240Sgblack@eecs.umich.edu};
2565240Sgblack@eecs.umich.edu
2575240Sgblack@eecs.umich.edudef macroop BTR_M_R {
2585326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2595326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2605326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
2615326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2625326Sgblack@eecs.umich.edu    rol t4, t4, reg
2635326Sgblack@eecs.umich.edu    ldst t1, seg, [scale, index, t3], disp
2645240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
2655326Sgblack@eecs.umich.edu    and t1, t1, t4
2665326Sgblack@eecs.umich.edu    st t1, seg, [scale, index, t3], disp
2675240Sgblack@eecs.umich.edu};
2685240Sgblack@eecs.umich.edu
2695240Sgblack@eecs.umich.edudef macroop BTR_P_R {
2705306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
2715326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2725326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2735326Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2745326Sgblack@eecs.umich.edu    rol t4, t4, reg
2757690Sgblack@eecs.umich.edu    ldst t1, seg, [dsz, t3, t7], disp
2765240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
2775326Sgblack@eecs.umich.edu    and t1, t1, t4
2787690Sgblack@eecs.umich.edu    st t1, seg, [dsz, t3, t7], disp
2795240Sgblack@eecs.umich.edu};
2805240Sgblack@eecs.umich.edu
2816095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_M_R {
2826095Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2836095Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2846095Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
2856095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
2866095Sgblack@eecs.umich.edu    rol t4, t4, reg
2878610Snilay@cs.wisc.edu    mfence
2886095Sgblack@eecs.umich.edu    ldstl t1, seg, [scale, index, t3], disp
2896095Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
2906095Sgblack@eecs.umich.edu    and t1, t1, t4
2916095Sgblack@eecs.umich.edu    stul t1, seg, [scale, index, t3], disp
2928610Snilay@cs.wisc.edu    mfence
2936095Sgblack@eecs.umich.edu};
2946095Sgblack@eecs.umich.edu
2956095Sgblack@eecs.umich.edudef macroop BTR_LOCKED_P_R {
2966095Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
2976095Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
2986095Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
2996095Sgblack@eecs.umich.edu    limm t4, "(uint64_t(-(2ULL)))"
3006095Sgblack@eecs.umich.edu    rol t4, t4, reg
3018610Snilay@cs.wisc.edu    mfence
3027690Sgblack@eecs.umich.edu    ldstl t1, seg, [dsz, t3, t7], disp
3036095Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
3046095Sgblack@eecs.umich.edu    and t1, t1, t4
3057690Sgblack@eecs.umich.edu    stul t1, seg, [dsz, t3, t7], disp
3068610Snilay@cs.wisc.edu    mfence
3076095Sgblack@eecs.umich.edu};
3086095Sgblack@eecs.umich.edu
3095240Sgblack@eecs.umich.edudef macroop BTS_R_I {
3105240Sgblack@eecs.umich.edu    sexti t0, reg, imm, flags=(CF,)
3115240Sgblack@eecs.umich.edu    limm t1, 1
3125240Sgblack@eecs.umich.edu    roli t1, t1, imm
3135240Sgblack@eecs.umich.edu    or reg, reg, t1
3145240Sgblack@eecs.umich.edu};
3155240Sgblack@eecs.umich.edu
3165240Sgblack@eecs.umich.edudef macroop BTS_M_I {
3175306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3185326Sgblack@eecs.umich.edu    limm t4, 1
3195326Sgblack@eecs.umich.edu    roli t4, t4, imm
3205326Sgblack@eecs.umich.edu    ldst t1, seg, sib, disp
3215240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3225326Sgblack@eecs.umich.edu    or t1, t1, t4
3235326Sgblack@eecs.umich.edu    st t1, seg, sib, disp
3245240Sgblack@eecs.umich.edu};
3255240Sgblack@eecs.umich.edu
3265240Sgblack@eecs.umich.edudef macroop BTS_P_I {
3275306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
3285306Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3295326Sgblack@eecs.umich.edu    limm t4, 1
3305326Sgblack@eecs.umich.edu    roli t4, t4, imm
3315326Sgblack@eecs.umich.edu    ldst t1, seg, riprel, disp
3325240Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3335326Sgblack@eecs.umich.edu    or t1, t1, t4
3345326Sgblack@eecs.umich.edu    st t1, seg, riprel, disp
3355240Sgblack@eecs.umich.edu};
3365240Sgblack@eecs.umich.edu
3376093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_M_I {
3386093Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3396093Sgblack@eecs.umich.edu    limm t4, 1
3406093Sgblack@eecs.umich.edu    roli t4, t4, imm
3418610Snilay@cs.wisc.edu    mfence
3426093Sgblack@eecs.umich.edu    ldstl t1, seg, sib, disp
3436093Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3446093Sgblack@eecs.umich.edu    or t1, t1, t4
3456093Sgblack@eecs.umich.edu    stul t1, seg, sib, disp
3468610Snilay@cs.wisc.edu    mfence
3476093Sgblack@eecs.umich.edu};
3486093Sgblack@eecs.umich.edu
3496093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_P_I {
3506093Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
3516093Sgblack@eecs.umich.edu    limm t1, imm, dataSize=asz
3526093Sgblack@eecs.umich.edu    limm t4, 1
3536093Sgblack@eecs.umich.edu    roli t4, t4, imm
3548610Snilay@cs.wisc.edu    mfence
3556093Sgblack@eecs.umich.edu    ldstl t1, seg, riprel, disp
3566093Sgblack@eecs.umich.edu    sexti t0, t1, imm, flags=(CF,)
3576093Sgblack@eecs.umich.edu    or t1, t1, t4
3586093Sgblack@eecs.umich.edu    stul t1, seg, riprel, disp
3598610Snilay@cs.wisc.edu    mfence
3606093Sgblack@eecs.umich.edu};
3616093Sgblack@eecs.umich.edu
3625240Sgblack@eecs.umich.edudef macroop BTS_R_R {
3635240Sgblack@eecs.umich.edu    sext t0, reg, regm, flags=(CF,)
3645240Sgblack@eecs.umich.edu    limm t1, 1
3655240Sgblack@eecs.umich.edu    rol t1, t1, regm
3665240Sgblack@eecs.umich.edu    or reg, reg, t1
3675240Sgblack@eecs.umich.edu};
3685240Sgblack@eecs.umich.edu
3695240Sgblack@eecs.umich.edudef macroop BTS_M_R {
3705326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
3715326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
3725326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
3735326Sgblack@eecs.umich.edu    limm t4, 1
3745326Sgblack@eecs.umich.edu    rol t4, t4, reg
3755326Sgblack@eecs.umich.edu    ldst t1, seg, [scale, index, t3], disp
3765240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
3775326Sgblack@eecs.umich.edu    or t1, t1, t4
3785326Sgblack@eecs.umich.edu    st t1, seg, [scale, index, t3], disp
3795240Sgblack@eecs.umich.edu};
3805240Sgblack@eecs.umich.edu
3815240Sgblack@eecs.umich.edudef macroop BTS_P_R {
3825306Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
3835326Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
3845326Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
3855326Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
3865326Sgblack@eecs.umich.edu    limm t4, 1
3875326Sgblack@eecs.umich.edu    rol t4, t4, reg
3885326Sgblack@eecs.umich.edu    ldst t1, seg, [1, t3, t7], disp
3895240Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
3905326Sgblack@eecs.umich.edu    or t1, t1, t4
3915326Sgblack@eecs.umich.edu    st t1, seg, [1, t3, t7], disp
3925240Sgblack@eecs.umich.edu};
3936093Sgblack@eecs.umich.edu
3946093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_M_R {
3956093Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
3966093Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
3976093Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
3986093Sgblack@eecs.umich.edu    limm t4, 1
3996093Sgblack@eecs.umich.edu    rol t4, t4, reg
4008610Snilay@cs.wisc.edu    mfence
4016093Sgblack@eecs.umich.edu    ldstl t1, seg, [scale, index, t3], disp
4026093Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
4036093Sgblack@eecs.umich.edu    or t1, t1, t4
4046093Sgblack@eecs.umich.edu    stul t1, seg, [scale, index, t3], disp
4058610Snilay@cs.wisc.edu    mfence
4066093Sgblack@eecs.umich.edu};
4076093Sgblack@eecs.umich.edu
4086093Sgblack@eecs.umich.edudef macroop BTS_LOCKED_P_R {
4096093Sgblack@eecs.umich.edu    rdip t7, dataSize=asz
4106093Sgblack@eecs.umich.edu    srai t2, reg, 3, dataSize=asz
4116093Sgblack@eecs.umich.edu    srai t3, t2, ldsz, dataSize=asz
4126093Sgblack@eecs.umich.edu    lea t3, flatseg, [dsz, t3, base], dataSize=asz
4136093Sgblack@eecs.umich.edu    limm t4, 1
4146093Sgblack@eecs.umich.edu    rol t4, t4, reg
4158610Snilay@cs.wisc.edu    mfence
4166093Sgblack@eecs.umich.edu    ldstl t1, seg, [1, t3, t7], disp
4176093Sgblack@eecs.umich.edu    sext t0, t1, reg, flags=(CF,)
4186093Sgblack@eecs.umich.edu    or t1, t1, t4
4196093Sgblack@eecs.umich.edu    stul t1, seg, [1, t3, t7], disp
4208610Snilay@cs.wisc.edu    mfence
4216093Sgblack@eecs.umich.edu};
4225240Sgblack@eecs.umich.edu'''
423