segmentation.py revision 5930
15291Sgblack@eecs.umich.edu# Copyright (c) 2007 The Hewlett-Packard Development Company 25291Sgblack@eecs.umich.edu# All rights reserved. 35291Sgblack@eecs.umich.edu# 45291Sgblack@eecs.umich.edu# Redistribution and use of this software in source and binary forms, 55291Sgblack@eecs.umich.edu# with or without modification, are permitted provided that the 65291Sgblack@eecs.umich.edu# following conditions are met: 75291Sgblack@eecs.umich.edu# 85291Sgblack@eecs.umich.edu# The software must be used only for Non-Commercial Use which means any 95291Sgblack@eecs.umich.edu# use which is NOT directed to receiving any direct monetary 105291Sgblack@eecs.umich.edu# compensation for, or commercial advantage from such use. Illustrative 115291Sgblack@eecs.umich.edu# examples of non-commercial use are academic research, personal study, 125291Sgblack@eecs.umich.edu# teaching, education and corporate research & development. 135291Sgblack@eecs.umich.edu# Illustrative examples of commercial use are distributing products for 145291Sgblack@eecs.umich.edu# commercial advantage and providing services using the software for 155291Sgblack@eecs.umich.edu# commercial advantage. 165291Sgblack@eecs.umich.edu# 175291Sgblack@eecs.umich.edu# If you wish to use this software or functionality therein that may be 185291Sgblack@eecs.umich.edu# covered by patents for commercial use, please contact: 195291Sgblack@eecs.umich.edu# Director of Intellectual Property Licensing 205291Sgblack@eecs.umich.edu# Office of Strategy and Technology 215291Sgblack@eecs.umich.edu# Hewlett-Packard Company 225291Sgblack@eecs.umich.edu# 1501 Page Mill Road 235291Sgblack@eecs.umich.edu# Palo Alto, California 94304 245291Sgblack@eecs.umich.edu# 255291Sgblack@eecs.umich.edu# Redistributions of source code must retain the above copyright notice, 265291Sgblack@eecs.umich.edu# this list of conditions and the following disclaimer. Redistributions 275291Sgblack@eecs.umich.edu# in binary form must reproduce the above copyright notice, this list of 285291Sgblack@eecs.umich.edu# conditions and the following disclaimer in the documentation and/or 295291Sgblack@eecs.umich.edu# other materials provided with the distribution. Neither the name of 305291Sgblack@eecs.umich.edu# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 315291Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from 325291Sgblack@eecs.umich.edu# this software without specific prior written permission. No right of 335291Sgblack@eecs.umich.edu# sublicense is granted herewith. Derivatives of the software and 345291Sgblack@eecs.umich.edu# output created using the software may be prepared, but only for 355291Sgblack@eecs.umich.edu# Non-Commercial Uses. Derivatives of the software may be shared with 365291Sgblack@eecs.umich.edu# others provided: (i) the others agree to abide by the list of 375291Sgblack@eecs.umich.edu# conditions herein which includes the Non-Commercial Use restrictions; 385291Sgblack@eecs.umich.edu# and (ii) such Derivatives of the software include the above copyright 395291Sgblack@eecs.umich.edu# notice to acknowledge the contribution from this software where 405291Sgblack@eecs.umich.edu# applicable, this list of conditions and the disclaimer below. 415291Sgblack@eecs.umich.edu# 425291Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 435291Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 445291Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 455291Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 465291Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 475291Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 485291Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 495291Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 505291Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 515291Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 525291Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 535291Sgblack@eecs.umich.edu# 545291Sgblack@eecs.umich.edu# Authors: Gabe Black 555291Sgblack@eecs.umich.edu 565291Sgblack@eecs.umich.edumicrocode = ''' 575291Sgblack@eecs.umich.edudef macroop LGDT_M 585291Sgblack@eecs.umich.edu{ 595930Sgblack@eecs.umich.edu .adjust_env maxOsz 605291Sgblack@eecs.umich.edu 615291Sgblack@eecs.umich.edu # Get the limit 625291Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 635291Sgblack@eecs.umich.edu # Get the base 645291Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2' 655294Sgblack@eecs.umich.edu wrbase tsg, t2 665294Sgblack@eecs.umich.edu wrlimit tsg, t1 675291Sgblack@eecs.umich.edu}; 685291Sgblack@eecs.umich.edu 695291Sgblack@eecs.umich.edudef macroop LGDT_P 705291Sgblack@eecs.umich.edu{ 715930Sgblack@eecs.umich.edu .adjust_env maxOsz 725291Sgblack@eecs.umich.edu 735291Sgblack@eecs.umich.edu rdip t7 745291Sgblack@eecs.umich.edu # Get the limit 755291Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 765291Sgblack@eecs.umich.edu # Get the base 775291Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2' 785294Sgblack@eecs.umich.edu wrbase tsg, t2 795294Sgblack@eecs.umich.edu wrlimit tsg, t1 805291Sgblack@eecs.umich.edu}; 815291Sgblack@eecs.umich.edu 825291Sgblack@eecs.umich.edu# 835291Sgblack@eecs.umich.edu# These versions are for when the original data size was 16 bits. The base is 845291Sgblack@eecs.umich.edu# still 32 bits, but the top byte is zeroed before being used. 855291Sgblack@eecs.umich.edu# 865291Sgblack@eecs.umich.edu 875291Sgblack@eecs.umich.edudef macroop LGDT_16_M 885291Sgblack@eecs.umich.edu{ 895930Sgblack@eecs.umich.edu .adjust_env maxOsz 905291Sgblack@eecs.umich.edu 915291Sgblack@eecs.umich.edu # Get the limit 925291Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 935291Sgblack@eecs.umich.edu # Get the base 945291Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2', dataSize=4 955927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 965294Sgblack@eecs.umich.edu wrbase tsg, t2 975294Sgblack@eecs.umich.edu wrlimit tsg, t1 985291Sgblack@eecs.umich.edu}; 995291Sgblack@eecs.umich.edu 1005291Sgblack@eecs.umich.edudef macroop LGDT_16_P 1015291Sgblack@eecs.umich.edu{ 1025930Sgblack@eecs.umich.edu .adjust_env maxOsz 1035291Sgblack@eecs.umich.edu 1045291Sgblack@eecs.umich.edu rdip t7 1055291Sgblack@eecs.umich.edu # Get the limit 1065291Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 1075291Sgblack@eecs.umich.edu # Get the base 1085291Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2', dataSize=4 1095927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 1105294Sgblack@eecs.umich.edu wrbase tsg, t2 1115294Sgblack@eecs.umich.edu wrlimit tsg, t1 1125291Sgblack@eecs.umich.edu}; 1135292Sgblack@eecs.umich.edu 1145292Sgblack@eecs.umich.edudef macroop LIDT_M 1155292Sgblack@eecs.umich.edu{ 1165930Sgblack@eecs.umich.edu .adjust_env maxOsz 1175292Sgblack@eecs.umich.edu 1185292Sgblack@eecs.umich.edu # Get the limit 1195292Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 1205292Sgblack@eecs.umich.edu # Get the base 1215292Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2' 1225292Sgblack@eecs.umich.edu wrbase idtr, t2 1235292Sgblack@eecs.umich.edu wrlimit idtr, t1 1245292Sgblack@eecs.umich.edu}; 1255292Sgblack@eecs.umich.edu 1265292Sgblack@eecs.umich.edudef macroop LIDT_P 1275292Sgblack@eecs.umich.edu{ 1285930Sgblack@eecs.umich.edu .adjust_env maxOsz 1295292Sgblack@eecs.umich.edu 1305292Sgblack@eecs.umich.edu rdip t7 1315292Sgblack@eecs.umich.edu # Get the limit 1325292Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 1335292Sgblack@eecs.umich.edu # Get the base 1345292Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2' 1355292Sgblack@eecs.umich.edu wrbase idtr, t2 1365292Sgblack@eecs.umich.edu wrlimit idtr, t1 1375292Sgblack@eecs.umich.edu}; 1385292Sgblack@eecs.umich.edu 1395292Sgblack@eecs.umich.edu# 1405292Sgblack@eecs.umich.edu# These versions are for when the original data size was 16 bits. The base is 1415292Sgblack@eecs.umich.edu# still 32 bits, but the top byte is zeroed before being used. 1425292Sgblack@eecs.umich.edu# 1435292Sgblack@eecs.umich.edu 1445292Sgblack@eecs.umich.edudef macroop LIDT_16_M 1455292Sgblack@eecs.umich.edu{ 1465930Sgblack@eecs.umich.edu .adjust_env maxOsz 1475292Sgblack@eecs.umich.edu 1485292Sgblack@eecs.umich.edu # Get the limit 1495292Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 1505292Sgblack@eecs.umich.edu # Get the base 1515292Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2', dataSize=4 1525927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 1535292Sgblack@eecs.umich.edu wrbase idtr, t2 1545292Sgblack@eecs.umich.edu wrlimit idtr, t1 1555292Sgblack@eecs.umich.edu}; 1565292Sgblack@eecs.umich.edu 1575292Sgblack@eecs.umich.edudef macroop LIDT_16_P 1585292Sgblack@eecs.umich.edu{ 1595930Sgblack@eecs.umich.edu .adjust_env maxOsz 1605292Sgblack@eecs.umich.edu 1615292Sgblack@eecs.umich.edu rdip t7 1625292Sgblack@eecs.umich.edu # Get the limit 1635292Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 1645292Sgblack@eecs.umich.edu # Get the base 1655292Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2', dataSize=4 1665927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 1675292Sgblack@eecs.umich.edu wrbase idtr, t2 1685292Sgblack@eecs.umich.edu wrlimit idtr, t1 1695292Sgblack@eecs.umich.edu}; 1705683Sgblack@eecs.umich.edu 1715902Sgblack@eecs.umich.edudef macroop LTR_R 1725902Sgblack@eecs.umich.edu{ 1735902Sgblack@eecs.umich.edu chks reg, t0, TRCheck 1745902Sgblack@eecs.umich.edu limm t4, 0 1755902Sgblack@eecs.umich.edu srli t4, reg, 3, dataSize=2 1765902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 1775902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 1785902Sgblack@eecs.umich.edu chks reg, t1, TSSCheck 1795902Sgblack@eecs.umich.edu wrdh t3, t1, t2 1805902Sgblack@eecs.umich.edu wrdl tr, t1, reg 1815902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 1825902Sgblack@eecs.umich.edu ori t1, t1, (1 << 9) 1835902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 1845902Sgblack@eecs.umich.edu}; 1855902Sgblack@eecs.umich.edu 1865902Sgblack@eecs.umich.edudef macroop LTR_M 1875902Sgblack@eecs.umich.edu{ 1885902Sgblack@eecs.umich.edu ld t5, seg, sib, disp, dataSize=2 1895902Sgblack@eecs.umich.edu chks t5, t0, TRCheck 1905902Sgblack@eecs.umich.edu limm t4, 0 1915902Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 1925902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 1935902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 1945902Sgblack@eecs.umich.edu chks t5, t1, TSSCheck 1955902Sgblack@eecs.umich.edu wrdh t3, t1, t2 1965902Sgblack@eecs.umich.edu wrdl tr, t1, t5 1975902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 1985902Sgblack@eecs.umich.edu ori t1, t1, (1 << 9) 1995902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 2005902Sgblack@eecs.umich.edu}; 2015902Sgblack@eecs.umich.edu 2025902Sgblack@eecs.umich.edudef macroop LTR_P 2035902Sgblack@eecs.umich.edu{ 2045902Sgblack@eecs.umich.edu rdip t7 2055902Sgblack@eecs.umich.edu ld t5, seg, riprel, disp, dataSize=2 2065902Sgblack@eecs.umich.edu chks t5, t0, TRCheck 2075902Sgblack@eecs.umich.edu limm t4, 0 2085902Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 2095902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2105902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2115902Sgblack@eecs.umich.edu chks t5, t1, TSSCheck 2125902Sgblack@eecs.umich.edu wrdh t3, t1, t2 2135902Sgblack@eecs.umich.edu wrdl tr, t1, t5 2145902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 2155902Sgblack@eecs.umich.edu ori t1, t1, (1 << 9) 2165902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 2175902Sgblack@eecs.umich.edu}; 2185902Sgblack@eecs.umich.edu 2195683Sgblack@eecs.umich.edudef macroop SWAPGS 2205683Sgblack@eecs.umich.edu{ 2215683Sgblack@eecs.umich.edu rdval t1, kernel_gs_base, dataSize=8 2225683Sgblack@eecs.umich.edu rdbase t2, gs, dataSize=8 2235683Sgblack@eecs.umich.edu wrbase gs, t1, dataSize=8 2245683Sgblack@eecs.umich.edu wrval kernel_gs_base, t2, dataSize=8 2255683Sgblack@eecs.umich.edu}; 2265291Sgblack@eecs.umich.edu''' 227