segmentation.py revision 7087
15291Sgblack@eecs.umich.edu# Copyright (c) 2007 The Hewlett-Packard Development Company 25291Sgblack@eecs.umich.edu# All rights reserved. 35291Sgblack@eecs.umich.edu# 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. 125291Sgblack@eecs.umich.edu# 137087Snate@binkert.org# Redistribution and use in source and binary forms, with or without 147087Snate@binkert.org# modification, are permitted provided that the following conditions are 157087Snate@binkert.org# met: redistributions of source code must retain the above copyright 167087Snate@binkert.org# notice, this list of conditions and the following disclaimer; 177087Snate@binkert.org# redistributions in binary form must reproduce the above copyright 187087Snate@binkert.org# notice, this list of conditions and the following disclaimer in the 197087Snate@binkert.org# documentation and/or other materials provided with the distribution; 207087Snate@binkert.org# neither the name of the copyright holders nor the names of its 215291Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from 227087Snate@binkert.org# this software without specific prior written permission. 235291Sgblack@eecs.umich.edu# 245291Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 255291Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 265291Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 275291Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 285291Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 295291Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 305291Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 315291Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 325291Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 335291Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 345291Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 355291Sgblack@eecs.umich.edu# 365291Sgblack@eecs.umich.edu# Authors: Gabe Black 375291Sgblack@eecs.umich.edu 385291Sgblack@eecs.umich.edumicrocode = ''' 395291Sgblack@eecs.umich.edudef macroop LGDT_M 405291Sgblack@eecs.umich.edu{ 415930Sgblack@eecs.umich.edu .adjust_env maxOsz 425291Sgblack@eecs.umich.edu 435291Sgblack@eecs.umich.edu # Get the limit 445291Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 455291Sgblack@eecs.umich.edu # Get the base 465291Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2' 475294Sgblack@eecs.umich.edu wrbase tsg, t2 485294Sgblack@eecs.umich.edu wrlimit tsg, t1 495291Sgblack@eecs.umich.edu}; 505291Sgblack@eecs.umich.edu 515291Sgblack@eecs.umich.edudef macroop LGDT_P 525291Sgblack@eecs.umich.edu{ 535930Sgblack@eecs.umich.edu .adjust_env maxOsz 545291Sgblack@eecs.umich.edu 555291Sgblack@eecs.umich.edu rdip t7 565291Sgblack@eecs.umich.edu # Get the limit 575291Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 585291Sgblack@eecs.umich.edu # Get the base 595291Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2' 605294Sgblack@eecs.umich.edu wrbase tsg, t2 615294Sgblack@eecs.umich.edu wrlimit tsg, t1 625291Sgblack@eecs.umich.edu}; 635291Sgblack@eecs.umich.edu 645291Sgblack@eecs.umich.edu# 655291Sgblack@eecs.umich.edu# These versions are for when the original data size was 16 bits. The base is 665291Sgblack@eecs.umich.edu# still 32 bits, but the top byte is zeroed before being used. 675291Sgblack@eecs.umich.edu# 685291Sgblack@eecs.umich.edu 695291Sgblack@eecs.umich.edudef macroop LGDT_16_M 705291Sgblack@eecs.umich.edu{ 715930Sgblack@eecs.umich.edu .adjust_env maxOsz 725291Sgblack@eecs.umich.edu 735291Sgblack@eecs.umich.edu # Get the limit 745291Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 755291Sgblack@eecs.umich.edu # Get the base 765291Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2', dataSize=4 775927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 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.edudef macroop LGDT_16_P 835291Sgblack@eecs.umich.edu{ 845930Sgblack@eecs.umich.edu .adjust_env maxOsz 855291Sgblack@eecs.umich.edu 865291Sgblack@eecs.umich.edu rdip t7 875291Sgblack@eecs.umich.edu # Get the limit 885291Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 895291Sgblack@eecs.umich.edu # Get the base 905291Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2', dataSize=4 915927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 925294Sgblack@eecs.umich.edu wrbase tsg, t2 935294Sgblack@eecs.umich.edu wrlimit tsg, t1 945291Sgblack@eecs.umich.edu}; 955292Sgblack@eecs.umich.edu 965292Sgblack@eecs.umich.edudef macroop LIDT_M 975292Sgblack@eecs.umich.edu{ 985930Sgblack@eecs.umich.edu .adjust_env maxOsz 995292Sgblack@eecs.umich.edu 1005292Sgblack@eecs.umich.edu # Get the limit 1015292Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 1025292Sgblack@eecs.umich.edu # Get the base 1035292Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2' 1045292Sgblack@eecs.umich.edu wrbase idtr, t2 1055292Sgblack@eecs.umich.edu wrlimit idtr, t1 1065292Sgblack@eecs.umich.edu}; 1075292Sgblack@eecs.umich.edu 1085292Sgblack@eecs.umich.edudef macroop LIDT_P 1095292Sgblack@eecs.umich.edu{ 1105930Sgblack@eecs.umich.edu .adjust_env maxOsz 1115292Sgblack@eecs.umich.edu 1125292Sgblack@eecs.umich.edu rdip t7 1135292Sgblack@eecs.umich.edu # Get the limit 1145292Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 1155292Sgblack@eecs.umich.edu # Get the base 1165292Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2' 1175292Sgblack@eecs.umich.edu wrbase idtr, t2 1185292Sgblack@eecs.umich.edu wrlimit idtr, t1 1195292Sgblack@eecs.umich.edu}; 1205292Sgblack@eecs.umich.edu 1215292Sgblack@eecs.umich.edu# 1225292Sgblack@eecs.umich.edu# These versions are for when the original data size was 16 bits. The base is 1235292Sgblack@eecs.umich.edu# still 32 bits, but the top byte is zeroed before being used. 1245292Sgblack@eecs.umich.edu# 1255292Sgblack@eecs.umich.edu 1265292Sgblack@eecs.umich.edudef macroop LIDT_16_M 1275292Sgblack@eecs.umich.edu{ 1285930Sgblack@eecs.umich.edu .adjust_env maxOsz 1295292Sgblack@eecs.umich.edu 1305292Sgblack@eecs.umich.edu # Get the limit 1315292Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 1325292Sgblack@eecs.umich.edu # Get the base 1335292Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2', dataSize=4 1345927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 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.edudef macroop LIDT_16_P 1405292Sgblack@eecs.umich.edu{ 1415930Sgblack@eecs.umich.edu .adjust_env maxOsz 1425292Sgblack@eecs.umich.edu 1435292Sgblack@eecs.umich.edu rdip t7 1445292Sgblack@eecs.umich.edu # Get the limit 1455292Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 1465292Sgblack@eecs.umich.edu # Get the base 1475292Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2', dataSize=4 1485927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 1495292Sgblack@eecs.umich.edu wrbase idtr, t2 1505292Sgblack@eecs.umich.edu wrlimit idtr, t1 1515292Sgblack@eecs.umich.edu}; 1525683Sgblack@eecs.umich.edu 1535902Sgblack@eecs.umich.edudef macroop LTR_R 1545902Sgblack@eecs.umich.edu{ 1555902Sgblack@eecs.umich.edu chks reg, t0, TRCheck 1566062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 1575902Sgblack@eecs.umich.edu srli t4, reg, 3, dataSize=2 1585902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 1595902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 1605902Sgblack@eecs.umich.edu chks reg, t1, TSSCheck 1615902Sgblack@eecs.umich.edu wrdh t3, t1, t2 1625902Sgblack@eecs.umich.edu wrdl tr, t1, reg 1635902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 1646644Sgblack@eecs.umich.edu limm t5, (1 << 9) 1656644Sgblack@eecs.umich.edu or t1, t1, t5 1665902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 1675902Sgblack@eecs.umich.edu}; 1685902Sgblack@eecs.umich.edu 1695902Sgblack@eecs.umich.edudef macroop LTR_M 1705902Sgblack@eecs.umich.edu{ 1715902Sgblack@eecs.umich.edu ld t5, seg, sib, disp, dataSize=2 1725902Sgblack@eecs.umich.edu chks t5, t0, TRCheck 1736062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 1745902Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 1755902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 1765902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 1775902Sgblack@eecs.umich.edu chks t5, t1, TSSCheck 1785902Sgblack@eecs.umich.edu wrdh t3, t1, t2 1795902Sgblack@eecs.umich.edu wrdl tr, t1, t5 1805902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 1816644Sgblack@eecs.umich.edu limm t5, (1 << 9) 1826644Sgblack@eecs.umich.edu or t1, t1, t5 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_P 1875902Sgblack@eecs.umich.edu{ 1885902Sgblack@eecs.umich.edu rdip t7 1895902Sgblack@eecs.umich.edu ld t5, seg, riprel, disp, dataSize=2 1905902Sgblack@eecs.umich.edu chks t5, t0, TRCheck 1916062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 1925902Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 1935902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 1945902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 1955902Sgblack@eecs.umich.edu chks t5, t1, TSSCheck 1965902Sgblack@eecs.umich.edu wrdh t3, t1, t2 1975902Sgblack@eecs.umich.edu wrdl tr, t1, t5 1985902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 1996644Sgblack@eecs.umich.edu limm t5, (1 << 9) 2006644Sgblack@eecs.umich.edu or t1, t1, t5 2015902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 2025902Sgblack@eecs.umich.edu}; 2035902Sgblack@eecs.umich.edu 2045937Sgblack@eecs.umich.edudef macroop LLDT_R 2055937Sgblack@eecs.umich.edu{ 2065937Sgblack@eecs.umich.edu chks reg, t0, InGDTCheck, flags=(EZF,) 2075937Sgblack@eecs.umich.edu br label("end"), flags=(CEZF,) 2086062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 2095937Sgblack@eecs.umich.edu srli t4, reg, 3, dataSize=2 2105937Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2115937Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2125937Sgblack@eecs.umich.edu chks reg, t1, LDTCheck 2135937Sgblack@eecs.umich.edu wrdh t3, t1, t2 2145937Sgblack@eecs.umich.edu wrdl tr, t1, reg 2155937Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 2165937Sgblack@eecs.umich.eduend: 2175937Sgblack@eecs.umich.edu fault "NoFault" 2185937Sgblack@eecs.umich.edu}; 2195937Sgblack@eecs.umich.edu 2205937Sgblack@eecs.umich.edudef macroop LLDT_M 2215937Sgblack@eecs.umich.edu{ 2225937Sgblack@eecs.umich.edu ld t5, seg, sib, disp, dataSize=2 2235937Sgblack@eecs.umich.edu chks t5, t0, InGDTCheck, flags=(EZF,) 2245937Sgblack@eecs.umich.edu br label("end"), flags=(CEZF,) 2256062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 2265937Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 2275937Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2285937Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2295937Sgblack@eecs.umich.edu chks t5, t1, LDTCheck 2305937Sgblack@eecs.umich.edu wrdh t3, t1, t2 2315937Sgblack@eecs.umich.edu wrdl tr, t1, t5 2325937Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 2335937Sgblack@eecs.umich.eduend: 2345937Sgblack@eecs.umich.edu fault "NoFault" 2355937Sgblack@eecs.umich.edu}; 2365937Sgblack@eecs.umich.edu 2375937Sgblack@eecs.umich.edudef macroop LLDT_P 2385937Sgblack@eecs.umich.edu{ 2395937Sgblack@eecs.umich.edu rdip t7 2405937Sgblack@eecs.umich.edu ld t5, seg, riprel, disp, dataSize=2 2415937Sgblack@eecs.umich.edu chks t5, t0, InGDTCheck, flags=(EZF,) 2425937Sgblack@eecs.umich.edu br label("end"), flags=(CEZF,) 2436062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 2445937Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 2455937Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2465937Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2475937Sgblack@eecs.umich.edu chks t5, t1, LDTCheck 2485937Sgblack@eecs.umich.edu wrdh t3, t1, t2 2495937Sgblack@eecs.umich.edu wrdl tr, t1, t5 2505937Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 2515937Sgblack@eecs.umich.eduend: 2525937Sgblack@eecs.umich.edu fault "NoFault" 2535937Sgblack@eecs.umich.edu}; 2545937Sgblack@eecs.umich.edu 2555683Sgblack@eecs.umich.edudef macroop SWAPGS 2565683Sgblack@eecs.umich.edu{ 2575683Sgblack@eecs.umich.edu rdval t1, kernel_gs_base, dataSize=8 2585683Sgblack@eecs.umich.edu rdbase t2, gs, dataSize=8 2595683Sgblack@eecs.umich.edu wrbase gs, t1, dataSize=8 2605683Sgblack@eecs.umich.edu wrval kernel_gs_base, t2, dataSize=8 2615683Sgblack@eecs.umich.edu}; 2625291Sgblack@eecs.umich.edu''' 263