15291Sgblack@eecs.umich.edu# Copyright (c) 2007 The Hewlett-Packard Development Company 210959Sdavid.hashe@amd.com# Copyright (c) 2012-2013 AMD 35291Sgblack@eecs.umich.edu# All rights reserved. 45291Sgblack@eecs.umich.edu# 57087Snate@binkert.org# The license below extends only to copyright in the software and shall 67087Snate@binkert.org# not be construed as granting a license to any other intellectual 77087Snate@binkert.org# property including but not limited to intellectual property relating 87087Snate@binkert.org# to a hardware implementation of the functionality of the software 97087Snate@binkert.org# licensed hereunder. You may use the software subject to the license 107087Snate@binkert.org# terms below provided that you ensure that this notice is replicated 117087Snate@binkert.org# unmodified and in its entirety in all distributions of the software, 127087Snate@binkert.org# modified or unmodified, in source code or in binary form. 135291Sgblack@eecs.umich.edu# 147087Snate@binkert.org# Redistribution and use in source and binary forms, with or without 157087Snate@binkert.org# modification, are permitted provided that the following conditions are 167087Snate@binkert.org# met: redistributions of source code must retain the above copyright 177087Snate@binkert.org# notice, this list of conditions and the following disclaimer; 187087Snate@binkert.org# redistributions in binary form must reproduce the above copyright 197087Snate@binkert.org# notice, this list of conditions and the following disclaimer in the 207087Snate@binkert.org# documentation and/or other materials provided with the distribution; 217087Snate@binkert.org# neither the name of the copyright holders nor the names of its 225291Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from 237087Snate@binkert.org# this software without specific prior written permission. 245291Sgblack@eecs.umich.edu# 255291Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 265291Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 275291Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 285291Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 295291Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 305291Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 315291Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 325291Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 335291Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 345291Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 355291Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 365291Sgblack@eecs.umich.edu# 375291Sgblack@eecs.umich.edu# Authors: Gabe Black 385291Sgblack@eecs.umich.edu 395291Sgblack@eecs.umich.edumicrocode = ''' 405291Sgblack@eecs.umich.edudef macroop LGDT_M 415291Sgblack@eecs.umich.edu{ 4212584Sgabeblack@google.com .serialize_after 435930Sgblack@eecs.umich.edu .adjust_env maxOsz 445291Sgblack@eecs.umich.edu 455291Sgblack@eecs.umich.edu # Get the limit 465291Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 475291Sgblack@eecs.umich.edu # Get the base 485291Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2' 495294Sgblack@eecs.umich.edu wrbase tsg, t2 505294Sgblack@eecs.umich.edu wrlimit tsg, t1 515291Sgblack@eecs.umich.edu}; 525291Sgblack@eecs.umich.edu 535291Sgblack@eecs.umich.edudef macroop LGDT_P 545291Sgblack@eecs.umich.edu{ 5512584Sgabeblack@google.com .serialize_after 565930Sgblack@eecs.umich.edu .adjust_env maxOsz 575291Sgblack@eecs.umich.edu 585291Sgblack@eecs.umich.edu rdip t7 595291Sgblack@eecs.umich.edu # Get the limit 605291Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 615291Sgblack@eecs.umich.edu # Get the base 625291Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2' 635294Sgblack@eecs.umich.edu wrbase tsg, t2 645294Sgblack@eecs.umich.edu wrlimit tsg, t1 655291Sgblack@eecs.umich.edu}; 665291Sgblack@eecs.umich.edu 675291Sgblack@eecs.umich.edu# 685291Sgblack@eecs.umich.edu# These versions are for when the original data size was 16 bits. The base is 695291Sgblack@eecs.umich.edu# still 32 bits, but the top byte is zeroed before being used. 705291Sgblack@eecs.umich.edu# 715291Sgblack@eecs.umich.edu 725291Sgblack@eecs.umich.edudef macroop LGDT_16_M 735291Sgblack@eecs.umich.edu{ 7412584Sgabeblack@google.com .serialize_after 755930Sgblack@eecs.umich.edu .adjust_env maxOsz 765291Sgblack@eecs.umich.edu 775291Sgblack@eecs.umich.edu # Get the limit 785291Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 795291Sgblack@eecs.umich.edu # Get the base 805291Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2', dataSize=4 815927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 8210959Sdavid.hashe@amd.com wrbase tsg, t2, dataSize=8 835294Sgblack@eecs.umich.edu wrlimit tsg, t1 845291Sgblack@eecs.umich.edu}; 855291Sgblack@eecs.umich.edu 865291Sgblack@eecs.umich.edudef macroop LGDT_16_P 875291Sgblack@eecs.umich.edu{ 8812584Sgabeblack@google.com .serialize_after 895930Sgblack@eecs.umich.edu .adjust_env maxOsz 905291Sgblack@eecs.umich.edu 915291Sgblack@eecs.umich.edu rdip t7 925291Sgblack@eecs.umich.edu # Get the limit 935291Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 945291Sgblack@eecs.umich.edu # Get the base 955291Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2', dataSize=4 965927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 975294Sgblack@eecs.umich.edu wrbase tsg, t2 985294Sgblack@eecs.umich.edu wrlimit tsg, t1 995291Sgblack@eecs.umich.edu}; 1005292Sgblack@eecs.umich.edu 1015292Sgblack@eecs.umich.edudef macroop LIDT_M 1025292Sgblack@eecs.umich.edu{ 10312584Sgabeblack@google.com .serialize_after 1045930Sgblack@eecs.umich.edu .adjust_env maxOsz 1055292Sgblack@eecs.umich.edu 1065292Sgblack@eecs.umich.edu # Get the limit 1075292Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 1085292Sgblack@eecs.umich.edu # Get the base 1095292Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2' 1105292Sgblack@eecs.umich.edu wrbase idtr, t2 1115292Sgblack@eecs.umich.edu wrlimit idtr, t1 1125292Sgblack@eecs.umich.edu}; 1135292Sgblack@eecs.umich.edu 1145292Sgblack@eecs.umich.edudef macroop LIDT_P 1155292Sgblack@eecs.umich.edu{ 11612584Sgabeblack@google.com .serialize_after 1175930Sgblack@eecs.umich.edu .adjust_env maxOsz 1185292Sgblack@eecs.umich.edu 1195292Sgblack@eecs.umich.edu rdip t7 1205292Sgblack@eecs.umich.edu # Get the limit 1215292Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 1225292Sgblack@eecs.umich.edu # Get the base 1235292Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2' 1245292Sgblack@eecs.umich.edu wrbase idtr, t2 1255292Sgblack@eecs.umich.edu wrlimit idtr, t1 1265292Sgblack@eecs.umich.edu}; 1275292Sgblack@eecs.umich.edu 1285292Sgblack@eecs.umich.edu# 1295292Sgblack@eecs.umich.edu# These versions are for when the original data size was 16 bits. The base is 1305292Sgblack@eecs.umich.edu# still 32 bits, but the top byte is zeroed before being used. 1315292Sgblack@eecs.umich.edu# 1325292Sgblack@eecs.umich.edu 1335292Sgblack@eecs.umich.edudef macroop LIDT_16_M 1345292Sgblack@eecs.umich.edu{ 13512584Sgabeblack@google.com .serialize_after 1365930Sgblack@eecs.umich.edu .adjust_env maxOsz 1375292Sgblack@eecs.umich.edu 1385292Sgblack@eecs.umich.edu # Get the limit 1395292Sgblack@eecs.umich.edu ld t1, seg, sib, disp, dataSize=2 1405292Sgblack@eecs.umich.edu # Get the base 1415292Sgblack@eecs.umich.edu ld t2, seg, sib, 'adjustedDisp + 2', dataSize=4 1425927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 14310959Sdavid.hashe@amd.com wrbase idtr, t2, dataSize=8 1445292Sgblack@eecs.umich.edu wrlimit idtr, t1 1455292Sgblack@eecs.umich.edu}; 1465292Sgblack@eecs.umich.edu 1475292Sgblack@eecs.umich.edudef macroop LIDT_16_P 1485292Sgblack@eecs.umich.edu{ 14912584Sgabeblack@google.com .serialize_after 1505930Sgblack@eecs.umich.edu .adjust_env maxOsz 1515292Sgblack@eecs.umich.edu 1525292Sgblack@eecs.umich.edu rdip t7 1535292Sgblack@eecs.umich.edu # Get the limit 1545292Sgblack@eecs.umich.edu ld t1, seg, riprel, disp, dataSize=2 1555292Sgblack@eecs.umich.edu # Get the base 1565292Sgblack@eecs.umich.edu ld t2, seg, riprel, 'adjustedDisp + 2', dataSize=4 1575927Sgblack@eecs.umich.edu zexti t2, t2, 23, dataSize=8 1585292Sgblack@eecs.umich.edu wrbase idtr, t2 1595292Sgblack@eecs.umich.edu wrlimit idtr, t1 1605292Sgblack@eecs.umich.edu}; 1615683Sgblack@eecs.umich.edu 1625902Sgblack@eecs.umich.edudef macroop LTR_R 1635902Sgblack@eecs.umich.edu{ 16412584Sgabeblack@google.com .serialize_after 1655902Sgblack@eecs.umich.edu chks reg, t0, TRCheck 1666062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 1675902Sgblack@eecs.umich.edu srli t4, reg, 3, dataSize=2 1685902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 1695902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 1705902Sgblack@eecs.umich.edu chks reg, t1, TSSCheck 1715902Sgblack@eecs.umich.edu wrdh t3, t1, t2 1725902Sgblack@eecs.umich.edu wrdl tr, t1, reg 1735902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 1746644Sgblack@eecs.umich.edu limm t5, (1 << 9) 1756644Sgblack@eecs.umich.edu or t1, t1, t5 1765902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 1775902Sgblack@eecs.umich.edu}; 1785902Sgblack@eecs.umich.edu 1795902Sgblack@eecs.umich.edudef macroop LTR_M 1805902Sgblack@eecs.umich.edu{ 18112584Sgabeblack@google.com .serialize_after 1825902Sgblack@eecs.umich.edu ld t5, seg, sib, disp, dataSize=2 1835902Sgblack@eecs.umich.edu chks t5, t0, TRCheck 1846062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 1855902Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 1865902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 1875902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 1885902Sgblack@eecs.umich.edu chks t5, t1, TSSCheck 1895902Sgblack@eecs.umich.edu wrdh t3, t1, t2 1905902Sgblack@eecs.umich.edu wrdl tr, t1, t5 1915902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 1926644Sgblack@eecs.umich.edu limm t5, (1 << 9) 1936644Sgblack@eecs.umich.edu or t1, t1, t5 1945902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 1955902Sgblack@eecs.umich.edu}; 1965902Sgblack@eecs.umich.edu 1975902Sgblack@eecs.umich.edudef macroop LTR_P 1985902Sgblack@eecs.umich.edu{ 19912584Sgabeblack@google.com .serialize_after 2005902Sgblack@eecs.umich.edu rdip t7 2015902Sgblack@eecs.umich.edu ld t5, seg, riprel, disp, dataSize=2 2025902Sgblack@eecs.umich.edu chks t5, t0, TRCheck 2036062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 2045902Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 2055902Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2065902Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2075902Sgblack@eecs.umich.edu chks t5, t1, TSSCheck 2085902Sgblack@eecs.umich.edu wrdh t3, t1, t2 2095902Sgblack@eecs.umich.edu wrdl tr, t1, t5 2105902Sgblack@eecs.umich.edu wrbase tr, t3, dataSize=8 2116644Sgblack@eecs.umich.edu limm t5, (1 << 9) 2126644Sgblack@eecs.umich.edu or t1, t1, t5 2135902Sgblack@eecs.umich.edu st t1, tsg, [8, t4, t0], dataSize=8 2145902Sgblack@eecs.umich.edu}; 2155902Sgblack@eecs.umich.edu 2165937Sgblack@eecs.umich.edudef macroop LLDT_R 2175937Sgblack@eecs.umich.edu{ 21812584Sgabeblack@google.com .serialize_after 2195937Sgblack@eecs.umich.edu chks reg, t0, InGDTCheck, flags=(EZF,) 2205937Sgblack@eecs.umich.edu br label("end"), flags=(CEZF,) 2216062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 2225937Sgblack@eecs.umich.edu srli t4, reg, 3, dataSize=2 2235937Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2245937Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2255937Sgblack@eecs.umich.edu chks reg, t1, LDTCheck 2265937Sgblack@eecs.umich.edu wrdh t3, t1, t2 2278290Sgblack@eecs.umich.edu wrdl tsl, t1, reg 2288290Sgblack@eecs.umich.edu wrbase tsl, t3, dataSize=8 2295937Sgblack@eecs.umich.eduend: 2305937Sgblack@eecs.umich.edu fault "NoFault" 2315937Sgblack@eecs.umich.edu}; 2325937Sgblack@eecs.umich.edu 2335937Sgblack@eecs.umich.edudef macroop LLDT_M 2345937Sgblack@eecs.umich.edu{ 23512584Sgabeblack@google.com .serialize_after 2365937Sgblack@eecs.umich.edu ld t5, seg, sib, disp, dataSize=2 2375937Sgblack@eecs.umich.edu chks t5, t0, InGDTCheck, flags=(EZF,) 2385937Sgblack@eecs.umich.edu br label("end"), flags=(CEZF,) 2396062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 2405937Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 2415937Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2425937Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2435937Sgblack@eecs.umich.edu chks t5, t1, LDTCheck 2445937Sgblack@eecs.umich.edu wrdh t3, t1, t2 2458290Sgblack@eecs.umich.edu wrdl tsl, t1, t5 2468290Sgblack@eecs.umich.edu wrbase tsl, t3, dataSize=8 2475937Sgblack@eecs.umich.eduend: 2485937Sgblack@eecs.umich.edu fault "NoFault" 2495937Sgblack@eecs.umich.edu}; 2505937Sgblack@eecs.umich.edu 2515937Sgblack@eecs.umich.edudef macroop LLDT_P 2525937Sgblack@eecs.umich.edu{ 25312584Sgabeblack@google.com .serialize_after 2545937Sgblack@eecs.umich.edu rdip t7 2555937Sgblack@eecs.umich.edu ld t5, seg, riprel, disp, dataSize=2 2565937Sgblack@eecs.umich.edu chks t5, t0, InGDTCheck, flags=(EZF,) 2575937Sgblack@eecs.umich.edu br label("end"), flags=(CEZF,) 2586062Sgblack@eecs.umich.edu limm t4, 0, dataSize=8 2595937Sgblack@eecs.umich.edu srli t4, t5, 3, dataSize=2 2605937Sgblack@eecs.umich.edu ldst t1, tsg, [8, t4, t0], dataSize=8 2615937Sgblack@eecs.umich.edu ld t2, tsg, [8, t4, t0], 8, dataSize=8 2625937Sgblack@eecs.umich.edu chks t5, t1, LDTCheck 2635937Sgblack@eecs.umich.edu wrdh t3, t1, t2 2648290Sgblack@eecs.umich.edu wrdl tsl, t1, t5 2658290Sgblack@eecs.umich.edu wrbase tsl, t3, dataSize=8 2665937Sgblack@eecs.umich.eduend: 2675937Sgblack@eecs.umich.edu fault "NoFault" 2685937Sgblack@eecs.umich.edu}; 2695937Sgblack@eecs.umich.edu 2705683Sgblack@eecs.umich.edudef macroop SWAPGS 2715683Sgblack@eecs.umich.edu{ 2725683Sgblack@eecs.umich.edu rdval t1, kernel_gs_base, dataSize=8 2735683Sgblack@eecs.umich.edu rdbase t2, gs, dataSize=8 2745683Sgblack@eecs.umich.edu wrbase gs, t1, dataSize=8 2755683Sgblack@eecs.umich.edu wrval kernel_gs_base, t2, dataSize=8 2765683Sgblack@eecs.umich.edu}; 2775291Sgblack@eecs.umich.edu''' 278