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