data.isa revision 7183
17139Sgblack@eecs.umich.edu// Copyright (c) 2010 ARM Limited 27139Sgblack@eecs.umich.edu// All rights reserved 37139Sgblack@eecs.umich.edu// 47139Sgblack@eecs.umich.edu// The license below extends only to copyright in the software and shall 57139Sgblack@eecs.umich.edu// not be construed as granting a license to any other intellectual 67139Sgblack@eecs.umich.edu// property including but not limited to intellectual property relating 77139Sgblack@eecs.umich.edu// to a hardware implementation of the functionality of the software 87139Sgblack@eecs.umich.edu// licensed hereunder. You may use the software subject to the license 97139Sgblack@eecs.umich.edu// terms below provided that you ensure that this notice is replicated 107139Sgblack@eecs.umich.edu// unmodified and in its entirety in all distributions of the software, 117139Sgblack@eecs.umich.edu// modified or unmodified, in source code or in binary form. 127139Sgblack@eecs.umich.edu// 137139Sgblack@eecs.umich.edu// Redistribution and use in source and binary forms, with or without 147139Sgblack@eecs.umich.edu// modification, are permitted provided that the following conditions are 157139Sgblack@eecs.umich.edu// met: redistributions of source code must retain the above copyright 167139Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer; 177139Sgblack@eecs.umich.edu// redistributions in binary form must reproduce the above copyright 187139Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer in the 197139Sgblack@eecs.umich.edu// documentation and/or other materials provided with the distribution; 207139Sgblack@eecs.umich.edu// neither the name of the copyright holders nor the names of its 217139Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from 227139Sgblack@eecs.umich.edu// this software without specific prior written permission. 237139Sgblack@eecs.umich.edu// 247139Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 257139Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 267139Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 277139Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 287139Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 297139Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 307139Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 317139Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 327139Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 337139Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 347139Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 357139Sgblack@eecs.umich.edu// 367139Sgblack@eecs.umich.edu// Authors: Gabe Black 377139Sgblack@eecs.umich.edu 387139Sgblack@eecs.umich.edudef format ArmDataProcReg() {{ 397139Sgblack@eecs.umich.edu instDecode = ''' 407139Sgblack@eecs.umich.edu case %(opcode)#x: 417139Sgblack@eecs.umich.edu if (immShift) { 427139Sgblack@eecs.umich.edu if (setCc) { 437146Sgblack@eecs.umich.edu return new %(className)sRegCc(machInst, %(dest)s, %(op1)s, 447141Sgblack@eecs.umich.edu rm, imm5, type); 457139Sgblack@eecs.umich.edu } else { 467146Sgblack@eecs.umich.edu return new %(className)sReg(machInst, %(dest)s, %(op1)s, 477141Sgblack@eecs.umich.edu rm, imm5, type); 487139Sgblack@eecs.umich.edu } 497139Sgblack@eecs.umich.edu } else { 507139Sgblack@eecs.umich.edu if (setCc) { 517146Sgblack@eecs.umich.edu return new %(className)sRegRegCc(machInst, %(dest)s, 527141Sgblack@eecs.umich.edu %(op1)s, rm, rs, type); 537139Sgblack@eecs.umich.edu } else { 547146Sgblack@eecs.umich.edu return new %(className)sRegReg(machInst, %(dest)s, 557141Sgblack@eecs.umich.edu %(op1)s, rm, rs, type); 567139Sgblack@eecs.umich.edu } 577139Sgblack@eecs.umich.edu } 587139Sgblack@eecs.umich.edu break; 597139Sgblack@eecs.umich.edu ''' 607139Sgblack@eecs.umich.edu 617141Sgblack@eecs.umich.edu def instCode(opcode, mnem, dest="rd", op1="rn"): 627139Sgblack@eecs.umich.edu global instDecode 637139Sgblack@eecs.umich.edu return instDecode % { "className": mnem.capitalize(), 647141Sgblack@eecs.umich.edu "opcode": opcode, 657141Sgblack@eecs.umich.edu "dest": dest, 667141Sgblack@eecs.umich.edu "op1": op1 } 677139Sgblack@eecs.umich.edu 687139Sgblack@eecs.umich.edu decode_block = ''' 697139Sgblack@eecs.umich.edu { 707139Sgblack@eecs.umich.edu const bool immShift = (bits(machInst, 4) == 0); 717139Sgblack@eecs.umich.edu const bool setCc = (bits(machInst, 20) == 1); 727139Sgblack@eecs.umich.edu const uint32_t imm5 = bits(machInst, 11, 7); 737139Sgblack@eecs.umich.edu const ArmShiftType type = (ArmShiftType)(uint32_t)bits(machInst, 6, 5); 747139Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)RD; 757139Sgblack@eecs.umich.edu const IntRegIndex rn = (IntRegIndex)(uint32_t)RN; 767139Sgblack@eecs.umich.edu const IntRegIndex rm = (IntRegIndex)(uint32_t)RM; 777139Sgblack@eecs.umich.edu const IntRegIndex rs = (IntRegIndex)(uint32_t)RS; 787139Sgblack@eecs.umich.edu switch (OPCODE) { 797139Sgblack@eecs.umich.edu ''' 807139Sgblack@eecs.umich.edu decode_block += instCode(0x0, "and") 817139Sgblack@eecs.umich.edu decode_block += instCode(0x1, "eor") 827139Sgblack@eecs.umich.edu decode_block += instCode(0x2, "sub") 837139Sgblack@eecs.umich.edu decode_block += instCode(0x3, "rsb") 847139Sgblack@eecs.umich.edu decode_block += instCode(0x4, "add") 857139Sgblack@eecs.umich.edu decode_block += instCode(0x5, "adc") 867139Sgblack@eecs.umich.edu decode_block += instCode(0x6, "sbc") 877139Sgblack@eecs.umich.edu decode_block += instCode(0x7, "rsc") 887141Sgblack@eecs.umich.edu decode_block += instCode(0x8, "tst", dest="INTREG_ZERO") 897141Sgblack@eecs.umich.edu decode_block += instCode(0x9, "teq", dest="INTREG_ZERO") 907141Sgblack@eecs.umich.edu decode_block += instCode(0xa, "cmp", dest="INTREG_ZERO") 917141Sgblack@eecs.umich.edu decode_block += instCode(0xb, "cmn", dest="INTREG_ZERO") 927139Sgblack@eecs.umich.edu decode_block += instCode(0xc, "orr") 937141Sgblack@eecs.umich.edu decode_block += instCode(0xd, "mov", op1="INTREG_ZERO") 947139Sgblack@eecs.umich.edu decode_block += instCode(0xe, "bic") 957141Sgblack@eecs.umich.edu decode_block += instCode(0xf, "mvn", op1="INTREG_ZERO") 967139Sgblack@eecs.umich.edu decode_block += ''' 977139Sgblack@eecs.umich.edu default: 987139Sgblack@eecs.umich.edu return new Unknown(machInst); 997139Sgblack@eecs.umich.edu } 1007139Sgblack@eecs.umich.edu } 1017139Sgblack@eecs.umich.edu ''' 1027139Sgblack@eecs.umich.edu}}; 1037139Sgblack@eecs.umich.edu 1047139Sgblack@eecs.umich.edudef format ArmDataProcImm() {{ 1057139Sgblack@eecs.umich.edu instDecode = ''' 1067139Sgblack@eecs.umich.edu case %(opcode)#x: 1077139Sgblack@eecs.umich.edu if (setCc) { 1087146Sgblack@eecs.umich.edu return new %(className)sImmCc(machInst, %(dest)s, %(op1)s, 1097141Sgblack@eecs.umich.edu imm, rotC); 1107139Sgblack@eecs.umich.edu } else { 1117146Sgblack@eecs.umich.edu return new %(className)sImm(machInst, %(dest)s, %(op1)s, 1127141Sgblack@eecs.umich.edu imm, rotC); 1137139Sgblack@eecs.umich.edu } 1147139Sgblack@eecs.umich.edu break; 1157139Sgblack@eecs.umich.edu ''' 1167139Sgblack@eecs.umich.edu 1177141Sgblack@eecs.umich.edu def instCode(opcode, mnem, dest="rd", op1="rn"): 1187139Sgblack@eecs.umich.edu global instDecode 1197139Sgblack@eecs.umich.edu return instDecode % { "className": mnem.capitalize(), 1207141Sgblack@eecs.umich.edu "opcode": opcode, 1217141Sgblack@eecs.umich.edu "dest": dest, 1227141Sgblack@eecs.umich.edu "op1": op1 } 1237139Sgblack@eecs.umich.edu 1247139Sgblack@eecs.umich.edu decode_block = ''' 1257139Sgblack@eecs.umich.edu { 1267139Sgblack@eecs.umich.edu const bool setCc = (bits(machInst, 20) == 1); 1277139Sgblack@eecs.umich.edu const uint32_t unrotated = bits(machInst, 7, 0); 1287139Sgblack@eecs.umich.edu const uint32_t rotation = (bits(machInst, 11, 8) << 1); 1297139Sgblack@eecs.umich.edu const bool rotC = (rotation != 0); 1307139Sgblack@eecs.umich.edu const uint32_t imm = rotate_imm(unrotated, rotation); 1317139Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)RD; 1327139Sgblack@eecs.umich.edu const IntRegIndex rn = (IntRegIndex)(uint32_t)RN; 1337139Sgblack@eecs.umich.edu switch (OPCODE) { 1347139Sgblack@eecs.umich.edu ''' 1357139Sgblack@eecs.umich.edu decode_block += instCode(0x0, "and") 1367139Sgblack@eecs.umich.edu decode_block += instCode(0x1, "eor") 1377139Sgblack@eecs.umich.edu decode_block += instCode(0x2, "sub") 1387139Sgblack@eecs.umich.edu decode_block += instCode(0x3, "rsb") 1397139Sgblack@eecs.umich.edu decode_block += instCode(0x4, "add") 1407139Sgblack@eecs.umich.edu decode_block += instCode(0x5, "adc") 1417139Sgblack@eecs.umich.edu decode_block += instCode(0x6, "sbc") 1427139Sgblack@eecs.umich.edu decode_block += instCode(0x7, "rsc") 1437141Sgblack@eecs.umich.edu decode_block += instCode(0x8, "tst", dest="INTREG_ZERO") 1447141Sgblack@eecs.umich.edu decode_block += instCode(0x9, "teq", dest="INTREG_ZERO") 1457141Sgblack@eecs.umich.edu decode_block += instCode(0xa, "cmp", dest="INTREG_ZERO") 1467141Sgblack@eecs.umich.edu decode_block += instCode(0xb, "cmn", dest="INTREG_ZERO") 1477139Sgblack@eecs.umich.edu decode_block += instCode(0xc, "orr") 1487141Sgblack@eecs.umich.edu decode_block += instCode(0xd, "mov", op1="INTREG_ZERO") 1497139Sgblack@eecs.umich.edu decode_block += instCode(0xe, "bic") 1507141Sgblack@eecs.umich.edu decode_block += instCode(0xf, "mvn", op1="INTREG_ZERO") 1517139Sgblack@eecs.umich.edu decode_block += ''' 1527139Sgblack@eecs.umich.edu default: 1537139Sgblack@eecs.umich.edu return new Unknown(machInst); 1547139Sgblack@eecs.umich.edu } 1557139Sgblack@eecs.umich.edu } 1567139Sgblack@eecs.umich.edu ''' 1577139Sgblack@eecs.umich.edu}}; 1587141Sgblack@eecs.umich.edu 1597141Sgblack@eecs.umich.edudef format Thumb16ShiftAddSubMoveCmp() {{ 1607141Sgblack@eecs.umich.edu decode_block = ''' 1617141Sgblack@eecs.umich.edu { 1627141Sgblack@eecs.umich.edu const uint32_t imm5 = bits(machInst, 10, 6); 1637141Sgblack@eecs.umich.edu const uint32_t imm3 = bits(machInst, 8, 6); 1647141Sgblack@eecs.umich.edu const uint32_t imm8 = bits(machInst, 7, 0); 1657141Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 2, 0); 1667141Sgblack@eecs.umich.edu const IntRegIndex rd8 = (IntRegIndex)(uint32_t)bits(machInst, 10, 8); 1677141Sgblack@eecs.umich.edu const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 5, 3); 1687141Sgblack@eecs.umich.edu const IntRegIndex rm = (IntRegIndex)(uint32_t)bits(machInst, 8, 6); 1697141Sgblack@eecs.umich.edu switch (bits(machInst, 13, 11)) { 1707141Sgblack@eecs.umich.edu case 0x0: // lsl 1717183Sgblack@eecs.umich.edu return new MovRegCc(machInst, rd, INTREG_ZERO, rn, imm5, LSL); 1727141Sgblack@eecs.umich.edu case 0x1: // lsr 1737183Sgblack@eecs.umich.edu return new MovRegCc(machInst, rd, INTREG_ZERO, rn, imm5, LSR); 1747141Sgblack@eecs.umich.edu case 0x2: // asr 1757183Sgblack@eecs.umich.edu return new MovRegCc(machInst, rd, INTREG_ZERO, rn, imm5, ASR); 1767141Sgblack@eecs.umich.edu case 0x3: 1777141Sgblack@eecs.umich.edu switch (bits(machInst, 10, 9)) { 1787141Sgblack@eecs.umich.edu case 0x0: 1797183Sgblack@eecs.umich.edu return new AddRegCc(machInst, rd, rn, rm, 0, LSL); 1807141Sgblack@eecs.umich.edu case 0x1: 1817183Sgblack@eecs.umich.edu return new SubRegCc(machInst, rd, rn, rm, 0, LSL); 1827141Sgblack@eecs.umich.edu case 0x2: 1837183Sgblack@eecs.umich.edu return new AddImmCc(machInst, rd, rn, imm3, true); 1847141Sgblack@eecs.umich.edu case 0x3: 1857183Sgblack@eecs.umich.edu return new SubImmCc(machInst, rd, rn, imm3, true); 1867141Sgblack@eecs.umich.edu } 1877141Sgblack@eecs.umich.edu case 0x4: 1887183Sgblack@eecs.umich.edu return new MovImmCc(machInst, rd8, INTREG_ZERO, imm8, false); 1897141Sgblack@eecs.umich.edu case 0x5: 1907146Sgblack@eecs.umich.edu return new CmpImmCc(machInst, INTREG_ZERO, rd8, imm8, true); 1917141Sgblack@eecs.umich.edu case 0x6: 1927183Sgblack@eecs.umich.edu return new AddImmCc(machInst, rd8, rd8, imm8, true); 1937141Sgblack@eecs.umich.edu case 0x7: 1947183Sgblack@eecs.umich.edu return new SubImmCc(machInst, rd8, rd8, imm8, true); 1957141Sgblack@eecs.umich.edu } 1967141Sgblack@eecs.umich.edu } 1977141Sgblack@eecs.umich.edu ''' 1987141Sgblack@eecs.umich.edu}}; 1997141Sgblack@eecs.umich.edu 2007141Sgblack@eecs.umich.edudef format Thumb16DataProcessing() {{ 2017141Sgblack@eecs.umich.edu decode_block = ''' 2027141Sgblack@eecs.umich.edu { 2037141Sgblack@eecs.umich.edu const IntRegIndex rdn = (IntRegIndex)(uint32_t)bits(machInst, 2, 0); 2047141Sgblack@eecs.umich.edu const IntRegIndex rm = (IntRegIndex)(uint32_t)bits(machInst, 5, 3); 2057141Sgblack@eecs.umich.edu switch (bits(machInst, 9, 6)) { 2067141Sgblack@eecs.umich.edu case 0x0: 2077183Sgblack@eecs.umich.edu return new AndRegCc(machInst, rdn, rdn, rm, 0, LSL); 2087141Sgblack@eecs.umich.edu case 0x1: 2097183Sgblack@eecs.umich.edu return new EorRegCc(machInst, rdn, rdn, rm, 0, LSL); 2107141Sgblack@eecs.umich.edu case 0x2: //lsl 2117183Sgblack@eecs.umich.edu return new MovRegRegCc(machInst, rdn, INTREG_ZERO, rdn, rm, LSL); 2127141Sgblack@eecs.umich.edu case 0x3: //lsr 2137183Sgblack@eecs.umich.edu return new MovRegRegCc(machInst, rdn, INTREG_ZERO, rdn, rm, LSR); 2147141Sgblack@eecs.umich.edu case 0x4: //asr 2157183Sgblack@eecs.umich.edu return new MovRegRegCc(machInst, rdn, INTREG_ZERO, rdn, rm, ASR); 2167141Sgblack@eecs.umich.edu case 0x5: 2177183Sgblack@eecs.umich.edu return new AdcRegCc(machInst, rdn, rdn, rm, 0, LSL); 2187141Sgblack@eecs.umich.edu case 0x6: 2197183Sgblack@eecs.umich.edu return new SbcRegCc(machInst, rdn, rdn, rm, 0, LSL); 2207141Sgblack@eecs.umich.edu case 0x7: // ror 2217183Sgblack@eecs.umich.edu return new MovRegRegCc(machInst, rdn, INTREG_ZERO, rdn, rm, ROR); 2227141Sgblack@eecs.umich.edu case 0x8: 2237183Sgblack@eecs.umich.edu return new TstRegCc(machInst, INTREG_ZERO, rdn, rm, 0, LSL); 2247141Sgblack@eecs.umich.edu case 0x9: 2257183Sgblack@eecs.umich.edu return new RsbImmCc(machInst, rdn, rm, 0, true); 2267141Sgblack@eecs.umich.edu case 0xa: 2277183Sgblack@eecs.umich.edu return new CmpRegCc(machInst, INTREG_ZERO, rdn, rm, 0, LSL); 2287141Sgblack@eecs.umich.edu case 0xb: 2297183Sgblack@eecs.umich.edu return new CmnRegCc(machInst, INTREG_ZERO, rdn, rm, 0, LSL); 2307141Sgblack@eecs.umich.edu case 0xc: 2317183Sgblack@eecs.umich.edu return new OrrRegCc(machInst, rdn, rdn, rm, 0, LSL); 2327141Sgblack@eecs.umich.edu case 0xd: 2337183Sgblack@eecs.umich.edu return new MulCc(machInst, rdn, rm, rdn); 2347141Sgblack@eecs.umich.edu case 0xe: 2357183Sgblack@eecs.umich.edu return new BicRegCc(machInst, rdn, rdn, rm, 0, LSL); 2367141Sgblack@eecs.umich.edu case 0xf: 2377183Sgblack@eecs.umich.edu return new MvnRegCc(machInst, rdn, INTREG_ZERO, rm, 0, LSL); 2387141Sgblack@eecs.umich.edu } 2397141Sgblack@eecs.umich.edu } 2407141Sgblack@eecs.umich.edu ''' 2417141Sgblack@eecs.umich.edu}}; 2427141Sgblack@eecs.umich.edu 2437141Sgblack@eecs.umich.edudef format Thumb16SpecDataAndBx() {{ 2447141Sgblack@eecs.umich.edu decode_block = ''' 2457141Sgblack@eecs.umich.edu { 2467141Sgblack@eecs.umich.edu const IntRegIndex rdn = 2477141Sgblack@eecs.umich.edu (IntRegIndex)(uint32_t)(bits(machInst, 2, 0) | 2487141Sgblack@eecs.umich.edu (bits(machInst, 7) << 3)); 2497141Sgblack@eecs.umich.edu const IntRegIndex rm = (IntRegIndex)(uint32_t)bits(machInst, 6, 3); 2507141Sgblack@eecs.umich.edu switch (bits(machInst, 9, 8)) { 2517141Sgblack@eecs.umich.edu case 0x0: 2527146Sgblack@eecs.umich.edu return new AddReg(machInst, rdn, rdn, rm, 0, LSL); 2537141Sgblack@eecs.umich.edu case 0x1: 2547183Sgblack@eecs.umich.edu return new CmpRegCc(machInst, INTREG_ZERO, rdn, rm, 0, LSL); 2557141Sgblack@eecs.umich.edu case 0x2: 2567146Sgblack@eecs.umich.edu return new MovReg(machInst, rdn, INTREG_ZERO, rm, 0, LSL); 2577141Sgblack@eecs.umich.edu case 0x3: 2587154Sgblack@eecs.umich.edu if (bits(machInst, 7) == 0) { 2597154Sgblack@eecs.umich.edu return new BxReg(machInst, 2607154Sgblack@eecs.umich.edu (IntRegIndex)(uint32_t)bits(machInst, 6, 3), 2617154Sgblack@eecs.umich.edu COND_UC); 2627154Sgblack@eecs.umich.edu } else { 2637154Sgblack@eecs.umich.edu return new BlxReg(machInst, 2647154Sgblack@eecs.umich.edu (IntRegIndex)(uint32_t)bits(machInst, 6, 3), 2657154Sgblack@eecs.umich.edu COND_UC); 2667154Sgblack@eecs.umich.edu } 2677141Sgblack@eecs.umich.edu } 2687141Sgblack@eecs.umich.edu } 2697141Sgblack@eecs.umich.edu ''' 2707141Sgblack@eecs.umich.edu}}; 2717141Sgblack@eecs.umich.edu 2727141Sgblack@eecs.umich.edudef format Thumb16Adr() {{ 2737141Sgblack@eecs.umich.edu decode_block = ''' 2747141Sgblack@eecs.umich.edu { 2757141Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 10, 8); 2767141Sgblack@eecs.umich.edu const uint32_t imm8 = bits(machInst, 7, 0) << 2; 2777146Sgblack@eecs.umich.edu return new AddImm(machInst, rd, INTREG_PC, imm8, true); 2787141Sgblack@eecs.umich.edu } 2797141Sgblack@eecs.umich.edu ''' 2807141Sgblack@eecs.umich.edu}}; 2817141Sgblack@eecs.umich.edu 2827141Sgblack@eecs.umich.edudef format Thumb16AddSp() {{ 2837141Sgblack@eecs.umich.edu decode_block = ''' 2847141Sgblack@eecs.umich.edu { 2857141Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 10, 8); 2867141Sgblack@eecs.umich.edu const uint32_t imm8 = bits(machInst, 7, 0) << 2; 2877146Sgblack@eecs.umich.edu return new AddImm(machInst, rd, INTREG_SP, imm8, true); 2887141Sgblack@eecs.umich.edu } 2897141Sgblack@eecs.umich.edu ''' 2907141Sgblack@eecs.umich.edu}}; 2917141Sgblack@eecs.umich.edu 2927141Sgblack@eecs.umich.edudef format Thumb16Misc() {{ 2937141Sgblack@eecs.umich.edu decode_block = ''' 2947141Sgblack@eecs.umich.edu { 2957141Sgblack@eecs.umich.edu switch (bits(machInst, 11, 8)) { 2967141Sgblack@eecs.umich.edu case 0x0: 2977141Sgblack@eecs.umich.edu if (bits(machInst, 7)) { 2987146Sgblack@eecs.umich.edu return new SubImm(machInst, INTREG_SP, INTREG_SP, 2997141Sgblack@eecs.umich.edu bits(machInst, 6, 0) << 2, true); 3007141Sgblack@eecs.umich.edu } else { 3017146Sgblack@eecs.umich.edu return new AddImm(machInst, INTREG_SP, INTREG_SP, 3027141Sgblack@eecs.umich.edu bits(machInst, 6, 0) << 2, true); 3037141Sgblack@eecs.umich.edu } 3047141Sgblack@eecs.umich.edu case 0x1: 3057154Sgblack@eecs.umich.edu return new Cbz(machInst, 3067154Sgblack@eecs.umich.edu (bits(machInst, 9) << 6) | 3077154Sgblack@eecs.umich.edu (bits(machInst, 7, 3) << 1), 3087154Sgblack@eecs.umich.edu (IntRegIndex)(uint32_t)bits(machInst, 2, 0)); 3097141Sgblack@eecs.umich.edu case 0x2: 3107141Sgblack@eecs.umich.edu switch (bits(machInst, 7, 6)) { 3117141Sgblack@eecs.umich.edu case 0x0: 3127141Sgblack@eecs.umich.edu return new WarnUnimplemented("sxth", machInst); 3137141Sgblack@eecs.umich.edu case 0x1: 3147141Sgblack@eecs.umich.edu return new WarnUnimplemented("sxtb", machInst); 3157141Sgblack@eecs.umich.edu case 0x2: 3167141Sgblack@eecs.umich.edu return new WarnUnimplemented("uxth", machInst); 3177141Sgblack@eecs.umich.edu case 0x3: 3187141Sgblack@eecs.umich.edu return new WarnUnimplemented("uxtb", machInst); 3197141Sgblack@eecs.umich.edu } 3207141Sgblack@eecs.umich.edu case 0x3: 3217154Sgblack@eecs.umich.edu return new Cbz(machInst, 3227154Sgblack@eecs.umich.edu (bits(machInst, 9) << 6) | 3237154Sgblack@eecs.umich.edu (bits(machInst, 7, 3) << 1), 3247154Sgblack@eecs.umich.edu (IntRegIndex)(uint32_t)bits(machInst, 2, 0)); 3257141Sgblack@eecs.umich.edu case 0x4: 3267141Sgblack@eecs.umich.edu case 0x5: 3277141Sgblack@eecs.umich.edu return new WarnUnimplemented("push", machInst); 3287141Sgblack@eecs.umich.edu case 0x6: 3297141Sgblack@eecs.umich.edu { 3307141Sgblack@eecs.umich.edu const uint32_t opBits = bits(machInst, 7, 5); 3317141Sgblack@eecs.umich.edu if (opBits == 2) { 3327141Sgblack@eecs.umich.edu return new WarnUnimplemented("setend", machInst); 3337141Sgblack@eecs.umich.edu } else if (opBits == 3) { 3347141Sgblack@eecs.umich.edu return new WarnUnimplemented("cps", machInst); 3357141Sgblack@eecs.umich.edu } 3367141Sgblack@eecs.umich.edu } 3377141Sgblack@eecs.umich.edu case 0x9: 3387154Sgblack@eecs.umich.edu return new Cbnz(machInst, 3397154Sgblack@eecs.umich.edu (bits(machInst, 9) << 6) | 3407154Sgblack@eecs.umich.edu (bits(machInst, 7, 3) << 1), 3417154Sgblack@eecs.umich.edu (IntRegIndex)(uint32_t)bits(machInst, 2, 0)); 3427141Sgblack@eecs.umich.edu case 0xa: 3437141Sgblack@eecs.umich.edu switch (bits(machInst, 7, 5)) { 3447141Sgblack@eecs.umich.edu case 0x0: 3457141Sgblack@eecs.umich.edu return new WarnUnimplemented("rev", machInst); 3467141Sgblack@eecs.umich.edu case 0x1: 3477141Sgblack@eecs.umich.edu return new WarnUnimplemented("rev16", machInst); 3487141Sgblack@eecs.umich.edu case 0x3: 3497141Sgblack@eecs.umich.edu return new WarnUnimplemented("revsh", machInst); 3507141Sgblack@eecs.umich.edu default: 3517141Sgblack@eecs.umich.edu break; 3527141Sgblack@eecs.umich.edu } 3537141Sgblack@eecs.umich.edu break; 3547141Sgblack@eecs.umich.edu case 0xb: 3557154Sgblack@eecs.umich.edu return new Cbnz(machInst, 3567154Sgblack@eecs.umich.edu (bits(machInst, 9) << 6) | 3577154Sgblack@eecs.umich.edu (bits(machInst, 7, 3) << 1), 3587154Sgblack@eecs.umich.edu (IntRegIndex)(uint32_t)bits(machInst, 2, 0)); 3597141Sgblack@eecs.umich.edu case 0xc: 3607141Sgblack@eecs.umich.edu case 0xd: 3617141Sgblack@eecs.umich.edu return new WarnUnimplemented("pop", machInst); 3627141Sgblack@eecs.umich.edu case 0xe: 3637141Sgblack@eecs.umich.edu return new WarnUnimplemented("bkpt", machInst); 3647141Sgblack@eecs.umich.edu case 0xf: 3657141Sgblack@eecs.umich.edu if (bits(machInst, 3, 0) != 0) 3667141Sgblack@eecs.umich.edu return new WarnUnimplemented("it", machInst); 3677141Sgblack@eecs.umich.edu switch (bits(machInst, 7, 4)) { 3687141Sgblack@eecs.umich.edu case 0x0: 3697141Sgblack@eecs.umich.edu return new WarnUnimplemented("nop", machInst); 3707141Sgblack@eecs.umich.edu case 0x1: 3717141Sgblack@eecs.umich.edu return new WarnUnimplemented("yield", machInst); 3727141Sgblack@eecs.umich.edu case 0x2: 3737141Sgblack@eecs.umich.edu return new WarnUnimplemented("wfe", machInst); 3747141Sgblack@eecs.umich.edu case 0x3: 3757141Sgblack@eecs.umich.edu return new WarnUnimplemented("wfi", machInst); 3767141Sgblack@eecs.umich.edu case 0x4: 3777141Sgblack@eecs.umich.edu return new WarnUnimplemented("sev", machInst); 3787141Sgblack@eecs.umich.edu default: 3797141Sgblack@eecs.umich.edu return new WarnUnimplemented("unallocated_hint", machInst); 3807141Sgblack@eecs.umich.edu } 3817141Sgblack@eecs.umich.edu default: 3827141Sgblack@eecs.umich.edu break; 3837141Sgblack@eecs.umich.edu } 3847141Sgblack@eecs.umich.edu return new Unknown(machInst); 3857141Sgblack@eecs.umich.edu } 3867141Sgblack@eecs.umich.edu ''' 3877141Sgblack@eecs.umich.edu}}; 3887141Sgblack@eecs.umich.edu 3897141Sgblack@eecs.umich.edudef format Thumb32DataProcModImm() {{ 3907141Sgblack@eecs.umich.edu 3917141Sgblack@eecs.umich.edu def decInst(mnem, dest="rd", op1="rn"): 3927141Sgblack@eecs.umich.edu return ''' 3937141Sgblack@eecs.umich.edu if (s) { 3947146Sgblack@eecs.umich.edu return new %(mnem)sImmCc(machInst, %(dest)s, 3957183Sgblack@eecs.umich.edu %(op1)s, imm, rotC); 3967141Sgblack@eecs.umich.edu } else { 3977146Sgblack@eecs.umich.edu return new %(mnem)sImm(machInst, %(dest)s, 3987183Sgblack@eecs.umich.edu %(op1)s, imm, rotC); 3997141Sgblack@eecs.umich.edu } 4007141Sgblack@eecs.umich.edu ''' % {"mnem" : mnem, "dest" : dest, "op1" : op1} 4017141Sgblack@eecs.umich.edu 4027141Sgblack@eecs.umich.edu decode_block = ''' 4037141Sgblack@eecs.umich.edu { 4047141Sgblack@eecs.umich.edu const uint32_t op = bits(machInst, 24, 21); 4057141Sgblack@eecs.umich.edu const bool s = (bits(machInst, 20) == 1); 4067141Sgblack@eecs.umich.edu const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 19, 16); 4077141Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 11, 8); 4087141Sgblack@eecs.umich.edu const uint32_t ctrlImm = bits(machInst.instBits, 26) << 3 | 4097141Sgblack@eecs.umich.edu bits(machInst, 14, 12); 4107183Sgblack@eecs.umich.edu const bool rotC = ctrlImm > 3; 4117141Sgblack@eecs.umich.edu const uint32_t dataImm = bits(machInst, 7, 0); 4127141Sgblack@eecs.umich.edu const uint32_t imm = modified_imm(ctrlImm, dataImm); 4137141Sgblack@eecs.umich.edu switch (op) { 4147141Sgblack@eecs.umich.edu case 0x0: 4157141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 4167141Sgblack@eecs.umich.edu %(tst)s 4177141Sgblack@eecs.umich.edu } else { 4187141Sgblack@eecs.umich.edu %(and)s 4197141Sgblack@eecs.umich.edu } 4207141Sgblack@eecs.umich.edu case 0x1: 4217141Sgblack@eecs.umich.edu %(bic)s 4227141Sgblack@eecs.umich.edu case 0x2: 4237141Sgblack@eecs.umich.edu if (rn == INTREG_PC) { 4247141Sgblack@eecs.umich.edu %(mov)s 4257141Sgblack@eecs.umich.edu } else { 4267141Sgblack@eecs.umich.edu %(orr)s 4277141Sgblack@eecs.umich.edu } 4287141Sgblack@eecs.umich.edu case 0x3: 4297141Sgblack@eecs.umich.edu if (rn == INTREG_PC) { 4307141Sgblack@eecs.umich.edu %(mvn)s 4317141Sgblack@eecs.umich.edu } else { 4327141Sgblack@eecs.umich.edu %(orn)s 4337141Sgblack@eecs.umich.edu } 4347141Sgblack@eecs.umich.edu case 0x4: 4357141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 4367141Sgblack@eecs.umich.edu %(teq)s 4377141Sgblack@eecs.umich.edu } else { 4387141Sgblack@eecs.umich.edu %(eor)s 4397141Sgblack@eecs.umich.edu } 4407141Sgblack@eecs.umich.edu case 0x8: 4417141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 4427141Sgblack@eecs.umich.edu %(cmn)s 4437141Sgblack@eecs.umich.edu } else { 4447141Sgblack@eecs.umich.edu %(add)s 4457141Sgblack@eecs.umich.edu } 4467141Sgblack@eecs.umich.edu case 0xa: 4477141Sgblack@eecs.umich.edu %(adc)s 4487141Sgblack@eecs.umich.edu case 0xb: 4497141Sgblack@eecs.umich.edu %(sbc)s 4507141Sgblack@eecs.umich.edu case 0xd: 4517141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 4527141Sgblack@eecs.umich.edu %(cmp)s 4537141Sgblack@eecs.umich.edu } else { 4547141Sgblack@eecs.umich.edu %(sub)s 4557141Sgblack@eecs.umich.edu } 4567141Sgblack@eecs.umich.edu case 0xe: 4577141Sgblack@eecs.umich.edu %(rsb)s 4587141Sgblack@eecs.umich.edu default: 4597141Sgblack@eecs.umich.edu return new Unknown(machInst); 4607141Sgblack@eecs.umich.edu } 4617141Sgblack@eecs.umich.edu } 4627141Sgblack@eecs.umich.edu ''' % { 4637141Sgblack@eecs.umich.edu "tst" : decInst("Tst", "INTREG_ZERO"), 4647141Sgblack@eecs.umich.edu "and" : decInst("And"), 4657141Sgblack@eecs.umich.edu "bic" : decInst("Bic"), 4667141Sgblack@eecs.umich.edu "mov" : decInst("Mov", op1="INTREG_ZERO"), 4677141Sgblack@eecs.umich.edu "orr" : decInst("Orr"), 4687141Sgblack@eecs.umich.edu "mvn" : decInst("Mvn", op1="INTREG_ZERO"), 4697141Sgblack@eecs.umich.edu "orn" : decInst("Orn"), 4707141Sgblack@eecs.umich.edu "teq" : decInst("Teq", dest="INTREG_ZERO"), 4717141Sgblack@eecs.umich.edu "eor" : decInst("Eor"), 4727141Sgblack@eecs.umich.edu "cmn" : decInst("Cmn", dest="INTREG_ZERO"), 4737141Sgblack@eecs.umich.edu "add" : decInst("Add"), 4747141Sgblack@eecs.umich.edu "adc" : decInst("Adc"), 4757141Sgblack@eecs.umich.edu "sbc" : decInst("Sbc"), 4767141Sgblack@eecs.umich.edu "cmp" : decInst("Cmp", dest="INTREG_ZERO"), 4777141Sgblack@eecs.umich.edu "sub" : decInst("Sub"), 4787141Sgblack@eecs.umich.edu "rsb" : decInst("Rsb") 4797141Sgblack@eecs.umich.edu } 4807141Sgblack@eecs.umich.edu}}; 4817141Sgblack@eecs.umich.edu 4827157Sgblack@eecs.umich.edudef format Thumb32DataProcPlainBin() {{ 4837157Sgblack@eecs.umich.edu decode_block = ''' 4847157Sgblack@eecs.umich.edu { 4857157Sgblack@eecs.umich.edu const uint32_t op = bits(machInst, 24, 20); 4867157Sgblack@eecs.umich.edu const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 19, 16); 4877157Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 11, 8); 4887157Sgblack@eecs.umich.edu switch (op) { 4897157Sgblack@eecs.umich.edu case 0x0: 4907157Sgblack@eecs.umich.edu { 4917157Sgblack@eecs.umich.edu const uint32_t imm = bits(machInst, 7, 0) | 4927157Sgblack@eecs.umich.edu (bits(machInst, 14, 12) << 8) | 4937157Sgblack@eecs.umich.edu (bits(machInst, 26) << 11); 4947157Sgblack@eecs.umich.edu return new AddImm(machInst, rd, rn, imm, true); 4957157Sgblack@eecs.umich.edu } 4967157Sgblack@eecs.umich.edu case 0x4: 4977157Sgblack@eecs.umich.edu { 4987157Sgblack@eecs.umich.edu const uint32_t imm = bits(machInst, 7, 0) | 4997157Sgblack@eecs.umich.edu (bits(machInst, 14, 12) << 8) | 5007157Sgblack@eecs.umich.edu (bits(machInst, 26) << 11) | 5017157Sgblack@eecs.umich.edu (bits(machInst, 19, 16) << 12); 5027157Sgblack@eecs.umich.edu return new MovImm(machInst, rd, INTREG_ZERO, imm, true); 5037157Sgblack@eecs.umich.edu } 5047157Sgblack@eecs.umich.edu case 0xa: 5057157Sgblack@eecs.umich.edu { 5067157Sgblack@eecs.umich.edu const uint32_t imm = bits(machInst, 7, 0) | 5077157Sgblack@eecs.umich.edu (bits(machInst, 14, 12) << 8) | 5087157Sgblack@eecs.umich.edu (bits(machInst, 26) << 11); 5097157Sgblack@eecs.umich.edu return new SubImm(machInst, rd, rn, imm, true); 5107157Sgblack@eecs.umich.edu } 5117157Sgblack@eecs.umich.edu case 0xc: 5127157Sgblack@eecs.umich.edu { 5137157Sgblack@eecs.umich.edu const uint32_t imm = bits(machInst, 7, 0) | 5147157Sgblack@eecs.umich.edu (bits(machInst, 14, 12) << 8) | 5157157Sgblack@eecs.umich.edu (bits(machInst, 26) << 11) | 5167157Sgblack@eecs.umich.edu (bits(machInst, 19, 16) << 12); 5177157Sgblack@eecs.umich.edu return new MovtImm(machInst, rd, rd, imm, true); 5187157Sgblack@eecs.umich.edu } 5197157Sgblack@eecs.umich.edu case 0x12: 5207157Sgblack@eecs.umich.edu if (!(bits(machInst, 14, 12) || bits(machInst, 7, 6))) { 5217157Sgblack@eecs.umich.edu return new WarnUnimplemented("ssat16", machInst); 5227157Sgblack@eecs.umich.edu } 5237157Sgblack@eecs.umich.edu // Fall through on purpose... 5247157Sgblack@eecs.umich.edu case 0x10: 5257157Sgblack@eecs.umich.edu return new WarnUnimplemented("ssat", machInst); 5267157Sgblack@eecs.umich.edu case 0x14: 5277157Sgblack@eecs.umich.edu return new WarnUnimplemented("sbfx", machInst); 5287157Sgblack@eecs.umich.edu case 0x16: 5297157Sgblack@eecs.umich.edu if (rn == 0xf) { 5307157Sgblack@eecs.umich.edu return new WarnUnimplemented("bfc", machInst); 5317157Sgblack@eecs.umich.edu } else { 5327157Sgblack@eecs.umich.edu return new WarnUnimplemented("bfi", machInst); 5337157Sgblack@eecs.umich.edu } 5347157Sgblack@eecs.umich.edu case 0x1a: 5357157Sgblack@eecs.umich.edu if (!(bits(machInst, 14, 12) || bits(machInst, 7, 6))) { 5367157Sgblack@eecs.umich.edu return new WarnUnimplemented("usat16", machInst); 5377157Sgblack@eecs.umich.edu } 5387157Sgblack@eecs.umich.edu // Fall through on purpose... 5397157Sgblack@eecs.umich.edu case 0x18: 5407157Sgblack@eecs.umich.edu return new WarnUnimplemented("usat", machInst); 5417157Sgblack@eecs.umich.edu case 0x1c: 5427157Sgblack@eecs.umich.edu return new WarnUnimplemented("ubfx", machInst); 5437157Sgblack@eecs.umich.edu default: 5447157Sgblack@eecs.umich.edu return new Unknown(machInst); 5457157Sgblack@eecs.umich.edu } 5467157Sgblack@eecs.umich.edu } 5477157Sgblack@eecs.umich.edu ''' 5487157Sgblack@eecs.umich.edu}}; 5497157Sgblack@eecs.umich.edu 5507141Sgblack@eecs.umich.edudef format Thumb32DataProcShiftReg() {{ 5517141Sgblack@eecs.umich.edu 5527141Sgblack@eecs.umich.edu def decInst(mnem, dest="rd", op1="rn"): 5537141Sgblack@eecs.umich.edu return ''' 5547141Sgblack@eecs.umich.edu if (s) { 5557146Sgblack@eecs.umich.edu return new %(mnem)sRegCc(machInst, %(dest)s, 5567141Sgblack@eecs.umich.edu %(op1)s, rm, amt, type); 5577141Sgblack@eecs.umich.edu } else { 5587146Sgblack@eecs.umich.edu return new %(mnem)sReg(machInst, %(dest)s, 5597141Sgblack@eecs.umich.edu %(op1)s, rm, amt, type); 5607141Sgblack@eecs.umich.edu } 5617141Sgblack@eecs.umich.edu ''' % {"mnem" : mnem, "dest" : dest, "op1" : op1} 5627141Sgblack@eecs.umich.edu 5637141Sgblack@eecs.umich.edu decode_block = ''' 5647141Sgblack@eecs.umich.edu { 5657141Sgblack@eecs.umich.edu const uint32_t op = bits(machInst, 24, 21); 5667141Sgblack@eecs.umich.edu const bool s = (bits(machInst, 20) == 1); 5677141Sgblack@eecs.umich.edu const IntRegIndex rn = (IntRegIndex)(uint32_t)bits(machInst, 19, 16); 5687141Sgblack@eecs.umich.edu const IntRegIndex rd = (IntRegIndex)(uint32_t)bits(machInst, 11, 8); 5697141Sgblack@eecs.umich.edu const IntRegIndex rm = (IntRegIndex)(uint32_t)bits(machInst, 3, 0); 5707141Sgblack@eecs.umich.edu const uint32_t amt = (bits(machInst, 14, 12) << 2) | 5717141Sgblack@eecs.umich.edu bits(machInst, 7, 6); 5727141Sgblack@eecs.umich.edu const ArmShiftType type = (ArmShiftType)(uint32_t)bits(machInst, 5, 4); 5737141Sgblack@eecs.umich.edu switch (op) { 5747141Sgblack@eecs.umich.edu case 0x0: 5757141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 5767141Sgblack@eecs.umich.edu %(tst)s 5777141Sgblack@eecs.umich.edu } else { 5787141Sgblack@eecs.umich.edu %(and)s 5797141Sgblack@eecs.umich.edu } 5807141Sgblack@eecs.umich.edu case 0x1: 5817141Sgblack@eecs.umich.edu %(bic)s 5827141Sgblack@eecs.umich.edu case 0x2: 5837141Sgblack@eecs.umich.edu if (rn == INTREG_PC) { 5847141Sgblack@eecs.umich.edu %(mov)s 5857141Sgblack@eecs.umich.edu } else { 5867141Sgblack@eecs.umich.edu %(orr)s 5877141Sgblack@eecs.umich.edu } 5887141Sgblack@eecs.umich.edu case 0x3: 5897141Sgblack@eecs.umich.edu if (rn == INTREG_PC) { 5907141Sgblack@eecs.umich.edu %(mvn)s 5917141Sgblack@eecs.umich.edu } else { 5927141Sgblack@eecs.umich.edu %(orn)s 5937141Sgblack@eecs.umich.edu } 5947141Sgblack@eecs.umich.edu case 0x4: 5957141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 5967141Sgblack@eecs.umich.edu %(teq)s 5977141Sgblack@eecs.umich.edu } else { 5987141Sgblack@eecs.umich.edu %(eor)s 5997141Sgblack@eecs.umich.edu } 6007141Sgblack@eecs.umich.edu case 0x6: 6017141Sgblack@eecs.umich.edu return new WarnUnimplemented("pkh", machInst); 6027141Sgblack@eecs.umich.edu case 0x8: 6037141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 6047141Sgblack@eecs.umich.edu %(cmn)s 6057141Sgblack@eecs.umich.edu } else { 6067141Sgblack@eecs.umich.edu %(add)s 6077141Sgblack@eecs.umich.edu } 6087141Sgblack@eecs.umich.edu case 0xa: 6097141Sgblack@eecs.umich.edu %(adc)s 6107141Sgblack@eecs.umich.edu case 0xb: 6117141Sgblack@eecs.umich.edu %(sbc)s 6127141Sgblack@eecs.umich.edu case 0xd: 6137141Sgblack@eecs.umich.edu if (rd == INTREG_PC) { 6147141Sgblack@eecs.umich.edu %(cmp)s 6157141Sgblack@eecs.umich.edu } else { 6167141Sgblack@eecs.umich.edu %(sub)s 6177141Sgblack@eecs.umich.edu } 6187141Sgblack@eecs.umich.edu case 0xe: 6197141Sgblack@eecs.umich.edu %(rsb)s 6207141Sgblack@eecs.umich.edu default: 6217141Sgblack@eecs.umich.edu return new Unknown(machInst); 6227141Sgblack@eecs.umich.edu } 6237141Sgblack@eecs.umich.edu } 6247141Sgblack@eecs.umich.edu ''' % { 6257141Sgblack@eecs.umich.edu "tst" : decInst("Tst", "INTREG_ZERO"), 6267141Sgblack@eecs.umich.edu "and" : decInst("And"), 6277141Sgblack@eecs.umich.edu "bic" : decInst("Bic"), 6287141Sgblack@eecs.umich.edu "mov" : decInst("Mov", op1="INTREG_ZERO"), 6297141Sgblack@eecs.umich.edu "orr" : decInst("Orr"), 6307141Sgblack@eecs.umich.edu "mvn" : decInst("Mvn", op1="INTREG_ZERO"), 6317141Sgblack@eecs.umich.edu "orn" : decInst("Orn"), 6327141Sgblack@eecs.umich.edu "teq" : decInst("Teq", "INTREG_ZERO"), 6337141Sgblack@eecs.umich.edu "eor" : decInst("Eor"), 6347141Sgblack@eecs.umich.edu "cmn" : decInst("Cmn", "INTREG_ZERO"), 6357141Sgblack@eecs.umich.edu "add" : decInst("Add"), 6367141Sgblack@eecs.umich.edu "adc" : decInst("Adc"), 6377141Sgblack@eecs.umich.edu "sbc" : decInst("Sbc"), 6387141Sgblack@eecs.umich.edu "cmp" : decInst("Cmp", "INTREG_ZERO"), 6397141Sgblack@eecs.umich.edu "sub" : decInst("Sub"), 6407141Sgblack@eecs.umich.edu "rsb" : decInst("Rsb") 6417141Sgblack@eecs.umich.edu } 6427141Sgblack@eecs.umich.edu}}; 643