operands.isa revision 5789:46c548dbe620
14484Sbinkertn@umich.edu// Copyright (c) 2007 The Regents of The University of Michigan 24484Sbinkertn@umich.edu// All rights reserved. 34484Sbinkertn@umich.edu// 44484Sbinkertn@umich.edu// Redistribution and use in source and binary forms, with or without 54484Sbinkertn@umich.edu// modification, are permitted provided that the following conditions are 64484Sbinkertn@umich.edu// met: redistributions of source code must retain the above copyright 74484Sbinkertn@umich.edu// notice, this list of conditions and the following disclaimer; 84484Sbinkertn@umich.edu// redistributions in binary form must reproduce the above copyright 94484Sbinkertn@umich.edu// notice, this list of conditions and the following disclaimer in the 104484Sbinkertn@umich.edu// documentation and/or other materials provided with the distribution; 114484Sbinkertn@umich.edu// neither the name of the copyright holders nor the names of its 124484Sbinkertn@umich.edu// contributors may be used to endorse or promote products derived from 134484Sbinkertn@umich.edu// this software without specific prior written permission. 144484Sbinkertn@umich.edu// 154484Sbinkertn@umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 164484Sbinkertn@umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 174484Sbinkertn@umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 184484Sbinkertn@umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 194484Sbinkertn@umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 204484Sbinkertn@umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 214484Sbinkertn@umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 224484Sbinkertn@umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 234484Sbinkertn@umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 244484Sbinkertn@umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 254484Sbinkertn@umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 264484Sbinkertn@umich.edu// 274484Sbinkertn@umich.edu// Authors: Gabe Black 284484Sbinkertn@umich.edu 294484Sbinkertn@umich.edu// Copyright (c) 2007-2008 The Hewlett-Packard Development Company 304484Sbinkertn@umich.edu// All rights reserved. 314484Sbinkertn@umich.edu// 324484Sbinkertn@umich.edu// Redistribution and use of this software in source and binary forms, 334484Sbinkertn@umich.edu// with or without modification, are permitted provided that the 344484Sbinkertn@umich.edu// following conditions are met: 354484Sbinkertn@umich.edu// 364484Sbinkertn@umich.edu// The software must be used only for Non-Commercial Use which means any 374484Sbinkertn@umich.edu// use which is NOT directed to receiving any direct monetary 384484Sbinkertn@umich.edu// compensation for, or commercial advantage from such use. Illustrative 394484Sbinkertn@umich.edu// examples of non-commercial use are academic research, personal study, 404484Sbinkertn@umich.edu// teaching, education and corporate research & development. 414484Sbinkertn@umich.edu// Illustrative examples of commercial use are distributing products for 424484Sbinkertn@umich.edu// commercial advantage and providing services using the software for 434484Sbinkertn@umich.edu// commercial advantage. 444484Sbinkertn@umich.edu// 454484Sbinkertn@umich.edu// If you wish to use this software or functionality therein that may be 464484Sbinkertn@umich.edu// covered by patents for commercial use, please contact: 474484Sbinkertn@umich.edu// Director of Intellectual Property Licensing 484484Sbinkertn@umich.edu// Office of Strategy and Technology 494484Sbinkertn@umich.edu// Hewlett-Packard Company 504484Sbinkertn@umich.edu// 1501 Page Mill Road 514484Sbinkertn@umich.edu// Palo Alto, California 94304 524484Sbinkertn@umich.edu// 534484Sbinkertn@umich.edu// Redistributions of source code must retain the above copyright notice, 544484Sbinkertn@umich.edu// this list of conditions and the following disclaimer. Redistributions 554484Sbinkertn@umich.edu// in binary form must reproduce the above copyright notice, this list of 564484Sbinkertn@umich.edu// conditions and the following disclaimer in the documentation and/or 574484Sbinkertn@umich.edu// other materials provided with the distribution. Neither the name of 584484Sbinkertn@umich.edu// the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 594484Sbinkertn@umich.edu// contributors may be used to endorse or promote products derived from 604484Sbinkertn@umich.edu// this software without specific prior written permission. No right of 614484Sbinkertn@umich.edu// sublicense is granted herewith. Derivatives of the software and 624484Sbinkertn@umich.edu// output created using the software may be prepared, but only for 634484Sbinkertn@umich.edu// Non-Commercial Uses. Derivatives of the software may be shared with 644484Sbinkertn@umich.edu// others provided: (i) the others agree to abide by the list of 654484Sbinkertn@umich.edu// conditions herein which includes the Non-Commercial Use restrictions; 664484Sbinkertn@umich.edu// and (ii) such Derivatives of the software include the above copyright 674484Sbinkertn@umich.edu// notice to acknowledge the contribution from this software where 684484Sbinkertn@umich.edu// applicable, this list of conditions and the disclaimer below. 694484Sbinkertn@umich.edu// 704484Sbinkertn@umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 714484Sbinkertn@umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 724484Sbinkertn@umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 734484Sbinkertn@umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 744484Sbinkertn@umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 754484Sbinkertn@umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 764484Sbinkertn@umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 774484Sbinkertn@umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 784484Sbinkertn@umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 794484Sbinkertn@umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 804484Sbinkertn@umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 814484Sbinkertn@umich.edu// 824484Sbinkertn@umich.edu// Authors: Gabe Black 834484Sbinkertn@umich.edu 844484Sbinkertn@umich.edudef operand_types {{ 854484Sbinkertn@umich.edu 'sb' : ('signed int', 8), 864484Sbinkertn@umich.edu 'ub' : ('unsigned int', 8), 874484Sbinkertn@umich.edu 'sw' : ('signed int', 16), 884484Sbinkertn@umich.edu 'uw' : ('unsigned int', 16), 894484Sbinkertn@umich.edu 'sdw' : ('signed int', 32), 904484Sbinkertn@umich.edu 'udw' : ('unsigned int', 32), 914484Sbinkertn@umich.edu 'sqw' : ('signed int', 64), 924484Sbinkertn@umich.edu 'uqw' : ('unsigned int', 64), 934484Sbinkertn@umich.edu 'sf' : ('float', 32), 944484Sbinkertn@umich.edu 'df' : ('float', 64), 954484Sbinkertn@umich.edu}}; 964484Sbinkertn@umich.edu 97def operands {{ 98 'SrcReg1': ('IntReg', 'uqw', 'INTREG_FOLDED(src1, foldOBit)', 'IsInteger', 1), 99 'SSrcReg1': ('IntReg', 'uqw', 'src1', 'IsInteger', 1), 100 'SrcReg2': ('IntReg', 'uqw', 'INTREG_FOLDED(src2, foldOBit)', 'IsInteger', 2), 101 'SSrcReg2': ('IntReg', 'uqw', 'src2', 'IsInteger', 1), 102 'Index': ('IntReg', 'uqw', 'INTREG_FOLDED(index, foldABit)', 'IsInteger', 3), 103 'Base': ('IntReg', 'uqw', 'INTREG_FOLDED(base, foldABit)', 'IsInteger', 4), 104 'DestReg': ('IntReg', 'uqw', 'INTREG_FOLDED(dest, foldOBit)', 'IsInteger', 5), 105 'SDestReg': ('IntReg', 'uqw', 'dest', 'IsInteger', 5), 106 'Data': ('IntReg', 'uqw', 'INTREG_FOLDED(data, foldOBit)', 'IsInteger', 6), 107 'ProdLow': ('IntReg', 'uqw', 'INTREG_IMPLICIT(0)', 'IsInteger', 7), 108 'ProdHi': ('IntReg', 'uqw', 'INTREG_IMPLICIT(1)', 'IsInteger', 8), 109 'Quotient': ('IntReg', 'uqw', 'INTREG_IMPLICIT(2)', 'IsInteger', 9), 110 'Remainder': ('IntReg', 'uqw', 'INTREG_IMPLICIT(3)', 'IsInteger', 10), 111 'Divisor': ('IntReg', 'uqw', 'INTREG_IMPLICIT(4)', 'IsInteger', 11), 112 'Rax': ('IntReg', 'uqw', '(INTREG_RAX)', 'IsInteger', 12), 113 'Rbx': ('IntReg', 'uqw', '(INTREG_RBX)', 'IsInteger', 13), 114 'Rcx': ('IntReg', 'uqw', '(INTREG_RCX)', 'IsInteger', 14), 115 'Rdx': ('IntReg', 'uqw', '(INTREG_RDX)', 'IsInteger', 15), 116 'Rsp': ('IntReg', 'uqw', '(INTREG_RSP)', 'IsInteger', 16), 117 'Rbp': ('IntReg', 'uqw', '(INTREG_RBP)', 'IsInteger', 17), 118 'Rsi': ('IntReg', 'uqw', '(INTREG_RSI)', 'IsInteger', 18), 119 'Rdi': ('IntReg', 'uqw', '(INTREG_RDI)', 'IsInteger', 19), 120 'FpSrcReg1': ('FloatReg', 'df', 'src1', 'IsFloating', 20), 121 'FpSrcReg2': ('FloatReg', 'df', 'src2', 'IsFloating', 21), 122 'FpDestReg': ('FloatReg', 'df', 'dest', 'IsFloating', 22), 123 'FpData': ('FloatReg', 'df', 'data', 'IsFloating', 23), 124 'RIP': ('NPC', 'uqw', None, (None, None, 'IsControl'), 50), 125 'uIP': ('UPC', 'uqw', None, (None, None, 'IsControl'), 51), 126 'nuIP': ('NUPC', 'uqw', None, (None, None, 'IsControl'), 52), 127 # This holds the condition code portion of the flag register. The 128 # nccFlagBits version holds the rest. 129 'ccFlagBits': ('IntReg', 'uqw', 'INTREG_PSEUDO(0)', None, 60), 130 # These register should needs to be more protected so that later 131 # instructions don't map their indexes with an old value. 132 'nccFlagBits': ('ControlReg', 'uqw', 'MISCREG_RFLAGS', None, 61), 133 'TOP': ('ControlReg', 'ub', 'MISCREG_X87_TOP', None, 62), 134 # The segment base as used by memory instructions. 135 'SegBase': ('ControlReg', 'uqw', 'MISCREG_SEG_EFF_BASE(segment)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 70), 136 137 # Operands to get and set registers indexed by the operands of the 138 # original instruction. 139 'ControlDest': ('ControlReg', 'uqw', 'MISCREG_CR(dest)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 100), 140 'ControlSrc1': ('ControlReg', 'uqw', 'MISCREG_CR(src1)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 101), 141 'SegBaseDest': ('ControlReg', 'uqw', 'MISCREG_SEG_BASE(dest)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 102), 142 'SegBaseSrc1': ('ControlReg', 'uqw', 'MISCREG_SEG_BASE(src1)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 103), 143 'SegLimitDest': ('ControlReg', 'uqw', 'MISCREG_SEG_LIMIT(dest)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 104), 144 'SegLimitSrc1': ('ControlReg', 'uqw', 'MISCREG_SEG_LIMIT(src1)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 105), 145 'SegSelDest': ('ControlReg', 'uqw', 'MISCREG_SEG_SEL(dest)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 106), 146 'SegSelSrc1': ('ControlReg', 'uqw', 'MISCREG_SEG_SEL(src1)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 107), 147 'SegAttrDest': ('ControlReg', 'uqw', 'MISCREG_SEG_ATTR(dest)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 108), 148 'SegAttrSrc1': ('ControlReg', 'uqw', 'MISCREG_SEG_ATTR(src1)', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 109), 149 150 # Operands to access specific control registers directly. 151 'EferOp': ('ControlReg', 'uqw', 'MISCREG_EFER', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 200), 152 'CR4Op': ('ControlReg', 'uqw', 'MISCREG_CR4', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 201), 153 'LDTRBase': ('ControlReg', 'uqw', 'MISCREG_TSL_BASE', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 202), 154 'LDTRLimit': ('ControlReg', 'uqw', 'MISCREG_TSL_LIMIT', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 203), 155 'LDTRSel': ('ControlReg', 'uqw', 'MISCREG_TSL', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 204), 156 'GDTRBase': ('ControlReg', 'uqw', 'MISCREG_TSG_BASE', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 205), 157 'GDTRLimit': ('ControlReg', 'uqw', 'MISCREG_TSG_LIMIT', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 206), 158 'CSBase': ('ControlReg', 'udw', 'MISCREG_CS_EFF_BASE', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 207), 159 'CSAttr': ('ControlReg', 'udw', 'MISCREG_CS_ATTR', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 208), 160 'MiscRegDest': ('ControlReg', 'uqw', 'dest', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 209), 161 'MiscRegSrc1': ('ControlReg', 'uqw', 'src1', (None, None, ['IsSerializeAfter','IsSerializing','IsNonSpeculative']), 210), 162 'TscOp': ('ControlReg', 'udw', 'MISCREG_TSC', (None, None, ['IsSerializeAfter', 'IsSerializing', 'IsNonSpeculative']), 211), 163 'M5Reg': ('ControlReg', 'udw', 'MISCREG_M5_REG', (None, None, None), 212), 164 'Mem': ('Mem', 'uqw', None, ('IsMemRef', 'IsLoad', 'IsStore'), 300) 165}}; 166