1754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach//===-- ARMBaseInfo.h - Top level definitions for ARM -------- --*- C++ -*-===// 2754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// 3754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// The LLVM Compiler Infrastructure 4754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// 5754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// This file is distributed under the University of Illinois Open Source 6754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// License. See LICENSE.TXT for details. 7754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// 8754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach//===----------------------------------------------------------------------===// 9754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// 10754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// This file contains small standalone helper functions and enum definitions for 11754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// the ARM target useful for the compiler back-end and the MC libraries. 12754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// As such, it deliberately does not include references to LLVM core 13754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// code gen types, passes, etc.. 14754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// 15754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach//===----------------------------------------------------------------------===// 16754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 17754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach#ifndef ARMBASEINFO_H 18754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach#define ARMBASEINFO_H 19754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 20be74029f44c32efc09274a16cbff588ad10dc5eaEvan Cheng#include "ARMMCTargetDesc.h" 21754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach#include "llvm/Support/ErrorHandling.h" 22754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 23754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbachnamespace llvm { 24754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 25754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach// Enums corresponding to ARM condition codes 26754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbachnamespace ARMCC { 27754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach // The CondCodes constants map directly to the 4-bit encoding of the 28754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach // condition field for predicated instructions. 29754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach enum CondCodes { // Meaning (integer) Meaning (floating-point) 30754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach EQ, // Equal Equal 31754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach NE, // Not equal Not equal, or unordered 32754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach HS, // Carry set >, ==, or unordered 33754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach LO, // Carry clear Less than 34754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach MI, // Minus, negative Less than 35754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach PL, // Plus, positive or zero >, ==, or unordered 36754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach VS, // Overflow Unordered 37754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach VC, // No overflow Not unordered 38754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach HI, // Unsigned higher Greater than, or unordered 39754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach LS, // Unsigned lower or same Less than or equal 40754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach GE, // Greater than or equal Greater than or equal 41754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach LT, // Less than Less than, or unordered 42754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach GT, // Greater than Greater than 43754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach LE, // Less than or equal <, ==, or unordered 44754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach AL // Always (unconditional) Always (unconditional) 45754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach }; 46754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 47754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach inline static CondCodes getOppositeCondition(CondCodes CC) { 48754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach switch (CC) { 49754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach default: llvm_unreachable("Unknown condition code"); 50754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case EQ: return NE; 51754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case NE: return EQ; 52754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case HS: return LO; 53754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case LO: return HS; 54754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case MI: return PL; 55754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case PL: return MI; 56754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case VS: return VC; 57754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case VC: return VS; 58754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case HI: return LS; 59754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case LS: return HI; 60754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case GE: return LT; 61754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case LT: return GE; 62754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case GT: return LE; 63754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case LE: return GT; 64754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach } 65754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach } 66754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach} // namespace ARMCC 67754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 68754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbachinline static const char *ARMCondCodeToString(ARMCC::CondCodes CC) { 69754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach switch (CC) { 70754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::EQ: return "eq"; 71754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::NE: return "ne"; 72754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::HS: return "hs"; 73754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::LO: return "lo"; 74754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::MI: return "mi"; 75754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::PL: return "pl"; 76754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::VS: return "vs"; 77754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::VC: return "vc"; 78754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::HI: return "hi"; 79754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::LS: return "ls"; 80754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::GE: return "ge"; 81754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::LT: return "lt"; 82754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::GT: return "gt"; 83754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::LE: return "le"; 84754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ARMCC::AL: return "al"; 85754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach } 86ea7ad3b3e60f91a5256053b26988806f1dbfdd27Richard Smith llvm_unreachable("Unknown condition code"); 87754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach} 88754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 89a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopesnamespace ARM_PROC { 90a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes enum IMod { 91a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes IE = 2, 92a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes ID = 3 93a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes }; 94a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes 95a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes enum IFlags { 96a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes F = 1, 97a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes I = 2, 98a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes A = 4 99a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes }; 100a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes 101a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes inline static const char *IFlagsToString(unsigned val) { 102a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes switch (val) { 103a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes default: llvm_unreachable("Unknown iflags operand"); 104a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes case F: return "f"; 105a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes case I: return "i"; 106a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes case A: return "a"; 107a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes } 108a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes } 109a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes 110a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes inline static const char *IModToString(unsigned val) { 111a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes switch (val) { 112a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes default: llvm_unreachable("Unknown imod operand"); 113a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes case IE: return "ie"; 114a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes case ID: return "id"; 115a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes } 116a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes } 117a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes} 118a2b6e4151b75248f9dbf8067186cba673520f8f4Bruno Cardoso Lopes 119754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbachnamespace ARM_MB { 120754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach // The Memory Barrier Option constants map directly to the 4-bit encoding of 121754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach // the option field for memory barrier operations. 122754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach enum MemBOpt { 123c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_0 = 0, 124c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_1 = 1, 125c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu OSHST = 2, 126754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach OSH = 3, 127c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_4 = 4, 128c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_5 = 5, 129c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu NSHST = 6, 130c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu NSH = 7, 131c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_8 = 8, 132c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_9 = 9, 133c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu ISHST = 10, 134c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu ISH = 11, 135c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_12 = 12, 136c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu RESERVED_13 = 13, 137c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu ST = 14, 138c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu SY = 15 139754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach }; 140754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 141754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach inline static const char *MemBOptToString(unsigned val) { 142754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach switch (val) { 1438b7fa198c352993c406b756c84531e33fe1b49ebJim Grosbach default: llvm_unreachable("Unknown memory operation"); 144f74a4298163a7d0b500c7f7a818829c153dc942eBob Wilson case SY: return "sy"; 145754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ST: return "st"; 146c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_13: return "#0xd"; 147c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_12: return "#0xc"; 148754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ISH: return "ish"; 149754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case ISHST: return "ishst"; 150c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_9: return "#0x9"; 151c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_8: return "#0x8"; 152754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case NSH: return "nsh"; 153754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case NSHST: return "nshst"; 154c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_5: return "#0x5"; 155c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_4: return "#0x4"; 156754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case OSH: return "osh"; 157754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach case OSHST: return "oshst"; 158c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_1: return "#0x1"; 159c1b7ca5ba28ded2d83ae534c8e072c2538d43295Jiangning Liu case RESERVED_0: return "#0x0"; 160754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach } 161754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach } 162754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach} // namespace ARM_MB 163754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 1644e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuvillenamespace ARM_ISB { 1654e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville enum InstSyncBOpt { 1664e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_0 = 0, 1674e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_1 = 1, 1684e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_2 = 2, 1694e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_3 = 3, 1704e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_4 = 4, 1714e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_5 = 5, 1724e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_6 = 6, 1734e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_7 = 7, 1744e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_8 = 8, 1754e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_9 = 9, 1764e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_10 = 10, 1774e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_11 = 11, 1784e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_12 = 12, 1794e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_13 = 13, 1804e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville RESERVED_14 = 14, 1814e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville SY = 15 1824e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville }; 1834e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville 1844e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville inline static const char *InstSyncBOptToString(unsigned val) { 1854e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville switch (val) { 1864e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville default: llvm_unreachable("Unkown memory operation"); 1874e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_0: return "#0x0"; 1884e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_1: return "#0x1"; 1894e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_2: return "#0x2"; 1904e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_3: return "#0x3"; 1914e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_4: return "#0x4"; 1924e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_5: return "#0x5"; 1934e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_6: return "#0x6"; 1944e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_7: return "#0x7"; 1954e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_8: return "#0x8"; 1964e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_9: return "#0x9"; 1974e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_10: return "#0xa"; 1984e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_11: return "#0xb"; 1994e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_12: return "#0xc"; 2004e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_13: return "#0xd"; 2014e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case RESERVED_14: return "#0xe"; 2024e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville case SY: return "sy"; 2034e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville } 2044e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville } 2054e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville} // namespace ARM_ISB 2064e9a96d810eb0cc126ebe6f18e536b474c84940cAmaury de la Vieuville 207194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach/// isARMLowRegister - Returns true if the register is a low register (r0-r7). 208194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach/// 209194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbachstatic inline bool isARMLowRegister(unsigned Reg) { 210194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach using namespace ARM; 211194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach switch (Reg) { 212194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach case R0: case R1: case R2: case R3: 213194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach case R4: case R5: case R6: case R7: 214194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach return true; 215194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach default: 216194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach return false; 217194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach } 218194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach} 219194bd8982936c819a4b14335a4d08f28af8f3d42Jim Grosbach 220ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng/// ARMII - This namespace holds all of the target specific flags that 221ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng/// instruction info tracks. 222ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng/// 223c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbachnamespace ARMII { 224ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes 225ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes /// ARM Index Modes 226ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes enum IndexMode { 227ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes IndexModeNone = 0, 228ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes IndexModePre = 1, 229ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes IndexModePost = 2, 230ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes IndexModeUpd = 3 231ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes }; 232ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes 233ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes /// ARM Addressing Modes 234ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes enum AddrMode { 235ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeNone = 0, 236ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrMode1 = 1, 237ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrMode2 = 2, 238ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrMode3 = 3, 239ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrMode4 = 4, 240ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrMode5 = 5, 241ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrMode6 = 6, 242ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT1_1 = 7, 243ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT1_2 = 8, 244ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT1_4 = 9, 245ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT1_s = 10, // i8 * 4 for pc and sp relative data 246ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT2_i12 = 11, 247ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT2_i8 = 12, 248ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT2_so = 13, 249ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT2_pc = 14, // +/- i12 for pc relative data 250ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrModeT2_i8s4 = 15, // i8 * 4 251ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes AddrMode_i12 = 16 252ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes }; 253ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes 254ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes inline static const char *AddrModeToString(AddrMode addrmode) { 255ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes switch (addrmode) { 256ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeNone: return "AddrModeNone"; 257ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrMode1: return "AddrMode1"; 258ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrMode2: return "AddrMode2"; 259ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrMode3: return "AddrMode3"; 260ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrMode4: return "AddrMode4"; 261ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrMode5: return "AddrMode5"; 262ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrMode6: return "AddrMode6"; 263ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT1_1: return "AddrModeT1_1"; 264ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT1_2: return "AddrModeT1_2"; 265ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT1_4: return "AddrModeT1_4"; 266ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT1_s: return "AddrModeT1_s"; 267ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT2_i12: return "AddrModeT2_i12"; 268ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT2_i8: return "AddrModeT2_i8"; 269ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT2_so: return "AddrModeT2_so"; 270ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT2_pc: return "AddrModeT2_pc"; 271ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrModeT2_i8s4: return "AddrModeT2_i8s4"; 272ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes case AddrMode_i12: return "AddrMode_i12"; 273ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes } 274ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes } 275ae0855401b8c80f96904b6808b0bc4c89216aecdBruno Cardoso Lopes 276c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach /// Target Operand Flag enum. 277c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach enum TOF { 278c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach //===------------------------------------------------------------------===// 279c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach // ARM Specific MachineOperand flags. 280c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach 281c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach MO_NO_FLAG, 282c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach 283c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach /// MO_LO16 - On a symbol operand, this represents a relocation containing 284c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach /// lower 16 bit of the address. Used only via movw instruction. 285c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach MO_LO16, 286c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach 287c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach /// MO_HI16 - On a symbol operand, this represents a relocation containing 288c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach /// higher 16 bit of the address. Used only via movt instruction. 289637d89fe0eca4fa2b9c95f6c15eb69a99bae83bcJim Grosbach MO_HI16, 290637d89fe0eca4fa2b9c95f6c15eb69a99bae83bcJim Grosbach 29153519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng /// MO_LO16_NONLAZY - On a symbol operand "FOO", this represents a 29253519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng /// relocation containing lower 16 bit of the non-lazy-ptr indirect symbol, 29353519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng /// i.e. "FOO$non_lazy_ptr". 29453519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng /// Used only via movw instruction. 29553519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng MO_LO16_NONLAZY, 29653519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng 29753519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng /// MO_HI16_NONLAZY - On a symbol operand "FOO", this represents a 29853519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng /// relocation containing lower 16 bit of the non-lazy-ptr indirect symbol, 29953519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng /// i.e. "FOO$non_lazy_ptr". Used only via movt instruction. 30053519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng MO_HI16_NONLAZY, 30153519f015e3e84e9f57b677cc8724805a6009b73Evan Cheng 3025de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// MO_LO16_NONLAZY_PIC - On a symbol operand "FOO", this represents a 3035de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// relocation containing lower 16 bit of the PC relative address of the 3045de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// non-lazy-ptr indirect symbol, i.e. "FOO$non_lazy_ptr - LABEL". 3055de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// Used only via movw instruction. 3065de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng MO_LO16_NONLAZY_PIC, 3075de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng 3085de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// MO_HI16_NONLAZY_PIC - On a symbol operand "FOO", this represents a 3095de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// relocation containing lower 16 bit of the PC relative address of the 3105de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// non-lazy-ptr indirect symbol, i.e. "FOO$non_lazy_ptr - LABEL". 3115de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng /// Used only via movt instruction. 3125de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng MO_HI16_NONLAZY_PIC, 3135de5d4b6d0eb3fd379fa571d82f6fa764460b3b8Evan Cheng 314637d89fe0eca4fa2b9c95f6c15eb69a99bae83bcJim Grosbach /// MO_PLT - On a symbol operand, this represents an ELF PLT reference on a 315637d89fe0eca4fa2b9c95f6c15eb69a99bae83bcJim Grosbach /// call operand. 316637d89fe0eca4fa2b9c95f6c15eb69a99bae83bcJim Grosbach MO_PLT 317c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach }; 318ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 319ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng enum { 320ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng //===------------------------------------------------------------------===// 321ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Instruction Flags. 322ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 323ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng //===------------------------------------------------------------------===// 324ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // This four-bit field describes the addressing mode used. 325ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng AddrModeMask = 0x1f, // The AddrMode enums are declared in ARMBaseInfo.h 326ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 327ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // IndexMode - Unindex, pre-indexed, or post-indexed are valid for load 328ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // and store ops only. Generic "updating" flag is used for ld/st multiple. 329ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // The index mode enums are declared in ARMBaseInfo.h 330ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng IndexModeShift = 5, 331ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng IndexModeMask = 3 << IndexModeShift, 332ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 333ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng //===------------------------------------------------------------------===// 334ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Instruction encoding formats. 335ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // 336ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng FormShift = 7, 337ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng FormMask = 0x3f << FormShift, 338ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 339ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Pseudo instructions 340ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng Pseudo = 0 << FormShift, 341ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 342ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Multiply instructions 343ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng MulFrm = 1 << FormShift, 344ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 345ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Branch instructions 346ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng BrFrm = 2 << FormShift, 347ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng BrMiscFrm = 3 << FormShift, 348ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 349ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Data Processing instructions 350ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DPFrm = 4 << FormShift, 351ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DPSoRegFrm = 5 << FormShift, 352ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 353ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Load and Store 354ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng LdFrm = 6 << FormShift, 355ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng StFrm = 7 << FormShift, 356ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng LdMiscFrm = 8 << FormShift, 357ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng StMiscFrm = 9 << FormShift, 358ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng LdStMulFrm = 10 << FormShift, 359ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 360ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng LdStExFrm = 11 << FormShift, 361ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 362ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Miscellaneous arithmetic instructions 363ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ArithMiscFrm = 12 << FormShift, 364ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng SatFrm = 13 << FormShift, 365ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 366ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Extend instructions 367ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ExtFrm = 14 << FormShift, 368ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 369ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // VFP formats 370ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPUnaryFrm = 15 << FormShift, 371ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPBinaryFrm = 16 << FormShift, 372ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPConv1Frm = 17 << FormShift, 373ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPConv2Frm = 18 << FormShift, 374ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPConv3Frm = 19 << FormShift, 375ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPConv4Frm = 20 << FormShift, 376ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPConv5Frm = 21 << FormShift, 377ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPLdStFrm = 22 << FormShift, 378ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPLdStMulFrm = 23 << FormShift, 379ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng VFPMiscFrm = 24 << FormShift, 380ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 381ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Thumb format 382ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ThumbFrm = 25 << FormShift, 383ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 384ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Miscelleaneous format 385ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng MiscFrm = 26 << FormShift, 386ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 387ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // NEON formats 388ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NGetLnFrm = 27 << FormShift, 389ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NSetLnFrm = 28 << FormShift, 390ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NDupFrm = 29 << FormShift, 391ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NLdStFrm = 30 << FormShift, 392ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng N1RegModImmFrm= 31 << FormShift, 393ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng N2RegFrm = 32 << FormShift, 394ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NVCVTFrm = 33 << FormShift, 395ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NVDupLnFrm = 34 << FormShift, 396ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng N2RegVShLFrm = 35 << FormShift, 397ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng N2RegVShRFrm = 36 << FormShift, 398ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng N3RegFrm = 37 << FormShift, 399ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng N3RegVShFrm = 38 << FormShift, 400ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NVExtFrm = 39 << FormShift, 401ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NVMulSLFrm = 40 << FormShift, 402ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng NVTBLFrm = 41 << FormShift, 403ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 404ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng //===------------------------------------------------------------------===// 405ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Misc flags. 406ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 407ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // UnaryDP - Indicates this is a unary data processing instruction, i.e. 408ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // it doesn't have a Rn operand. 409ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng UnaryDP = 1 << 13, 410ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 411ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Xform16Bit - Indicates this Thumb2 instruction may be transformed into 412ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // a 16-bit Thumb instruction if certain conditions are met. 413ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng Xform16Bit = 1 << 14, 414ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 41547a0d52b69056250a1edaca8b28f705993094542Jim Grosbach // ThumbArithFlagSetting - The instruction is a 16-bit flag setting Thumb 41647a0d52b69056250a1edaca8b28f705993094542Jim Grosbach // instruction. Used by the parser to determine whether to require the 'S' 41747a0d52b69056250a1edaca8b28f705993094542Jim Grosbach // suffix on the mnemonic (when not in an IT block) or preclude it (when 41847a0d52b69056250a1edaca8b28f705993094542Jim Grosbach // in an IT block). 41947a0d52b69056250a1edaca8b28f705993094542Jim Grosbach ThumbArithFlagSetting = 1 << 18, 42047a0d52b69056250a1edaca8b28f705993094542Jim Grosbach 421ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng //===------------------------------------------------------------------===// 422ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Code domain. 423ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DomainShift = 15, 424ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DomainMask = 7 << DomainShift, 425ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DomainGeneral = 0 << DomainShift, 426ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DomainVFP = 1 << DomainShift, 427ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DomainNEON = 2 << DomainShift, 428ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng DomainNEONA8 = 4 << DomainShift, 429ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 430ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng //===------------------------------------------------------------------===// 431ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // Field shifts - such shifts are used to set field while generating 432ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // machine instructions. 433ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // 434ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // FIXME: This list will need adjusting/fixing as the MC code emitter 435ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng // takes shape and the ARMCodeEmitter.cpp bits go away. 436ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ShiftTypeShift = 4, 437ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 438ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng M_BitShift = 5, 439ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ShiftImmShift = 5, 440ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ShiftShift = 7, 441ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng N_BitShift = 7, 442ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ImmHiShift = 8, 443ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng SoRotImmShift = 8, 444ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng RegRsShift = 8, 445ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng ExtRotImmShift = 10, 446ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng RegRdLoShift = 12, 447ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng RegRdShift = 12, 448ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng RegRdHiShift = 16, 449ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng RegRnShift = 16, 450ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng S_BitShift = 20, 451ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng W_BitShift = 21, 452ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng AM3_I_BitShift = 22, 453ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng D_BitShift = 22, 454ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng U_BitShift = 23, 455ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng P_BitShift = 24, 456ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng I_BitShift = 25, 457ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng CondShift = 28 458ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng }; 459ee04a6d3a40c3017124e3fd89a0db473a2824498Evan Cheng 460c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach} // end namespace ARMII 461c686e33d12f84e1e1f5c96eadef851d078bab043Jim Grosbach 462a4c3c8f28d9465dc7c42eb43c2377530f1821574Jim Grosbach} // end namespace llvm; 463754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach 464754578b56518d57c28cd439a6dab2b75865e6746Jim Grosbach#endif 465