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#
135332Sgblack@eecs.umich.edu# Copyright (c) 2008 The Regents of The University of Michigan
145332Sgblack@eecs.umich.edu# All rights reserved.
155332Sgblack@eecs.umich.edu#
165332Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
175332Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
185332Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
195332Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
205332Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
215332Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
225332Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
235332Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
245332Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
255332Sgblack@eecs.umich.edu# this software without specific prior written permission.
265332Sgblack@eecs.umich.edu#
275332Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
285332Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
295332Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
305332Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
315332Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
325332Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
335332Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
345332Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
355332Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
365332Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
375332Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
385332Sgblack@eecs.umich.edu#
395332Sgblack@eecs.umich.edu# Authors: Gabe Black
405332Sgblack@eecs.umich.edu
415332Sgblack@eecs.umich.edumicrocode = '''
425414Sgblack@eecs.umich.edudef macroop BSR_R_R {
435332Sgblack@eecs.umich.edu    # Determine if the input was zero, and also move it to a temp reg.
446344Sgblack@eecs.umich.edu    mov t1, t1, t0, dataSize=8
455332Sgblack@eecs.umich.edu    and t1, regm, regm, flags=(ZF,)
465661Sgblack@eecs.umich.edu    br label("end"), flags=(CZF,)
475332Sgblack@eecs.umich.edu
485332Sgblack@eecs.umich.edu    # Zero out the result register
495332Sgblack@eecs.umich.edu    movi reg, reg, 0x0
505332Sgblack@eecs.umich.edu
515332Sgblack@eecs.umich.edu    # Bit 6
525333Sgblack@eecs.umich.edu    srli t3, t1, 32, dataSize=8, flags=(EZF,)
535332Sgblack@eecs.umich.edu    ori t4, reg, 0x20
545332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
555332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
565332Sgblack@eecs.umich.edu
575332Sgblack@eecs.umich.edu    # Bit 5
585333Sgblack@eecs.umich.edu    srli t3, t1, 16, dataSize=8, flags=(EZF,)
595332Sgblack@eecs.umich.edu    ori t4, reg, 0x10
605332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
615332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
625332Sgblack@eecs.umich.edu
635332Sgblack@eecs.umich.edu    # Bit 4
645333Sgblack@eecs.umich.edu    srli t3, t1, 8, dataSize=8, flags=(EZF,)
655332Sgblack@eecs.umich.edu    ori t4, reg, 0x8
665332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
675332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
685332Sgblack@eecs.umich.edu
695332Sgblack@eecs.umich.edu    # Bit 3
705333Sgblack@eecs.umich.edu    srli t3, t1, 4, dataSize=8, flags=(EZF,)
715332Sgblack@eecs.umich.edu    ori t4, reg, 0x4
725332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
735332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
745332Sgblack@eecs.umich.edu
755332Sgblack@eecs.umich.edu    # Bit 2
765333Sgblack@eecs.umich.edu    srli t3, t1, 2, dataSize=8, flags=(EZF,)
775332Sgblack@eecs.umich.edu    ori t4, reg, 0x2
785332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
795332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
805332Sgblack@eecs.umich.edu
815332Sgblack@eecs.umich.edu    # Bit 1
825333Sgblack@eecs.umich.edu    srli t3, t1, 1, dataSize=8, flags=(EZF,)
835332Sgblack@eecs.umich.edu    ori t4, reg, 0x1
845332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
855332Sgblack@eecs.umich.edu
865332Sgblack@eecs.umich.eduend:
875332Sgblack@eecs.umich.edu    fault "NoFault"
885332Sgblack@eecs.umich.edu};
895332Sgblack@eecs.umich.edu
905414Sgblack@eecs.umich.edudef macroop BSR_R_M {
915332Sgblack@eecs.umich.edu
926344Sgblack@eecs.umich.edu    mov t1, t1, t0, dataSize=8
935332Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
945332Sgblack@eecs.umich.edu
955332Sgblack@eecs.umich.edu    # Determine if the input was zero, and also move it to a temp reg.
965332Sgblack@eecs.umich.edu    and t1, t1, t1, flags=(ZF,)
975661Sgblack@eecs.umich.edu    br label("end"), flags=(CZF,)
985332Sgblack@eecs.umich.edu
995332Sgblack@eecs.umich.edu    # Zero out the result register
1005332Sgblack@eecs.umich.edu    movi reg, reg, 0x0
1015332Sgblack@eecs.umich.edu
1025332Sgblack@eecs.umich.edu    # Bit 6
1035333Sgblack@eecs.umich.edu    srli t3, t1, 32, dataSize=8, flags=(EZF,)
1045332Sgblack@eecs.umich.edu    ori t4, reg, 0x20
1055332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1065332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1075332Sgblack@eecs.umich.edu
1085332Sgblack@eecs.umich.edu    # Bit 5
1095333Sgblack@eecs.umich.edu    srli t3, t1, 16, dataSize=8, flags=(EZF,)
1105332Sgblack@eecs.umich.edu    ori t4, reg, 0x10
1115332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1125332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1135332Sgblack@eecs.umich.edu
1145332Sgblack@eecs.umich.edu    # Bit 4
1155333Sgblack@eecs.umich.edu    srli t3, t1, 8, dataSize=8, flags=(EZF,)
1165332Sgblack@eecs.umich.edu    ori t4, reg, 0x8
1175332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1185332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1195332Sgblack@eecs.umich.edu
1205332Sgblack@eecs.umich.edu    # Bit 3
1215333Sgblack@eecs.umich.edu    srli t3, t1, 4, dataSize=8, flags=(EZF,)
1225332Sgblack@eecs.umich.edu    ori t4, reg, 0x4
1235332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1245332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1255332Sgblack@eecs.umich.edu
1265332Sgblack@eecs.umich.edu    # Bit 2
1275333Sgblack@eecs.umich.edu    srli t3, t1, 2, dataSize=8, flags=(EZF,)
1285332Sgblack@eecs.umich.edu    ori t4, reg, 0x2
1295332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1305332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1315332Sgblack@eecs.umich.edu
1325332Sgblack@eecs.umich.edu    # Bit 1
1335333Sgblack@eecs.umich.edu    srli t3, t1, 1, dataSize=8, flags=(EZF,)
1345332Sgblack@eecs.umich.edu    ori t4, reg, 0x1
1355332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1365332Sgblack@eecs.umich.edu
1375332Sgblack@eecs.umich.eduend:
1385332Sgblack@eecs.umich.edu    fault "NoFault"
1395332Sgblack@eecs.umich.edu};
1405332Sgblack@eecs.umich.edu
1415414Sgblack@eecs.umich.edudef macroop BSR_R_P {
1425332Sgblack@eecs.umich.edu
1435332Sgblack@eecs.umich.edu    rdip t7
1446344Sgblack@eecs.umich.edu    mov t1, t1, t0, dataSize=8
1455332Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
1465332Sgblack@eecs.umich.edu
1475332Sgblack@eecs.umich.edu    # Determine if the input was zero, and also move it to a temp reg.
1485332Sgblack@eecs.umich.edu    and t1, t1, t1, flags=(ZF,)
1495661Sgblack@eecs.umich.edu    br label("end"), flags=(CZF,)
1505332Sgblack@eecs.umich.edu
1515332Sgblack@eecs.umich.edu    # Zero out the result register
1525332Sgblack@eecs.umich.edu    movi reg, reg, 0x0
1535332Sgblack@eecs.umich.edu
1545332Sgblack@eecs.umich.edu    # Bit 6
1555333Sgblack@eecs.umich.edu    srli t3, t1, 32, dataSize=8, flags=(EZF,)
1565332Sgblack@eecs.umich.edu    ori t4, reg, 0x20
1575332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1585332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1595332Sgblack@eecs.umich.edu
1605332Sgblack@eecs.umich.edu    # Bit 5
1615333Sgblack@eecs.umich.edu    srli t3, t1, 16, dataSize=8, flags=(EZF,)
1625332Sgblack@eecs.umich.edu    ori t4, reg, 0x10
1635332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1645332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1655332Sgblack@eecs.umich.edu
1665332Sgblack@eecs.umich.edu    # Bit 4
1675333Sgblack@eecs.umich.edu    srli t3, t1, 8, dataSize=8, flags=(EZF,)
1685332Sgblack@eecs.umich.edu    ori t4, reg, 0x8
1695332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1705332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1715332Sgblack@eecs.umich.edu
1725332Sgblack@eecs.umich.edu    # Bit 3
1735333Sgblack@eecs.umich.edu    srli t3, t1, 4, dataSize=8, flags=(EZF,)
1745332Sgblack@eecs.umich.edu    ori t4, reg, 0x4
1755332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1765332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1775332Sgblack@eecs.umich.edu
1785332Sgblack@eecs.umich.edu    # Bit 2
1795333Sgblack@eecs.umich.edu    srli t3, t1, 2, dataSize=8, flags=(EZF,)
1805332Sgblack@eecs.umich.edu    ori t4, reg, 0x2
1815332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1825332Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
1835332Sgblack@eecs.umich.edu
1845332Sgblack@eecs.umich.edu    # Bit 1
1855333Sgblack@eecs.umich.edu    srli t3, t1, 1, dataSize=8, flags=(EZF,)
1865332Sgblack@eecs.umich.edu    ori t4, reg, 0x1
1875332Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
1885332Sgblack@eecs.umich.edu
1895332Sgblack@eecs.umich.eduend:
1905332Sgblack@eecs.umich.edu    fault "NoFault"
1915332Sgblack@eecs.umich.edu};
1925332Sgblack@eecs.umich.edu
1935414Sgblack@eecs.umich.edudef macroop BSF_R_R {
1945332Sgblack@eecs.umich.edu    # Determine if the input was zero, and also move it to a temp reg.
1955333Sgblack@eecs.umich.edu    mov t1, t1, t0, dataSize=8
1965332Sgblack@eecs.umich.edu    and t1, regm, regm, flags=(ZF,)
1975661Sgblack@eecs.umich.edu    br label("end"), flags=(CZF,)
1985332Sgblack@eecs.umich.edu
1995332Sgblack@eecs.umich.edu    # Zero out the result register
2005332Sgblack@eecs.umich.edu    movi reg, reg, 0
2015332Sgblack@eecs.umich.edu
2025333Sgblack@eecs.umich.edu    subi t2, t1, 1
2035333Sgblack@eecs.umich.edu    xor t1, t2, t1
2045333Sgblack@eecs.umich.edu
2055423Sgblack@eecs.umich.edu
2065332Sgblack@eecs.umich.edu    # Bit 6
2075423Sgblack@eecs.umich.edu    srli t3, t1, 32, dataSize=8, flags=(EZF,)
2085423Sgblack@eecs.umich.edu    ori t4, reg, 32
2095423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2105415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2115332Sgblack@eecs.umich.edu
2125332Sgblack@eecs.umich.edu    # Bit 5
2135423Sgblack@eecs.umich.edu    srli t3, t1, 16, dataSize=8, flags=(EZF,)
2145423Sgblack@eecs.umich.edu    ori t4, reg, 16
2155423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2165415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2175332Sgblack@eecs.umich.edu
2185332Sgblack@eecs.umich.edu    # Bit 4
2195423Sgblack@eecs.umich.edu    srli t3, t1, 8, dataSize=8, flags=(EZF,)
2205423Sgblack@eecs.umich.edu    ori t4, reg, 8
2215423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2225415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2235332Sgblack@eecs.umich.edu
2245332Sgblack@eecs.umich.edu    # Bit 3
2255423Sgblack@eecs.umich.edu    srli t3, t1, 4, dataSize=8, flags=(EZF,)
2265423Sgblack@eecs.umich.edu    ori t4, reg, 4
2275423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2285415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2295332Sgblack@eecs.umich.edu
2305332Sgblack@eecs.umich.edu    # Bit 2
2315423Sgblack@eecs.umich.edu    srli t3, t1, 2, dataSize=8, flags=(EZF,)
2325423Sgblack@eecs.umich.edu    ori t4, reg, 2
2335423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2345415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2355332Sgblack@eecs.umich.edu
2365332Sgblack@eecs.umich.edu    # Bit 1
2375423Sgblack@eecs.umich.edu    srli t3, t1, 1, dataSize=8, flags=(EZF,)
2385423Sgblack@eecs.umich.edu    ori t4, reg, 1
2395423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2405332Sgblack@eecs.umich.edu
2415332Sgblack@eecs.umich.eduend:
2425332Sgblack@eecs.umich.edu    fault "NoFault"
2435332Sgblack@eecs.umich.edu};
2445332Sgblack@eecs.umich.edu
2455414Sgblack@eecs.umich.edudef macroop BSF_R_M {
2465332Sgblack@eecs.umich.edu
2475333Sgblack@eecs.umich.edu    mov t1, t1, t0, dataSize=8
2485332Sgblack@eecs.umich.edu    ld t1, seg, sib, disp
2495332Sgblack@eecs.umich.edu
2505332Sgblack@eecs.umich.edu    # Determine if the input was zero, and also move it to a temp reg.
2515332Sgblack@eecs.umich.edu    and t1, t1, t1, flags=(ZF,)
2525661Sgblack@eecs.umich.edu    br label("end"), flags=(CZF,)
2535332Sgblack@eecs.umich.edu
2545332Sgblack@eecs.umich.edu    # Zero out the result register
2555332Sgblack@eecs.umich.edu    mov reg, reg, t0
2565332Sgblack@eecs.umich.edu
2575333Sgblack@eecs.umich.edu    subi t2, t1, 1
2585333Sgblack@eecs.umich.edu    xor t1, t2, t1
2595333Sgblack@eecs.umich.edu
2605332Sgblack@eecs.umich.edu    # Bit 6
2615423Sgblack@eecs.umich.edu    srli t3, t1, 32, dataSize=8, flags=(EZF,)
2625423Sgblack@eecs.umich.edu    ori t4, reg, 32
2635423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2645415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2655332Sgblack@eecs.umich.edu
2665332Sgblack@eecs.umich.edu    # Bit 5
2675423Sgblack@eecs.umich.edu    srli t3, t1, 16, dataSize=8, flags=(EZF,)
2685423Sgblack@eecs.umich.edu    ori t4, reg, 16
2695423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2705415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2715332Sgblack@eecs.umich.edu
2725332Sgblack@eecs.umich.edu    # Bit 4
2735423Sgblack@eecs.umich.edu    srli t3, t1, 8, dataSize=8, flags=(EZF,)
2745423Sgblack@eecs.umich.edu    ori t4, reg, 8
2755423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2765415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2775332Sgblack@eecs.umich.edu
2785332Sgblack@eecs.umich.edu    # Bit 3
2795423Sgblack@eecs.umich.edu    srli t3, t1, 4, dataSize=8, flags=(EZF,)
2805423Sgblack@eecs.umich.edu    ori t4, reg, 4
2815423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2825415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2835332Sgblack@eecs.umich.edu
2845332Sgblack@eecs.umich.edu    # Bit 2
2855423Sgblack@eecs.umich.edu    srli t3, t1, 2, dataSize=8, flags=(EZF,)
2865423Sgblack@eecs.umich.edu    ori t4, reg, 2
2875423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2885415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2895332Sgblack@eecs.umich.edu
2905332Sgblack@eecs.umich.edu    # Bit 1
2915423Sgblack@eecs.umich.edu    srli t3, t1, 1, dataSize=8, flags=(EZF,)
2925423Sgblack@eecs.umich.edu    ori t4, reg, 1
2935423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
2945415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
2955332Sgblack@eecs.umich.edu
2965332Sgblack@eecs.umich.eduend:
2975332Sgblack@eecs.umich.edu    fault "NoFault"
2985332Sgblack@eecs.umich.edu};
2995332Sgblack@eecs.umich.edu
3005414Sgblack@eecs.umich.edudef macroop BSF_R_P {
3015332Sgblack@eecs.umich.edu
3025332Sgblack@eecs.umich.edu    rdip t7
3035333Sgblack@eecs.umich.edu    mov t1, t1, t0, dataSize=8
3045332Sgblack@eecs.umich.edu    ld t1, seg, riprel, disp
3055332Sgblack@eecs.umich.edu
3065332Sgblack@eecs.umich.edu    # Determine if the input was zero, and also move it to a temp reg.
3075332Sgblack@eecs.umich.edu    and t1, t1, t1, flags=(ZF,)
3085661Sgblack@eecs.umich.edu    br label("end"), flags=(CZF,)
3095332Sgblack@eecs.umich.edu
3105332Sgblack@eecs.umich.edu    # Zero out the result register
3115332Sgblack@eecs.umich.edu    mov reg, reg, t0
3125332Sgblack@eecs.umich.edu
3135333Sgblack@eecs.umich.edu    subi t2, t1, 1
3145333Sgblack@eecs.umich.edu    xor t1, t2, t1
3155333Sgblack@eecs.umich.edu
3165332Sgblack@eecs.umich.edu    # Bit 6
3175423Sgblack@eecs.umich.edu    srli t3, t1, 32, dataSize=8, flags=(EZF,)
3185423Sgblack@eecs.umich.edu    ori t4, reg, 32
3195423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
3205415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
3215332Sgblack@eecs.umich.edu
3225332Sgblack@eecs.umich.edu    # Bit 5
3235423Sgblack@eecs.umich.edu    srli t3, t1, 16, dataSize=8, flags=(EZF,)
3245423Sgblack@eecs.umich.edu    ori t4, reg, 16
3255423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
3265415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
3275332Sgblack@eecs.umich.edu
3285332Sgblack@eecs.umich.edu    # Bit 4
3295423Sgblack@eecs.umich.edu    srli t3, t1, 8, dataSize=8, flags=(EZF,)
3305423Sgblack@eecs.umich.edu    ori t4, reg, 8
3315423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
3325415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
3335332Sgblack@eecs.umich.edu
3345332Sgblack@eecs.umich.edu    # Bit 3
3355423Sgblack@eecs.umich.edu    srli t3, t1, 4, dataSize=8, flags=(EZF,)
3365423Sgblack@eecs.umich.edu    ori t4, reg, 4
3375423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
3385415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
3395332Sgblack@eecs.umich.edu
3405332Sgblack@eecs.umich.edu    # Bit 2
3415423Sgblack@eecs.umich.edu    srli t3, t1, 2, dataSize=8, flags=(EZF,)
3425423Sgblack@eecs.umich.edu    ori t4, reg, 2
3435423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
3445415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
3455332Sgblack@eecs.umich.edu
3465332Sgblack@eecs.umich.edu    # Bit 1
3475423Sgblack@eecs.umich.edu    srli t3, t1, 1, dataSize=8, flags=(EZF,)
3485423Sgblack@eecs.umich.edu    ori t4, reg, 1
3495423Sgblack@eecs.umich.edu    mov reg, reg, t4, flags=(nCEZF,)
3505415Sgblack@eecs.umich.edu    mov t1, t1, t3, flags=(nCEZF,)
3515332Sgblack@eecs.umich.edu
3525332Sgblack@eecs.umich.eduend:
3535332Sgblack@eecs.umich.edu    fault "NoFault"
3545332Sgblack@eecs.umich.edu};
3555332Sgblack@eecs.umich.edu'''
356