bit_scan.py revision 6344
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. 876344Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 885332Sgblack@eecs.umich.edu and t1, regm, regm, flags=(ZF,) 895661Sgblack@eecs.umich.edu br 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 1295332Sgblack@eecs.umich.eduend: 1305332Sgblack@eecs.umich.edu fault "NoFault" 1315332Sgblack@eecs.umich.edu}; 1325332Sgblack@eecs.umich.edu 1335414Sgblack@eecs.umich.edudef macroop BSR_R_M { 1345332Sgblack@eecs.umich.edu 1356344Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 1365332Sgblack@eecs.umich.edu ld t1, seg, sib, disp 1375332Sgblack@eecs.umich.edu 1385332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 1395332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 1405661Sgblack@eecs.umich.edu br label("end"), flags=(CZF,) 1415332Sgblack@eecs.umich.edu 1425332Sgblack@eecs.umich.edu # Zero out the result register 1435332Sgblack@eecs.umich.edu movi reg, reg, 0x0 1445332Sgblack@eecs.umich.edu 1455332Sgblack@eecs.umich.edu # Bit 6 1465333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 1475332Sgblack@eecs.umich.edu ori t4, reg, 0x20 1485332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1495332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1505332Sgblack@eecs.umich.edu 1515332Sgblack@eecs.umich.edu # Bit 5 1525333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 1535332Sgblack@eecs.umich.edu ori t4, reg, 0x10 1545332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1555332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1565332Sgblack@eecs.umich.edu 1575332Sgblack@eecs.umich.edu # Bit 4 1585333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 1595332Sgblack@eecs.umich.edu ori t4, reg, 0x8 1605332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1615332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1625332Sgblack@eecs.umich.edu 1635332Sgblack@eecs.umich.edu # Bit 3 1645333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 1655332Sgblack@eecs.umich.edu ori t4, reg, 0x4 1665332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1675332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1685332Sgblack@eecs.umich.edu 1695332Sgblack@eecs.umich.edu # Bit 2 1705333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 1715332Sgblack@eecs.umich.edu ori t4, reg, 0x2 1725332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1735332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 1745332Sgblack@eecs.umich.edu 1755332Sgblack@eecs.umich.edu # Bit 1 1765333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 1775332Sgblack@eecs.umich.edu ori t4, reg, 0x1 1785332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 1795332Sgblack@eecs.umich.edu 1805332Sgblack@eecs.umich.eduend: 1815332Sgblack@eecs.umich.edu fault "NoFault" 1825332Sgblack@eecs.umich.edu}; 1835332Sgblack@eecs.umich.edu 1845414Sgblack@eecs.umich.edudef macroop BSR_R_P { 1855332Sgblack@eecs.umich.edu 1865332Sgblack@eecs.umich.edu rdip t7 1876344Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 1885332Sgblack@eecs.umich.edu ld t1, seg, riprel, disp 1895332Sgblack@eecs.umich.edu 1905332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 1915332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 1925661Sgblack@eecs.umich.edu br label("end"), flags=(CZF,) 1935332Sgblack@eecs.umich.edu 1945332Sgblack@eecs.umich.edu # Zero out the result register 1955332Sgblack@eecs.umich.edu movi reg, reg, 0x0 1965332Sgblack@eecs.umich.edu 1975332Sgblack@eecs.umich.edu # Bit 6 1985333Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 1995332Sgblack@eecs.umich.edu ori t4, reg, 0x20 2005332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2015332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2025332Sgblack@eecs.umich.edu 2035332Sgblack@eecs.umich.edu # Bit 5 2045333Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 2055332Sgblack@eecs.umich.edu ori t4, reg, 0x10 2065332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2075332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2085332Sgblack@eecs.umich.edu 2095332Sgblack@eecs.umich.edu # Bit 4 2105333Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 2115332Sgblack@eecs.umich.edu ori t4, reg, 0x8 2125332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2135332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2145332Sgblack@eecs.umich.edu 2155332Sgblack@eecs.umich.edu # Bit 3 2165333Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 2175332Sgblack@eecs.umich.edu ori t4, reg, 0x4 2185332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2195332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2205332Sgblack@eecs.umich.edu 2215332Sgblack@eecs.umich.edu # Bit 2 2225333Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 2235332Sgblack@eecs.umich.edu ori t4, reg, 0x2 2245332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2255332Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2265332Sgblack@eecs.umich.edu 2275332Sgblack@eecs.umich.edu # Bit 1 2285333Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 2295332Sgblack@eecs.umich.edu ori t4, reg, 0x1 2305332Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2315332Sgblack@eecs.umich.edu 2325332Sgblack@eecs.umich.eduend: 2335332Sgblack@eecs.umich.edu fault "NoFault" 2345332Sgblack@eecs.umich.edu}; 2355332Sgblack@eecs.umich.edu 2365414Sgblack@eecs.umich.edudef macroop BSF_R_R { 2375332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 2385333Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 2395332Sgblack@eecs.umich.edu and t1, regm, regm, flags=(ZF,) 2405661Sgblack@eecs.umich.edu br label("end"), flags=(CZF,) 2415332Sgblack@eecs.umich.edu 2425332Sgblack@eecs.umich.edu # Zero out the result register 2435332Sgblack@eecs.umich.edu movi reg, reg, 0 2445332Sgblack@eecs.umich.edu 2455333Sgblack@eecs.umich.edu subi t2, t1, 1 2465333Sgblack@eecs.umich.edu xor t1, t2, t1 2475333Sgblack@eecs.umich.edu 2485423Sgblack@eecs.umich.edu 2495332Sgblack@eecs.umich.edu # Bit 6 2505423Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 2515423Sgblack@eecs.umich.edu ori t4, reg, 32 2525423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2535415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2545332Sgblack@eecs.umich.edu 2555332Sgblack@eecs.umich.edu # Bit 5 2565423Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 2575423Sgblack@eecs.umich.edu ori t4, reg, 16 2585423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2595415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2605332Sgblack@eecs.umich.edu 2615332Sgblack@eecs.umich.edu # Bit 4 2625423Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 2635423Sgblack@eecs.umich.edu ori t4, reg, 8 2645423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2655415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2665332Sgblack@eecs.umich.edu 2675332Sgblack@eecs.umich.edu # Bit 3 2685423Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 2695423Sgblack@eecs.umich.edu ori t4, reg, 4 2705423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2715415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2725332Sgblack@eecs.umich.edu 2735332Sgblack@eecs.umich.edu # Bit 2 2745423Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 2755423Sgblack@eecs.umich.edu ori t4, reg, 2 2765423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2775415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 2785332Sgblack@eecs.umich.edu 2795332Sgblack@eecs.umich.edu # Bit 1 2805423Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 2815423Sgblack@eecs.umich.edu ori t4, reg, 1 2825423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 2835332Sgblack@eecs.umich.edu 2845332Sgblack@eecs.umich.eduend: 2855332Sgblack@eecs.umich.edu fault "NoFault" 2865332Sgblack@eecs.umich.edu}; 2875332Sgblack@eecs.umich.edu 2885414Sgblack@eecs.umich.edudef macroop BSF_R_M { 2895332Sgblack@eecs.umich.edu 2905333Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 2915332Sgblack@eecs.umich.edu ld t1, seg, sib, disp 2925332Sgblack@eecs.umich.edu 2935332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 2945332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 2955661Sgblack@eecs.umich.edu br label("end"), flags=(CZF,) 2965332Sgblack@eecs.umich.edu 2975332Sgblack@eecs.umich.edu # Zero out the result register 2985332Sgblack@eecs.umich.edu mov reg, reg, t0 2995332Sgblack@eecs.umich.edu 3005333Sgblack@eecs.umich.edu subi t2, t1, 1 3015333Sgblack@eecs.umich.edu xor t1, t2, t1 3025333Sgblack@eecs.umich.edu 3035332Sgblack@eecs.umich.edu # Bit 6 3045423Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 3055423Sgblack@eecs.umich.edu ori t4, reg, 32 3065423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3075415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3085332Sgblack@eecs.umich.edu 3095332Sgblack@eecs.umich.edu # Bit 5 3105423Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 3115423Sgblack@eecs.umich.edu ori t4, reg, 16 3125423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3135415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3145332Sgblack@eecs.umich.edu 3155332Sgblack@eecs.umich.edu # Bit 4 3165423Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 3175423Sgblack@eecs.umich.edu ori t4, reg, 8 3185423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3195415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3205332Sgblack@eecs.umich.edu 3215332Sgblack@eecs.umich.edu # Bit 3 3225423Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 3235423Sgblack@eecs.umich.edu ori t4, reg, 4 3245423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3255415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3265332Sgblack@eecs.umich.edu 3275332Sgblack@eecs.umich.edu # Bit 2 3285423Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 3295423Sgblack@eecs.umich.edu ori t4, reg, 2 3305423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3315415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3325332Sgblack@eecs.umich.edu 3335332Sgblack@eecs.umich.edu # Bit 1 3345423Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 3355423Sgblack@eecs.umich.edu ori t4, reg, 1 3365423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3375415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3385332Sgblack@eecs.umich.edu 3395332Sgblack@eecs.umich.eduend: 3405332Sgblack@eecs.umich.edu fault "NoFault" 3415332Sgblack@eecs.umich.edu}; 3425332Sgblack@eecs.umich.edu 3435414Sgblack@eecs.umich.edudef macroop BSF_R_P { 3445332Sgblack@eecs.umich.edu 3455332Sgblack@eecs.umich.edu rdip t7 3465333Sgblack@eecs.umich.edu mov t1, t1, t0, dataSize=8 3475332Sgblack@eecs.umich.edu ld t1, seg, riprel, disp 3485332Sgblack@eecs.umich.edu 3495332Sgblack@eecs.umich.edu # Determine if the input was zero, and also move it to a temp reg. 3505332Sgblack@eecs.umich.edu and t1, t1, t1, flags=(ZF,) 3515661Sgblack@eecs.umich.edu br label("end"), flags=(CZF,) 3525332Sgblack@eecs.umich.edu 3535332Sgblack@eecs.umich.edu # Zero out the result register 3545332Sgblack@eecs.umich.edu mov reg, reg, t0 3555332Sgblack@eecs.umich.edu 3565333Sgblack@eecs.umich.edu subi t2, t1, 1 3575333Sgblack@eecs.umich.edu xor t1, t2, t1 3585333Sgblack@eecs.umich.edu 3595332Sgblack@eecs.umich.edu # Bit 6 3605423Sgblack@eecs.umich.edu srli t3, t1, 32, dataSize=8, flags=(EZF,) 3615423Sgblack@eecs.umich.edu ori t4, reg, 32 3625423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3635415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3645332Sgblack@eecs.umich.edu 3655332Sgblack@eecs.umich.edu # Bit 5 3665423Sgblack@eecs.umich.edu srli t3, t1, 16, dataSize=8, flags=(EZF,) 3675423Sgblack@eecs.umich.edu ori t4, reg, 16 3685423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3695415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3705332Sgblack@eecs.umich.edu 3715332Sgblack@eecs.umich.edu # Bit 4 3725423Sgblack@eecs.umich.edu srli t3, t1, 8, dataSize=8, flags=(EZF,) 3735423Sgblack@eecs.umich.edu ori t4, reg, 8 3745423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3755415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3765332Sgblack@eecs.umich.edu 3775332Sgblack@eecs.umich.edu # Bit 3 3785423Sgblack@eecs.umich.edu srli t3, t1, 4, dataSize=8, flags=(EZF,) 3795423Sgblack@eecs.umich.edu ori t4, reg, 4 3805423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3815415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3825332Sgblack@eecs.umich.edu 3835332Sgblack@eecs.umich.edu # Bit 2 3845423Sgblack@eecs.umich.edu srli t3, t1, 2, dataSize=8, flags=(EZF,) 3855423Sgblack@eecs.umich.edu ori t4, reg, 2 3865423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3875415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3885332Sgblack@eecs.umich.edu 3895332Sgblack@eecs.umich.edu # Bit 1 3905423Sgblack@eecs.umich.edu srli t3, t1, 1, dataSize=8, flags=(EZF,) 3915423Sgblack@eecs.umich.edu ori t4, reg, 1 3925423Sgblack@eecs.umich.edu mov reg, reg, t4, flags=(nCEZF,) 3935415Sgblack@eecs.umich.edu mov t1, t1, t3, flags=(nCEZF,) 3945332Sgblack@eecs.umich.edu 3955332Sgblack@eecs.umich.eduend: 3965332Sgblack@eecs.umich.edu fault "NoFault" 3975332Sgblack@eecs.umich.edu}; 3985332Sgblack@eecs.umich.edu''' 399