operands.isa revision 11514
16019Shines@cs.fsu.edu// -*- mode:c++ -*- 26019Shines@cs.fsu.edu// Copyright (c) 2010-2014 ARM Limited 37178Sgblack@eecs.umich.edu// All rights reserved 47178Sgblack@eecs.umich.edu// 57178Sgblack@eecs.umich.edu// The license below extends only to copyright in the software and shall 67178Sgblack@eecs.umich.edu// not be construed as granting a license to any other intellectual 77178Sgblack@eecs.umich.edu// property including but not limited to intellectual property relating 87178Sgblack@eecs.umich.edu// to a hardware implementation of the functionality of the software 97178Sgblack@eecs.umich.edu// licensed hereunder. You may use the software subject to the license 107178Sgblack@eecs.umich.edu// terms below provided that you ensure that this notice is replicated 117178Sgblack@eecs.umich.edu// unmodified and in its entirety in all distributions of the software, 127178Sgblack@eecs.umich.edu// modified or unmodified, in source code or in binary form. 137178Sgblack@eecs.umich.edu// 147178Sgblack@eecs.umich.edu// Copyright (c) 2007-2008 The Florida State University 156019Shines@cs.fsu.edu// All rights reserved. 166019Shines@cs.fsu.edu// 176019Shines@cs.fsu.edu// Redistribution and use in source and binary forms, with or without 186019Shines@cs.fsu.edu// modification, are permitted provided that the following conditions are 196019Shines@cs.fsu.edu// met: redistributions of source code must retain the above copyright 206019Shines@cs.fsu.edu// notice, this list of conditions and the following disclaimer; 216019Shines@cs.fsu.edu// redistributions in binary form must reproduce the above copyright 226019Shines@cs.fsu.edu// notice, this list of conditions and the following disclaimer in the 236019Shines@cs.fsu.edu// documentation and/or other materials provided with the distribution; 246019Shines@cs.fsu.edu// neither the name of the copyright holders nor the names of its 256019Shines@cs.fsu.edu// contributors may be used to endorse or promote products derived from 266019Shines@cs.fsu.edu// this software without specific prior written permission. 276019Shines@cs.fsu.edu// 286019Shines@cs.fsu.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 296019Shines@cs.fsu.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 306019Shines@cs.fsu.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 316019Shines@cs.fsu.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 326019Shines@cs.fsu.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 336019Shines@cs.fsu.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 346019Shines@cs.fsu.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 356019Shines@cs.fsu.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 366019Shines@cs.fsu.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 376019Shines@cs.fsu.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 386019Shines@cs.fsu.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 396019Shines@cs.fsu.edu// 406019Shines@cs.fsu.edu// Authors: Stephen Hines 416019Shines@cs.fsu.edu 426019Shines@cs.fsu.edudef operand_types {{ 436019Shines@cs.fsu.edu 'sb' : 'int8_t', 446019Shines@cs.fsu.edu 'ub' : 'uint8_t', 456019Shines@cs.fsu.edu 'sh' : 'int16_t', 466019Shines@cs.fsu.edu 'uh' : 'uint16_t', 476019Shines@cs.fsu.edu 'sw' : 'int32_t', 486019Shines@cs.fsu.edu 'uw' : 'uint32_t', 496019Shines@cs.fsu.edu 'ud' : 'uint64_t', 506019Shines@cs.fsu.edu 'tud' : 'Twin64_t', 516019Shines@cs.fsu.edu 'sf' : 'float', 526019Shines@cs.fsu.edu 'df' : 'double' 536019Shines@cs.fsu.edu}}; 546019Shines@cs.fsu.edu 556019Shines@cs.fsu.edulet {{ 566019Shines@cs.fsu.edu maybePCRead = ''' 576019Shines@cs.fsu.edu ((%(reg_idx)s == PCReg) ? readPC(xc) : xc->%(func)s(this, %(op_idx)s)) 586243Sgblack@eecs.umich.edu ''' 596243Sgblack@eecs.umich.edu maybeAlignedPCRead = ''' 606243Sgblack@eecs.umich.edu ((%(reg_idx)s == PCReg) ? (roundDown(readPC(xc), 4)) : 616243Sgblack@eecs.umich.edu xc->%(func)s(this, %(op_idx)s)) 626243Sgblack@eecs.umich.edu ''' 636019Shines@cs.fsu.edu maybePCWrite = ''' 646019Shines@cs.fsu.edu ((%(reg_idx)s == PCReg) ? setNextPC(xc, %(final_val)s) : 656019Shines@cs.fsu.edu xc->%(func)s(this, %(op_idx)s, %(final_val)s)) 666019Shines@cs.fsu.edu ''' 676019Shines@cs.fsu.edu maybeIWPCWrite = ''' 686019Shines@cs.fsu.edu ((%(reg_idx)s == PCReg) ? setIWNextPC(xc, %(final_val)s) : 696019Shines@cs.fsu.edu xc->%(func)s(this, %(op_idx)s, %(final_val)s)) 706019Shines@cs.fsu.edu ''' 716019Shines@cs.fsu.edu maybeAIWPCWrite = ''' 726019Shines@cs.fsu.edu if (%(reg_idx)s == PCReg) { 736019Shines@cs.fsu.edu bool thumb = THUMB; 746019Shines@cs.fsu.edu if (thumb) { 756019Shines@cs.fsu.edu setNextPC(xc, %(final_val)s); 766019Shines@cs.fsu.edu } else { 776019Shines@cs.fsu.edu setIWNextPC(xc, %(final_val)s); 786019Shines@cs.fsu.edu } 796019Shines@cs.fsu.edu } else { 806019Shines@cs.fsu.edu xc->%(func)s(this, %(op_idx)s, %(final_val)s); 816019Shines@cs.fsu.edu } 826019Shines@cs.fsu.edu ''' 836019Shines@cs.fsu.edu aarch64Read = ''' 846019Shines@cs.fsu.edu ((xc->%(func)s(this, %(op_idx)s)) & mask(intWidth)) 856019Shines@cs.fsu.edu ''' 866019Shines@cs.fsu.edu aarch64Write = ''' 876019Shines@cs.fsu.edu xc->%(func)s(this, %(op_idx)s, (%(final_val)s) & mask(intWidth)) 886019Shines@cs.fsu.edu ''' 896019Shines@cs.fsu.edu aarchX64Read = ''' 906019Shines@cs.fsu.edu ((xc->%(func)s(this, %(op_idx)s)) & mask(aarch64 ? 64 : 32)) 916019Shines@cs.fsu.edu ''' 926019Shines@cs.fsu.edu aarchX64Write = ''' 936019Shines@cs.fsu.edu xc->%(func)s(this, %(op_idx)s, (%(final_val)s) & mask(aarch64 ? 64 : 32)) 946252Sgblack@eecs.umich.edu ''' 956243Sgblack@eecs.umich.edu aarchW64Read = ''' 966243Sgblack@eecs.umich.edu ((xc->%(func)s(this, %(op_idx)s)) & mask(32)) 976243Sgblack@eecs.umich.edu ''' 986019Shines@cs.fsu.edu aarchW64Write = ''' 996019Shines@cs.fsu.edu xc->%(func)s(this, %(op_idx)s, (%(final_val)s) & mask(32)) 1006019Shines@cs.fsu.edu ''' 1016019Shines@cs.fsu.edu cntrlNsBankedWrite = ''' 1026019Shines@cs.fsu.edu xc->setMiscReg(flattenMiscRegNsBanked(dest, xc->tcBase()), %(final_val)s) 1036252Sgblack@eecs.umich.edu ''' 1046243Sgblack@eecs.umich.edu 1056243Sgblack@eecs.umich.edu cntrlNsBankedRead = ''' 1066243Sgblack@eecs.umich.edu xc->readMiscReg(flattenMiscRegNsBanked(op1, xc->tcBase())) 1076019Shines@cs.fsu.edu ''' 1086019Shines@cs.fsu.edu 1096019Shines@cs.fsu.edu #PCState operands need to have a sorting index (the number at the end) 1106019Shines@cs.fsu.edu #less than all the integer registers which might update the PC. That way 1116019Shines@cs.fsu.edu #if the flag bits of the pc state are updated and a branch happens through 1126019Shines@cs.fsu.edu #R15, the updates are layered properly and the R15 update isn't lost. 1136019Shines@cs.fsu.edu srtNormal = 5 1146252Sgblack@eecs.umich.edu srtCpsr = 4 1156243Sgblack@eecs.umich.edu srtBase = 3 1166243Sgblack@eecs.umich.edu srtPC = 2 1176243Sgblack@eecs.umich.edu srtMode = 1 1186019Shines@cs.fsu.edu srtEPC = 0 1196019Shines@cs.fsu.edu 1206019Shines@cs.fsu.edu def floatReg(idx): 1216019Shines@cs.fsu.edu return ('FloatReg', 'sf', idx, 'IsFloating', srtNormal) 1226019Shines@cs.fsu.edu 1236019Shines@cs.fsu.edu def intReg(idx): 1246019Shines@cs.fsu.edu return ('IntReg', 'uw', idx, 'IsInteger', srtNormal, 1256019Shines@cs.fsu.edu maybePCRead, maybePCWrite) 1266019Shines@cs.fsu.edu 1276019Shines@cs.fsu.edu def intReg64(idx): 1286019Shines@cs.fsu.edu return ('IntReg', 'ud', idx, 'IsInteger', srtNormal, 1296019Shines@cs.fsu.edu aarch64Read, aarch64Write) 1306019Shines@cs.fsu.edu 1316019Shines@cs.fsu.edu def intRegX64(idx, id = srtNormal): 1326019Shines@cs.fsu.edu return ('IntReg', 'ud', idx, 'IsInteger', id, 1336019Shines@cs.fsu.edu aarchX64Read, aarchX64Write) 1346724Sgblack@eecs.umich.edu 1356724Sgblack@eecs.umich.edu def intRegW64(idx, id = srtNormal): 1366019Shines@cs.fsu.edu return ('IntReg', 'ud', idx, 'IsInteger', id, 1376019Shines@cs.fsu.edu aarchW64Read, aarchW64Write) 1386019Shines@cs.fsu.edu 1396019Shines@cs.fsu.edu def intRegNPC(idx): 1406019Shines@cs.fsu.edu return ('IntReg', 'uw', idx, 'IsInteger', srtNormal) 1416252Sgblack@eecs.umich.edu 1426243Sgblack@eecs.umich.edu def intRegAPC(idx, id = srtNormal): 1436243Sgblack@eecs.umich.edu return ('IntReg', 'uw', idx, 'IsInteger', id, 1446243Sgblack@eecs.umich.edu maybeAlignedPCRead, maybePCWrite) 1456019Shines@cs.fsu.edu 1466019Shines@cs.fsu.edu def intRegIWPC(idx): 1476019Shines@cs.fsu.edu return ('IntReg', 'uw', idx, 'IsInteger', srtNormal, 1486019Shines@cs.fsu.edu maybePCRead, maybeIWPCWrite) 1496019Shines@cs.fsu.edu 1506019Shines@cs.fsu.edu def intRegAIWPC(idx): 1517356Sgblack@eecs.umich.edu return ('IntReg', 'uw', idx, 'IsInteger', srtNormal, 1527356Sgblack@eecs.umich.edu maybePCRead, maybeAIWPCWrite) 1537356Sgblack@eecs.umich.edu 1547356Sgblack@eecs.umich.edu def ccReg(idx): 1557356Sgblack@eecs.umich.edu return ('CCReg', 'uw', idx, None, srtNormal) 1567356Sgblack@eecs.umich.edu 1577356Sgblack@eecs.umich.edu def cntrlReg(idx, id = srtNormal, type = 'uw'): 1587356Sgblack@eecs.umich.edu return ('ControlReg', type, idx, None, id) 1597178Sgblack@eecs.umich.edu 1607178Sgblack@eecs.umich.edu def cntrlNsBankedReg(idx, id = srtNormal, type = 'uw'): 1617178Sgblack@eecs.umich.edu return ('ControlReg', type, idx, (None, None, 'IsControl'), id, cntrlNsBankedRead, cntrlNsBankedWrite) 1627337Sgblack@eecs.umich.edu 1637178Sgblack@eecs.umich.edu def cntrlNsBankedReg64(idx, id = srtNormal, type = 'ud'): 1647178Sgblack@eecs.umich.edu return ('ControlReg', type, idx, (None, None, 'IsControl'), id, cntrlNsBankedRead, cntrlNsBankedWrite) 1657178Sgblack@eecs.umich.edu 1667178Sgblack@eecs.umich.edu def cntrlRegNC(idx, id = srtNormal, type = 'uw'): 1677178Sgblack@eecs.umich.edu return ('ControlReg', type, idx, None, id) 1687178Sgblack@eecs.umich.edu 1697178Sgblack@eecs.umich.edu def pcStateReg(idx, id): 1707178Sgblack@eecs.umich.edu return ('PCState', 'ud', idx, (None, None, 'IsControl'), id) 1717178Sgblack@eecs.umich.edu}}; 1727178Sgblack@eecs.umich.edu 1737178Sgblack@eecs.umich.edudef operands {{ 1747335Sgblack@eecs.umich.edu #Abstracted integer reg operands 1757335Sgblack@eecs.umich.edu 'Dest': intReg('dest'), 1767335Sgblack@eecs.umich.edu 'Dest64': intReg64('dest'), 1777335Sgblack@eecs.umich.edu 'XDest': intRegX64('dest'), 1787335Sgblack@eecs.umich.edu 'WDest': intRegW64('dest'), 1797335Sgblack@eecs.umich.edu 'IWDest': intRegIWPC('dest'), 1807335Sgblack@eecs.umich.edu 'AIWDest': intRegAIWPC('dest'), 1817335Sgblack@eecs.umich.edu 'Dest2': intReg('dest2'), 1827335Sgblack@eecs.umich.edu 'XDest2': intRegX64('dest2'), 1837335Sgblack@eecs.umich.edu 'FDest2': floatReg('dest2'), 1847335Sgblack@eecs.umich.edu 'Result': intReg('result'), 1857335Sgblack@eecs.umich.edu 'XResult': intRegX64('result'), 1867337Sgblack@eecs.umich.edu 'XBase': intRegX64('base', id = srtBase), 1877335Sgblack@eecs.umich.edu 'Base': intRegAPC('base', id = srtBase), 1887335Sgblack@eecs.umich.edu 'XOffset': intRegX64('offset'), 1897335Sgblack@eecs.umich.edu 'Index': intReg('index'), 1907335Sgblack@eecs.umich.edu 'Shift': intReg('shift'), 1917335Sgblack@eecs.umich.edu 'Op1': intReg('op1'), 1927335Sgblack@eecs.umich.edu 'Op2': intReg('op2'), 1937335Sgblack@eecs.umich.edu 'Op3': intReg('op3'), 1947335Sgblack@eecs.umich.edu 'Op164': intReg64('op1'), 1957335Sgblack@eecs.umich.edu 'Op264': intReg64('op2'), 1967335Sgblack@eecs.umich.edu 'Op364': intReg64('op3'), 1977335Sgblack@eecs.umich.edu 'XOp1': intRegX64('op1'), 1987335Sgblack@eecs.umich.edu 'XOp2': intRegX64('op2'), 1997178Sgblack@eecs.umich.edu 'XOp3': intRegX64('op3'), 2007178Sgblack@eecs.umich.edu 'WOp1': intRegW64('op1'), 2017178Sgblack@eecs.umich.edu 'WOp2': intRegW64('op2'), 2027178Sgblack@eecs.umich.edu 'WOp3': intRegW64('op3'), 2037178Sgblack@eecs.umich.edu 'Reg0': intReg('reg0'), 2047178Sgblack@eecs.umich.edu 'Reg1': intReg('reg1'), 2057178Sgblack@eecs.umich.edu 'Reg2': intReg('reg2'), 2067178Sgblack@eecs.umich.edu 'Reg3': intReg('reg3'), 2077178Sgblack@eecs.umich.edu 2087178Sgblack@eecs.umich.edu #Fixed index integer reg operands 2097178Sgblack@eecs.umich.edu 'SpMode': intRegNPC('intRegInMode((OperatingMode)regMode, INTREG_SP)'), 2107178Sgblack@eecs.umich.edu 'DecodedBankedIntReg': intRegNPC('decodeMrsMsrBankedIntRegIndex(byteMask, r)'), 2117178Sgblack@eecs.umich.edu 'LR': intRegNPC('INTREG_LR'), 2127178Sgblack@eecs.umich.edu 'XLR': intRegX64('INTREG_X30'), 2137178Sgblack@eecs.umich.edu 'R7': intRegNPC('7'), 2147178Sgblack@eecs.umich.edu # First four arguments are passed in registers 2157178Sgblack@eecs.umich.edu 'R0': intRegNPC('0'), 2167178Sgblack@eecs.umich.edu 'R1': intRegNPC('1'), 2177178Sgblack@eecs.umich.edu 'R2': intRegNPC('2'), 2187178Sgblack@eecs.umich.edu 'R3': intRegNPC('3'), 2197178Sgblack@eecs.umich.edu 'X0': intRegX64('0'), 2207178Sgblack@eecs.umich.edu 'X1': intRegX64('1'), 2217178Sgblack@eecs.umich.edu 'X2': intRegX64('2'), 2227178Sgblack@eecs.umich.edu 'X3': intRegX64('3'), 2237178Sgblack@eecs.umich.edu 2247178Sgblack@eecs.umich.edu # Condition code registers 2257178Sgblack@eecs.umich.edu 'CondCodesNZ': ccReg('CCREG_NZ'), 2267178Sgblack@eecs.umich.edu 'CondCodesC': ccReg('CCREG_C'), 2277178Sgblack@eecs.umich.edu 'CondCodesV': ccReg('CCREG_V'), 2287346Sgblack@eecs.umich.edu 'CondCodesGE': ccReg('CCREG_GE'), 2297346Sgblack@eecs.umich.edu 'OptCondCodesNZ': ccReg( 2307346Sgblack@eecs.umich.edu '''((condCode == COND_AL || condCode == COND_UC || 2317346Sgblack@eecs.umich.edu condCode == COND_CC || condCode == COND_CS || 2327346Sgblack@eecs.umich.edu condCode == COND_VS || condCode == COND_VC) ? 2337346Sgblack@eecs.umich.edu CCREG_ZERO : CCREG_NZ)'''), 2347346Sgblack@eecs.umich.edu 'OptCondCodesC': ccReg( 2357346Sgblack@eecs.umich.edu '''((condCode == COND_HI || condCode == COND_LS || 2367346Sgblack@eecs.umich.edu condCode == COND_CS || condCode == COND_CC) ? 2377346Sgblack@eecs.umich.edu CCREG_C : CCREG_ZERO)'''), 2387178Sgblack@eecs.umich.edu 'OptShiftRmCondCodesC': ccReg( 2397346Sgblack@eecs.umich.edu '''((condCode == COND_HI || condCode == COND_LS || 2407346Sgblack@eecs.umich.edu condCode == COND_CS || condCode == COND_CC || 2417346Sgblack@eecs.umich.edu shiftType == ROR) ? 2427346Sgblack@eecs.umich.edu CCREG_C : CCREG_ZERO)'''), 2437346Sgblack@eecs.umich.edu 'OptCondCodesV': ccReg( 2447346Sgblack@eecs.umich.edu '''((condCode == COND_VS || condCode == COND_VC || 2457346Sgblack@eecs.umich.edu condCode == COND_GE || condCode == COND_LT || 2467346Sgblack@eecs.umich.edu condCode == COND_GT || condCode == COND_LE) ? 2477346Sgblack@eecs.umich.edu CCREG_V : CCREG_ZERO)'''), 2487346Sgblack@eecs.umich.edu 'FpCondCodes': ccReg('CCREG_FP'), 2497346Sgblack@eecs.umich.edu 2507346Sgblack@eecs.umich.edu #Abstracted floating point reg operands 2517346Sgblack@eecs.umich.edu 'FpDest': floatReg('(dest + 0)'), 2527346Sgblack@eecs.umich.edu 'FpDestP0': floatReg('(dest + 0)'), 2537346Sgblack@eecs.umich.edu 'FpDestP1': floatReg('(dest + 1)'), 2547178Sgblack@eecs.umich.edu 'FpDestP2': floatReg('(dest + 2)'), 2557337Sgblack@eecs.umich.edu 'FpDestP3': floatReg('(dest + 3)'), 2567337Sgblack@eecs.umich.edu 'FpDestP4': floatReg('(dest + 4)'), 2577337Sgblack@eecs.umich.edu 'FpDestP5': floatReg('(dest + 5)'), 2587337Sgblack@eecs.umich.edu 'FpDestP6': floatReg('(dest + 6)'), 2597337Sgblack@eecs.umich.edu 'FpDestP7': floatReg('(dest + 7)'), 2607337Sgblack@eecs.umich.edu 'FpDestS0P0': floatReg('(dest + step * 0 + 0)'), 2617337Sgblack@eecs.umich.edu 'FpDestS0P1': floatReg('(dest + step * 0 + 1)'), 2627337Sgblack@eecs.umich.edu 'FpDestS1P0': floatReg('(dest + step * 1 + 0)'), 2637337Sgblack@eecs.umich.edu 'FpDestS1P1': floatReg('(dest + step * 1 + 1)'), 2647337Sgblack@eecs.umich.edu 'FpDestS2P0': floatReg('(dest + step * 2 + 0)'), 2657337Sgblack@eecs.umich.edu 'FpDestS2P1': floatReg('(dest + step * 2 + 1)'), 2667337Sgblack@eecs.umich.edu 'FpDestS3P0': floatReg('(dest + step * 3 + 0)'), 2677337Sgblack@eecs.umich.edu 'FpDestS3P1': floatReg('(dest + step * 3 + 1)'), 2687337Sgblack@eecs.umich.edu 2697337Sgblack@eecs.umich.edu 'FpDest2': floatReg('(dest2 + 0)'), 2707178Sgblack@eecs.umich.edu 'FpDest2P0': floatReg('(dest2 + 0)'), 2717178Sgblack@eecs.umich.edu 'FpDest2P1': floatReg('(dest2 + 1)'), 2727178Sgblack@eecs.umich.edu 'FpDest2P2': floatReg('(dest2 + 2)'), 2737178Sgblack@eecs.umich.edu 'FpDest2P3': floatReg('(dest2 + 3)'), 2747337Sgblack@eecs.umich.edu 2757337Sgblack@eecs.umich.edu 'FpOp1': floatReg('(op1 + 0)'), 2767337Sgblack@eecs.umich.edu 'FpOp1P0': floatReg('(op1 + 0)'), 2777337Sgblack@eecs.umich.edu 'FpOp1P1': floatReg('(op1 + 1)'), 2787346Sgblack@eecs.umich.edu 'FpOp1P2': floatReg('(op1 + 2)'), 2797346Sgblack@eecs.umich.edu 'FpOp1P3': floatReg('(op1 + 3)'), 2807346Sgblack@eecs.umich.edu 'FpOp1P4': floatReg('(op1 + 4)'), 2817346Sgblack@eecs.umich.edu 'FpOp1P5': floatReg('(op1 + 5)'), 2827346Sgblack@eecs.umich.edu 'FpOp1P6': floatReg('(op1 + 6)'), 2837337Sgblack@eecs.umich.edu 'FpOp1P7': floatReg('(op1 + 7)'), 2847178Sgblack@eecs.umich.edu 'FpOp1S0P0': floatReg('(op1 + step * 0 + 0)'), 2857321Sgblack@eecs.umich.edu 'FpOp1S0P1': floatReg('(op1 + step * 0 + 1)'), 2867356Sgblack@eecs.umich.edu 'FpOp1S1P0': floatReg('(op1 + step * 1 + 0)'), 2877321Sgblack@eecs.umich.edu 'FpOp1S1P1': floatReg('(op1 + step * 1 + 1)'), 2887356Sgblack@eecs.umich.edu 'FpOp1S2P0': floatReg('(op1 + step * 2 + 0)'), 2897356Sgblack@eecs.umich.edu 'FpOp1S2P1': floatReg('(op1 + step * 2 + 1)'), 2907356Sgblack@eecs.umich.edu 'FpOp1S3P0': floatReg('(op1 + step * 3 + 0)'), 2917356Sgblack@eecs.umich.edu 'FpOp1S3P1': floatReg('(op1 + step * 3 + 1)'), 2927356Sgblack@eecs.umich.edu 2937356Sgblack@eecs.umich.edu 'FpOp2': floatReg('(op2 + 0)'), 2947356Sgblack@eecs.umich.edu 'FpOp2P0': floatReg('(op2 + 0)'), 2957356Sgblack@eecs.umich.edu 'FpOp2P1': floatReg('(op2 + 1)'), 2967356Sgblack@eecs.umich.edu 'FpOp2P2': floatReg('(op2 + 2)'), 2977356Sgblack@eecs.umich.edu 'FpOp2P3': floatReg('(op2 + 3)'), 2987356Sgblack@eecs.umich.edu 2997356Sgblack@eecs.umich.edu # Create AArch64 unpacked view of the FP registers 3007321Sgblack@eecs.umich.edu 'AA64FpOp1P0': floatReg('((op1 * 4) + 0)'), 3017321Sgblack@eecs.umich.edu 'AA64FpOp1P1': floatReg('((op1 * 4) + 1)'), 3027321Sgblack@eecs.umich.edu 'AA64FpOp1P2': floatReg('((op1 * 4) + 2)'), 3037321Sgblack@eecs.umich.edu 'AA64FpOp1P3': floatReg('((op1 * 4) + 3)'), 3047321Sgblack@eecs.umich.edu 'AA64FpOp2P0': floatReg('((op2 * 4) + 0)'), 3057321Sgblack@eecs.umich.edu 'AA64FpOp2P1': floatReg('((op2 * 4) + 1)'), 3067321Sgblack@eecs.umich.edu 'AA64FpOp2P2': floatReg('((op2 * 4) + 2)'), 3077321Sgblack@eecs.umich.edu 'AA64FpOp2P3': floatReg('((op2 * 4) + 3)'), 3087321Sgblack@eecs.umich.edu 'AA64FpOp3P0': floatReg('((op3 * 4) + 0)'), 3097321Sgblack@eecs.umich.edu 'AA64FpOp3P1': floatReg('((op3 * 4) + 1)'), 3107321Sgblack@eecs.umich.edu 'AA64FpOp3P2': floatReg('((op3 * 4) + 2)'), 3117335Sgblack@eecs.umich.edu 'AA64FpOp3P3': floatReg('((op3 * 4) + 3)'), 3127335Sgblack@eecs.umich.edu 'AA64FpDestP0': floatReg('((dest * 4) + 0)'), 3137335Sgblack@eecs.umich.edu 'AA64FpDestP1': floatReg('((dest * 4) + 1)'), 3147335Sgblack@eecs.umich.edu 'AA64FpDestP2': floatReg('((dest * 4) + 2)'), 3157335Sgblack@eecs.umich.edu 'AA64FpDestP3': floatReg('((dest * 4) + 3)'), 3167335Sgblack@eecs.umich.edu 'AA64FpDest2P0': floatReg('((dest2 * 4) + 0)'), 3177335Sgblack@eecs.umich.edu 'AA64FpDest2P1': floatReg('((dest2 * 4) + 1)'), 3187335Sgblack@eecs.umich.edu 'AA64FpDest2P2': floatReg('((dest2 * 4) + 2)'), 3197335Sgblack@eecs.umich.edu 'AA64FpDest2P3': floatReg('((dest2 * 4) + 3)'), 3207321Sgblack@eecs.umich.edu 3217323Sgblack@eecs.umich.edu 'AA64FpOp1P0V0': floatReg('((((op1+0)) * 4) + 0)'), 3227323Sgblack@eecs.umich.edu 'AA64FpOp1P1V0': floatReg('((((op1+0)) * 4) + 1)'), 3237323Sgblack@eecs.umich.edu 'AA64FpOp1P2V0': floatReg('((((op1+0)) * 4) + 2)'), 3247323Sgblack@eecs.umich.edu 'AA64FpOp1P3V0': floatReg('((((op1+0)) * 4) + 3)'), 3257323Sgblack@eecs.umich.edu 3267323Sgblack@eecs.umich.edu 'AA64FpOp1P0V1': floatReg('((((op1+1)) * 4) + 0)'), 3277323Sgblack@eecs.umich.edu 'AA64FpOp1P1V1': floatReg('((((op1+1)) * 4) + 1)'), 3287323Sgblack@eecs.umich.edu 'AA64FpOp1P2V1': floatReg('((((op1+1)) * 4) + 2)'), 3297323Sgblack@eecs.umich.edu 'AA64FpOp1P3V1': floatReg('((((op1+1)) * 4) + 3)'), 3307323Sgblack@eecs.umich.edu 3317323Sgblack@eecs.umich.edu 'AA64FpOp1P0V2': floatReg('((((op1+2)) * 4) + 0)'), 3327323Sgblack@eecs.umich.edu 'AA64FpOp1P1V2': floatReg('((((op1+2)) * 4) + 1)'), 3337323Sgblack@eecs.umich.edu 'AA64FpOp1P2V2': floatReg('((((op1+2)) * 4) + 2)'), 3347323Sgblack@eecs.umich.edu 'AA64FpOp1P3V2': floatReg('((((op1+2)) * 4) + 3)'), 3357323Sgblack@eecs.umich.edu 3367323Sgblack@eecs.umich.edu 'AA64FpOp1P0V3': floatReg('((((op1+3)) * 4) + 0)'), 3377323Sgblack@eecs.umich.edu 'AA64FpOp1P1V3': floatReg('((((op1+3)) * 4) + 1)'), 3387321Sgblack@eecs.umich.edu 'AA64FpOp1P2V3': floatReg('((((op1+3)) * 4) + 2)'), 3397321Sgblack@eecs.umich.edu 'AA64FpOp1P3V3': floatReg('((((op1+3)) * 4) + 3)'), 3407321Sgblack@eecs.umich.edu 3417335Sgblack@eecs.umich.edu 'AA64FpOp1P0V0S': floatReg('((((op1+0)%32) * 4) + 0)'), 3427335Sgblack@eecs.umich.edu 'AA64FpOp1P1V0S': floatReg('((((op1+0)%32) * 4) + 1)'), 3437335Sgblack@eecs.umich.edu 'AA64FpOp1P2V0S': floatReg('((((op1+0)%32) * 4) + 2)'), 3447335Sgblack@eecs.umich.edu 'AA64FpOp1P3V0S': floatReg('((((op1+0)%32) * 4) + 3)'), 3457335Sgblack@eecs.umich.edu 3467335Sgblack@eecs.umich.edu 'AA64FpOp1P0V1S': floatReg('((((op1+1)%32) * 4) + 0)'), 3477335Sgblack@eecs.umich.edu 'AA64FpOp1P1V1S': floatReg('((((op1+1)%32) * 4) + 1)'), 3487335Sgblack@eecs.umich.edu 'AA64FpOp1P2V1S': floatReg('((((op1+1)%32) * 4) + 2)'), 3497335Sgblack@eecs.umich.edu 'AA64FpOp1P3V1S': floatReg('((((op1+1)%32) * 4) + 3)'), 3507335Sgblack@eecs.umich.edu 3517335Sgblack@eecs.umich.edu 'AA64FpOp1P0V2S': floatReg('((((op1+2)%32) * 4) + 0)'), 3527335Sgblack@eecs.umich.edu 'AA64FpOp1P1V2S': floatReg('((((op1+2)%32) * 4) + 1)'), 3537335Sgblack@eecs.umich.edu 'AA64FpOp1P2V2S': floatReg('((((op1+2)%32) * 4) + 2)'), 3547335Sgblack@eecs.umich.edu 'AA64FpOp1P3V2S': floatReg('((((op1+2)%32) * 4) + 3)'), 3557335Sgblack@eecs.umich.edu 3567335Sgblack@eecs.umich.edu 'AA64FpOp1P0V3S': floatReg('((((op1+3)%32) * 4) + 0)'), 3577335Sgblack@eecs.umich.edu 'AA64FpOp1P1V3S': floatReg('((((op1+3)%32) * 4) + 1)'), 3587335Sgblack@eecs.umich.edu 'AA64FpOp1P2V3S': floatReg('((((op1+3)%32) * 4) + 2)'), 3597335Sgblack@eecs.umich.edu 'AA64FpOp1P3V3S': floatReg('((((op1+3)%32) * 4) + 3)'), 3607335Sgblack@eecs.umich.edu 3617335Sgblack@eecs.umich.edu 'AA64FpDestP0V0': floatReg('((((dest+0)) * 4) + 0)'), 3627335Sgblack@eecs.umich.edu 'AA64FpDestP1V0': floatReg('((((dest+0)) * 4) + 1)'), 3637335Sgblack@eecs.umich.edu 'AA64FpDestP2V0': floatReg('((((dest+0)) * 4) + 2)'), 3647335Sgblack@eecs.umich.edu 'AA64FpDestP3V0': floatReg('((((dest+0)) * 4) + 3)'), 3657335Sgblack@eecs.umich.edu 3667335Sgblack@eecs.umich.edu 'AA64FpDestP0V1': floatReg('((((dest+1)) * 4) + 0)'), 3677335Sgblack@eecs.umich.edu 'AA64FpDestP1V1': floatReg('((((dest+1)) * 4) + 1)'), 3687335Sgblack@eecs.umich.edu 'AA64FpDestP2V1': floatReg('((((dest+1)) * 4) + 2)'), 3697335Sgblack@eecs.umich.edu 'AA64FpDestP3V1': floatReg('((((dest+1)) * 4) + 3)'), 3707335Sgblack@eecs.umich.edu 3717335Sgblack@eecs.umich.edu 'AA64FpDestP0V0L': floatReg('((((dest+0)%32) * 4) + 0)'), 3727335Sgblack@eecs.umich.edu 'AA64FpDestP1V0L': floatReg('((((dest+0)%32) * 4) + 1)'), 3737335Sgblack@eecs.umich.edu 'AA64FpDestP2V0L': floatReg('((((dest+0)%32) * 4) + 2)'), 3747321Sgblack@eecs.umich.edu 'AA64FpDestP3V0L': floatReg('((((dest+0)%32) * 4) + 3)'), 3757321Sgblack@eecs.umich.edu 3767321Sgblack@eecs.umich.edu 'AA64FpDestP0V1L': floatReg('((((dest+1)%32) * 4) + 0)'), 3777321Sgblack@eecs.umich.edu 'AA64FpDestP1V1L': floatReg('((((dest+1)%32) * 4) + 1)'), 3787321Sgblack@eecs.umich.edu 'AA64FpDestP2V1L': floatReg('((((dest+1)%32) * 4) + 2)'), 3797321Sgblack@eecs.umich.edu 'AA64FpDestP3V1L': floatReg('((((dest+1)%32) * 4) + 3)'), 3807335Sgblack@eecs.umich.edu 3817335Sgblack@eecs.umich.edu #Abstracted control reg operands 3827335Sgblack@eecs.umich.edu 'MiscDest': cntrlReg('dest'), 3837335Sgblack@eecs.umich.edu 'MiscOp1': cntrlReg('op1'), 3847335Sgblack@eecs.umich.edu 'MiscNsBankedDest': cntrlNsBankedReg('dest'), 3857335Sgblack@eecs.umich.edu 'MiscNsBankedOp1': cntrlNsBankedReg('op1'), 3867335Sgblack@eecs.umich.edu 'MiscNsBankedDest64': cntrlNsBankedReg64('dest'), 3877335Sgblack@eecs.umich.edu 'MiscNsBankedOp164': cntrlNsBankedReg64('op1'), 3887335Sgblack@eecs.umich.edu 3897321Sgblack@eecs.umich.edu #Fixed index control regs 3907326Sgblack@eecs.umich.edu 'Cpsr': cntrlReg('MISCREG_CPSR', srtCpsr), 3917326Sgblack@eecs.umich.edu 'CpsrQ': cntrlReg('MISCREG_CPSR_Q', srtCpsr), 3927326Sgblack@eecs.umich.edu 'Spsr': cntrlRegNC('MISCREG_SPSR'), 3937326Sgblack@eecs.umich.edu 'Fpsr': cntrlRegNC('MISCREG_FPSR'), 3947326Sgblack@eecs.umich.edu 'Fpsid': cntrlRegNC('MISCREG_FPSID'), 3957326Sgblack@eecs.umich.edu 'Fpscr': cntrlRegNC('MISCREG_FPSCR'), 3967326Sgblack@eecs.umich.edu 'FpscrQc': cntrlRegNC('MISCREG_FPSCR_QC'), 3977326Sgblack@eecs.umich.edu 'FpscrExc': cntrlRegNC('MISCREG_FPSCR_EXC'), 3987326Sgblack@eecs.umich.edu 'Cpacr': cntrlReg('MISCREG_CPACR'), 3997326Sgblack@eecs.umich.edu 'Cpacr64': cntrlReg('MISCREG_CPACR_EL1'), 4007326Sgblack@eecs.umich.edu 'Fpexc': cntrlRegNC('MISCREG_FPEXC'), 4017326Sgblack@eecs.umich.edu 'Nsacr': cntrlReg('MISCREG_NSACR'), 4027326Sgblack@eecs.umich.edu 'ElrHyp': cntrlRegNC('MISCREG_ELR_HYP'), 4037326Sgblack@eecs.umich.edu 'Hcr': cntrlReg('MISCREG_HCR'), 4047326Sgblack@eecs.umich.edu 'Hcr64': cntrlReg('MISCREG_HCR_EL2'), 4057326Sgblack@eecs.umich.edu 'Hdcr': cntrlReg('MISCREG_HDCR'), 4067326Sgblack@eecs.umich.edu 'Hcptr': cntrlReg('MISCREG_HCPTR'), 4077326Sgblack@eecs.umich.edu 'CptrEl264': cntrlReg('MISCREG_CPTR_EL2'), 4087326Sgblack@eecs.umich.edu 'CptrEl364': cntrlReg('MISCREG_CPTR_EL3'), 4097326Sgblack@eecs.umich.edu 'Hstr': cntrlReg('MISCREG_HSTR'), 4107326Sgblack@eecs.umich.edu 'Scr': cntrlReg('MISCREG_SCR'), 4117326Sgblack@eecs.umich.edu 'Scr64': cntrlReg('MISCREG_SCR_EL3'), 4127326Sgblack@eecs.umich.edu 'Sctlr': cntrlRegNC('MISCREG_SCTLR'), 4137321Sgblack@eecs.umich.edu 'SevMailbox': cntrlRegNC('MISCREG_SEV_MAILBOX'), 4147321Sgblack@eecs.umich.edu 'LLSCLock': cntrlRegNC('MISCREG_LOCKFLAG'), 4157335Sgblack@eecs.umich.edu 'Dczid' : cntrlRegNC('MISCREG_DCZID_EL0'), 4167335Sgblack@eecs.umich.edu 4177335Sgblack@eecs.umich.edu #Register fields for microops 4187335Sgblack@eecs.umich.edu 'URa' : intReg('ura'), 4197335Sgblack@eecs.umich.edu 'XURa' : intRegX64('ura'), 4207335Sgblack@eecs.umich.edu 'WURa' : intRegW64('ura'), 4217335Sgblack@eecs.umich.edu 'IWRa' : intRegIWPC('ura'), 4227335Sgblack@eecs.umich.edu 'Fa' : floatReg('ura'), 4237335Sgblack@eecs.umich.edu 'FaP1' : floatReg('ura + 1'), 4247335Sgblack@eecs.umich.edu 'URb' : intReg('urb'), 4257335Sgblack@eecs.umich.edu 'XURb' : intRegX64('urb'), 4267335Sgblack@eecs.umich.edu 'URc' : intReg('urc'), 4277335Sgblack@eecs.umich.edu 'XURc' : intRegX64('urc'), 4287335Sgblack@eecs.umich.edu 4297335Sgblack@eecs.umich.edu #Memory Operand 4307335Sgblack@eecs.umich.edu 'Mem': ('Mem', 'uw', None, ('IsMemRef', 'IsLoad', 'IsStore'), srtNormal), 4317335Sgblack@eecs.umich.edu 4327335Sgblack@eecs.umich.edu #PCState fields 4337335Sgblack@eecs.umich.edu 'RawPC': pcStateReg('pc', srtPC), 4347335Sgblack@eecs.umich.edu 'PC': pcStateReg('instPC', srtPC), 4357335Sgblack@eecs.umich.edu 'NPC': pcStateReg('instNPC', srtPC), 4367335Sgblack@eecs.umich.edu 'pNPC': pcStateReg('instNPC', srtEPC), 4377335Sgblack@eecs.umich.edu 'IWNPC': pcStateReg('instIWNPC', srtPC), 4387335Sgblack@eecs.umich.edu 'Thumb': pcStateReg('thumb', srtPC), 4397335Sgblack@eecs.umich.edu 'NextThumb': pcStateReg('nextThumb', srtMode), 4407335Sgblack@eecs.umich.edu 'NextJazelle': pcStateReg('nextJazelle', srtMode), 4417335Sgblack@eecs.umich.edu 'NextItState': pcStateReg('nextItstate', srtMode), 4427335Sgblack@eecs.umich.edu 'Itstate': pcStateReg('itstate', srtMode), 4437335Sgblack@eecs.umich.edu 'NextAArch64': pcStateReg('nextAArch64', srtMode), 4447335Sgblack@eecs.umich.edu 4457335Sgblack@eecs.umich.edu #Register operands depending on a field in the instruction encoding. These 4467335Sgblack@eecs.umich.edu #should be avoided since they may not be portable across different 4477335Sgblack@eecs.umich.edu #encodings of the same instruction. 4487335Sgblack@eecs.umich.edu 'Rd': intReg('RD'), 4497335Sgblack@eecs.umich.edu 'Rm': intReg('RM'), 4507335Sgblack@eecs.umich.edu 'Rs': intReg('RS'), 4517335Sgblack@eecs.umich.edu 'Rn': intReg('RN'), 4527335Sgblack@eecs.umich.edu 'Rt': intReg('RT') 4537335Sgblack@eecs.umich.edu}}; 4547335Sgblack@eecs.umich.edu