bit_scan.py revision 5415
15332Sgblack@eecs.umich.edu# Copyright (c) 2008 The Regents of The University of Michigan 25332Sgblack@eecs.umich.edu# All rights reserved. 35332Sgblack@eecs.umich.edu# 45332Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without 55332Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are 65332Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright 75332Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer; 85332Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright 95332Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the 105332Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution; 115332Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its 125332Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from 135332Sgblack@eecs.umich.edu# this software without specific prior written permission. 145332Sgblack@eecs.umich.edu# 155332Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 165332Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 175332Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 185332Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 195332Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205332Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 215332Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 225332Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 235332Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 245332Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 255332Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265332Sgblack@eecs.umich.edu# 275332Sgblack@eecs.umich.edu# Authors: Gabe Black 285332Sgblack@eecs.umich.edu 295332Sgblack@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 845332Sgblack@eecs.umich.edumicrocode = ''' 855414Sgblack@eecs.umich.edudef macroop BSR_R_R { 865332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 875333Sgblack@eecs.umich.edu movi t1, t1, t0, dataSize=8 885332Sgblack@eecs.umich.edu and t1, regm, regm, flags=(ZF,) 895332Sgblack@eecs.umich.edu bri t0, label("end"), flags=(CZF,) 905332Sgblack@eecs.umich.edu 915332Sgblack@eecs.umich.edu # Zero out the result register 925332Sgblack@eecs.umich.edu movi reg, reg, 0x0 935332Sgblack@eecs.umich.edu 945332Sgblack@eecs.umich.edu # Bit 6 955333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 965332Sgblack@eecs.umich.edu ori t4, reg, 0x20 975332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 985332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 995332Sgblack@eecs.umich.edu 1005332Sgblack@eecs.umich.edu # Bit 5 1015333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 1025332Sgblack@eecs.umich.edu ori t4, reg, 0x10 1035332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1045332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1055332Sgblack@eecs.umich.edu 1065332Sgblack@eecs.umich.edu # Bit 4 1075333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 1085332Sgblack@eecs.umich.edu ori t4, reg, 0x8 1095332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1105332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1115332Sgblack@eecs.umich.edu 1125332Sgblack@eecs.umich.edu # Bit 3 1135333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 1145332Sgblack@eecs.umich.edu ori t4, reg, 0x4 1155332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1165332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1175332Sgblack@eecs.umich.edu 1185332Sgblack@eecs.umich.edu # Bit 2 1195333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 1205332Sgblack@eecs.umich.edu ori t4, reg, 0x2 1215332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1225332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1235332Sgblack@eecs.umich.edu 1245332Sgblack@eecs.umich.edu # Bit 1 1255333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 1265332Sgblack@eecs.umich.edu ori t4, reg, 0x1 1275332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1285332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1295332Sgblack@eecs.umich.edu 1305332Sgblack@eecs.umich.eduend: 1315332Sgblack@eecs.umich.edu fault "NoFault" 1325332Sgblack@eecs.umich.edu}; 1335332Sgblack@eecs.umich.edu 1345414Sgblack@eecs.umich.edudef macroop BSR_R_M { 1355332Sgblack@eecs.umich.edu 1365333Sgblack@eecs.umich.edu movi t1, t1, t0, dataSize=8 1375332Sgblack@eecs.umich.edu ld t1, seg, sib, disp 1385332Sgblack@eecs.umich.edu 1395332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 1405332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 1415332Sgblack@eecs.umich.edu bri t0, label("end"), flags=(CZF,) 1425332Sgblack@eecs.umich.edu 1435332Sgblack@eecs.umich.edu # Zero out the result register 1445332Sgblack@eecs.umich.edu movi reg, reg, 0x0 1455332Sgblack@eecs.umich.edu 1465332Sgblack@eecs.umich.edu # Bit 6 1475333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 1485332Sgblack@eecs.umich.edu ori t4, reg, 0x20 1495332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1505332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1515332Sgblack@eecs.umich.edu 1525332Sgblack@eecs.umich.edu # Bit 5 1535333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 1545332Sgblack@eecs.umich.edu ori t4, reg, 0x10 1555332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1565332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1575332Sgblack@eecs.umich.edu 1585332Sgblack@eecs.umich.edu # Bit 4 1595333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 1605332Sgblack@eecs.umich.edu ori t4, reg, 0x8 1615332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1625332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1635332Sgblack@eecs.umich.edu 1645332Sgblack@eecs.umich.edu # Bit 3 1655333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 1665332Sgblack@eecs.umich.edu ori t4, reg, 0x4 1675332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1685332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1695332Sgblack@eecs.umich.edu 1705332Sgblack@eecs.umich.edu # Bit 2 1715333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 1725332Sgblack@eecs.umich.edu ori t4, reg, 0x2 1735332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1745332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1755332Sgblack@eecs.umich.edu 1765332Sgblack@eecs.umich.edu # Bit 1 1775333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 1785332Sgblack@eecs.umich.edu ori t4, reg, 0x1 1795332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1805332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1815332Sgblack@eecs.umich.edu 1825332Sgblack@eecs.umich.eduend: 1835332Sgblack@eecs.umich.edu fault "NoFault" 1845332Sgblack@eecs.umich.edu}; 1855332Sgblack@eecs.umich.edu 1865414Sgblack@eecs.umich.edudef macroop BSR_R_P { 1875332Sgblack@eecs.umich.edu 1885332Sgblack@eecs.umich.edu rdip t7 1895333Sgblack@eecs.umich.edu movi t1, t1, t0, dataSize=8 1905332Sgblack@eecs.umich.edu ld t1, seg, riprel, disp 1915332Sgblack@eecs.umich.edu 1925332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 1935332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 1945332Sgblack@eecs.umich.edu bri t0, label("end"), flags=(CZF,) 1955332Sgblack@eecs.umich.edu 1965332Sgblack@eecs.umich.edu # Zero out the result register 1975332Sgblack@eecs.umich.edu movi reg, reg, 0x0 1985332Sgblack@eecs.umich.edu 1995332Sgblack@eecs.umich.edu # Bit 6 2005333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 2015332Sgblack@eecs.umich.edu ori t4, reg, 0x20 2025332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2035332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2045332Sgblack@eecs.umich.edu 2055332Sgblack@eecs.umich.edu # Bit 5 2065333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 2075332Sgblack@eecs.umich.edu ori t4, reg, 0x10 2085332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2095332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2105332Sgblack@eecs.umich.edu 2115332Sgblack@eecs.umich.edu # Bit 4 2125333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 2135332Sgblack@eecs.umich.edu ori t4, reg, 0x8 2145332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2155332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2165332Sgblack@eecs.umich.edu 2175332Sgblack@eecs.umich.edu # Bit 3 2185333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 2195332Sgblack@eecs.umich.edu ori t4, reg, 0x4 2205332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2215332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2225332Sgblack@eecs.umich.edu 2235332Sgblack@eecs.umich.edu # Bit 2 2245333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 2255332Sgblack@eecs.umich.edu ori t4, reg, 0x2 2265332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2275332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2285332Sgblack@eecs.umich.edu 2295332Sgblack@eecs.umich.edu # Bit 1 2305333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 2315332Sgblack@eecs.umich.edu ori t4, reg, 0x1 2325332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2335332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2345332Sgblack@eecs.umich.edu 2355332Sgblack@eecs.umich.eduend: 2365332Sgblack@eecs.umich.edu fault "NoFault" 2375332Sgblack@eecs.umich.edu}; 2385332Sgblack@eecs.umich.edu 2395414Sgblack@eecs.umich.edudef macroop BSF_R_R { 2405332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 2415333Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 2425332Sgblack@eecs.umich.edu and t1, regm, regm, flags=(ZF,) 2435332Sgblack@eecs.umich.edu bri t0, label("end"), flags=(CZF,) 2445332Sgblack@eecs.umich.edu 2455332Sgblack@eecs.umich.edu # Zero out the result register 2465332Sgblack@eecs.umich.edu movi reg, reg, 0 2475332Sgblack@eecs.umich.edu 2485333Sgblack@eecs.umich.edu subi t2, t1, 1 2495333Sgblack@eecs.umich.edu xor t1, t2, t1 2505333Sgblack@eecs.umich.edu 2515332Sgblack@eecs.umich.edu # Bit 6 2525333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8 2535415Sgblack@eecs.umich.edu andi t4, t3, 32, flags=(EZF,) 2545415Sgblack@eecs.umich.edu or reg, reg, t4 2555415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2565332Sgblack@eecs.umich.edu 2575332Sgblack@eecs.umich.edu # Bit 5 2585333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8 2595415Sgblack@eecs.umich.edu andi t4, t3, 16, flags=(EZF,) 2605415Sgblack@eecs.umich.edu or reg, reg, t4 2615415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2625332Sgblack@eecs.umich.edu 2635332Sgblack@eecs.umich.edu # Bit 4 2645333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8 2655415Sgblack@eecs.umich.edu andi t4, t3, 8, flags=(EZF,) 2665415Sgblack@eecs.umich.edu or reg, reg, t4 2675415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2685332Sgblack@eecs.umich.edu 2695332Sgblack@eecs.umich.edu # Bit 3 2705333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8 2715415Sgblack@eecs.umich.edu andi t4, t3, 4, flags=(EZF,) 2725415Sgblack@eecs.umich.edu or reg, reg, t4 2735415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2745332Sgblack@eecs.umich.edu 2755332Sgblack@eecs.umich.edu # Bit 2 2765333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8 2775415Sgblack@eecs.umich.edu andi t4, t3, 2, flags=(EZF,) 2785415Sgblack@eecs.umich.edu or reg, reg, t4 2795415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2805332Sgblack@eecs.umich.edu 2815332Sgblack@eecs.umich.edu # Bit 1 2825333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8 2835415Sgblack@eecs.umich.edu andi t4, t3, 1, flags=(EZF,) 2845415Sgblack@eecs.umich.edu or reg, reg, t4 2855415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2865332Sgblack@eecs.umich.edu 2875332Sgblack@eecs.umich.eduend: 2885332Sgblack@eecs.umich.edu fault "NoFault" 2895332Sgblack@eecs.umich.edu}; 2905332Sgblack@eecs.umich.edu 2915414Sgblack@eecs.umich.edudef macroop BSF_R_M { 2925332Sgblack@eecs.umich.edu 2935333Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 2945332Sgblack@eecs.umich.edu ld t1, seg, sib, disp 2955332Sgblack@eecs.umich.edu 2965332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 2975332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 2985332Sgblack@eecs.umich.edu bri t0, label("end"), flags=(CZF,) 2995332Sgblack@eecs.umich.edu 3005332Sgblack@eecs.umich.edu # Zero out the result register 3015332Sgblack@eecs.umich.edu mov reg, reg, t0 3025332Sgblack@eecs.umich.edu 3035333Sgblack@eecs.umich.edu subi t2, t1, 1 3045333Sgblack@eecs.umich.edu xor t1, t2, t1 3055333Sgblack@eecs.umich.edu 3065332Sgblack@eecs.umich.edu # Bit 6 3075333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8 3085415Sgblack@eecs.umich.edu andi t4, t3, 32, flags=(EZF,) 3095415Sgblack@eecs.umich.edu or reg, reg, t4 3105415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3115332Sgblack@eecs.umich.edu 3125332Sgblack@eecs.umich.edu # Bit 5 3135333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8 3145415Sgblack@eecs.umich.edu andi t4, t3, 16, flags=(EZF,) 3155415Sgblack@eecs.umich.edu or reg, reg, t4 3165415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3175332Sgblack@eecs.umich.edu 3185332Sgblack@eecs.umich.edu # Bit 4 3195333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8 3205415Sgblack@eecs.umich.edu andi t4, t3, 8, flags=(EZF,) 3215415Sgblack@eecs.umich.edu or reg, reg, t4 3225415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3235332Sgblack@eecs.umich.edu 3245332Sgblack@eecs.umich.edu # Bit 3 3255333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8 3265415Sgblack@eecs.umich.edu andi t4, t3, 4, flags=(EZF,) 3275415Sgblack@eecs.umich.edu or reg, reg, t4 3285415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3295332Sgblack@eecs.umich.edu 3305332Sgblack@eecs.umich.edu # Bit 2 3315333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8 3325415Sgblack@eecs.umich.edu andi t4, t3, 2, flags=(EZF,) 3335415Sgblack@eecs.umich.edu or reg, reg, t4 3345415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3355332Sgblack@eecs.umich.edu 3365332Sgblack@eecs.umich.edu # Bit 1 3375333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8 3385415Sgblack@eecs.umich.edu andi t4, t3, 1, flags=(EZF,) 3395415Sgblack@eecs.umich.edu or reg, reg, t4 3405415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3415332Sgblack@eecs.umich.edu 3425332Sgblack@eecs.umich.eduend: 3435332Sgblack@eecs.umich.edu fault "NoFault" 3445332Sgblack@eecs.umich.edu}; 3455332Sgblack@eecs.umich.edu 3465414Sgblack@eecs.umich.edudef macroop BSF_R_P { 3475332Sgblack@eecs.umich.edu 3485332Sgblack@eecs.umich.edu rdip t7 3495333Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 3505332Sgblack@eecs.umich.edu ld t1, seg, riprel, disp 3515332Sgblack@eecs.umich.edu 3525332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 3535332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 3545332Sgblack@eecs.umich.edu bri t0, label("end"), flags=(CZF,) 3555332Sgblack@eecs.umich.edu 3565332Sgblack@eecs.umich.edu # Zero out the result register 3575332Sgblack@eecs.umich.edu mov reg, reg, t0 3585332Sgblack@eecs.umich.edu 3595333Sgblack@eecs.umich.edu subi t2, t1, 1 3605333Sgblack@eecs.umich.edu xor t1, t2, t1 3615333Sgblack@eecs.umich.edu 3625332Sgblack@eecs.umich.edu # Bit 6 3635333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8 3645415Sgblack@eecs.umich.edu andi t4, t3, 32, flags=(EZF,) 3655415Sgblack@eecs.umich.edu or reg, reg, t4 3665415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3675332Sgblack@eecs.umich.edu 3685332Sgblack@eecs.umich.edu # Bit 5 3695333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8 3705415Sgblack@eecs.umich.edu andi t4, t3, 16, flags=(EZF,) 3715415Sgblack@eecs.umich.edu or reg, reg, t4 3725415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3735332Sgblack@eecs.umich.edu 3745332Sgblack@eecs.umich.edu # Bit 4 3755333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8 3765415Sgblack@eecs.umich.edu andi t4, t3, 8, flags=(EZF,) 3775415Sgblack@eecs.umich.edu or reg, reg, t4 3785415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3795332Sgblack@eecs.umich.edu 3805332Sgblack@eecs.umich.edu # Bit 3 3815333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8 3825415Sgblack@eecs.umich.edu andi t4, t3, 4, flags=(EZF,) 3835415Sgblack@eecs.umich.edu or reg, reg, t4 3845415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3855332Sgblack@eecs.umich.edu 3865332Sgblack@eecs.umich.edu # Bit 2 3875333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8 3885415Sgblack@eecs.umich.edu andi t4, t3, 2, flags=(EZF,) 3895415Sgblack@eecs.umich.edu or reg, reg, t4 3905415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3915332Sgblack@eecs.umich.edu 3925332Sgblack@eecs.umich.edu # Bit 1 3935333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8 3945415Sgblack@eecs.umich.edu andi t4, t3, 1, flags=(EZF,) 3955415Sgblack@eecs.umich.edu or reg, reg, t4 3965415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3975332Sgblack@eecs.umich.edu 3985332Sgblack@eecs.umich.eduend: 3995332Sgblack@eecs.umich.edu fault "NoFault" 4005332Sgblack@eecs.umich.edu}; 4015332Sgblack@eecs.umich.edu''' 402