SystemZ.h revision 288943
1108760Sobrien//==- SystemZ.h - Top-Level Interface for SystemZ representation -*- C++ -*-==// 2108760Sobrien// 3108760Sobrien// The LLVM Compiler Infrastructure 4108760Sobrien// 5108760Sobrien// This file is distributed under the University of Illinois Open Source 6108760Sobrien// License. See LICENSE.TXT for details. 7108760Sobrien// 8108760Sobrien//===----------------------------------------------------------------------===// 9108760Sobrien// 10108760Sobrien// This file contains the entry points for global functions defined in 11108760Sobrien// the LLVM SystemZ backend. 12108760Sobrien// 13108760Sobrien//===----------------------------------------------------------------------===// 14108760Sobrien 15108760Sobrien#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZ_H 16108760Sobrien#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZ_H 17108760Sobrien 18108760Sobrien#include "MCTargetDesc/SystemZMCTargetDesc.h" 19108760Sobrien#include "llvm/Support/CodeGen.h" 20108760Sobrien 21108760Sobriennamespace llvm { 22108760Sobrienclass SystemZTargetMachine; 23108760Sobrienclass FunctionPass; 24108760Sobrien 25108760Sobriennamespace SystemZ { 26108760Sobrien// Condition-code mask values. 27108760Sobrienconst unsigned CCMASK_0 = 1 << 3; 28108760Sobrienconst unsigned CCMASK_1 = 1 << 2; 29108760Sobrienconst unsigned CCMASK_2 = 1 << 1; 30108760Sobrienconst unsigned CCMASK_3 = 1 << 0; 31108760Sobrienconst unsigned CCMASK_ANY = CCMASK_0 | CCMASK_1 | CCMASK_2 | CCMASK_3; 32108760Sobrien 33108760Sobrien// Condition-code mask assignments for integer and floating-point 34108760Sobrien// comparisons. 35108760Sobrienconst unsigned CCMASK_CMP_EQ = CCMASK_0; 36108760Sobrienconst unsigned CCMASK_CMP_LT = CCMASK_1; 37108760Sobrienconst unsigned CCMASK_CMP_GT = CCMASK_2; 38108760Sobrienconst unsigned CCMASK_CMP_NE = CCMASK_CMP_LT | CCMASK_CMP_GT; 39108760Sobrienconst unsigned CCMASK_CMP_LE = CCMASK_CMP_EQ | CCMASK_CMP_LT; 40108760Sobrienconst unsigned CCMASK_CMP_GE = CCMASK_CMP_EQ | CCMASK_CMP_GT; 41108760Sobrien 42108760Sobrien// Condition-code mask assignments for floating-point comparisons only. 43108760Sobrienconst unsigned CCMASK_CMP_UO = CCMASK_3; 44108760Sobrienconst unsigned CCMASK_CMP_O = CCMASK_ANY ^ CCMASK_CMP_UO; 45108760Sobrien 46108760Sobrien// All condition-code values produced by comparisons. 47108760Sobrienconst unsigned CCMASK_ICMP = CCMASK_0 | CCMASK_1 | CCMASK_2; 48108760Sobrienconst unsigned CCMASK_FCMP = CCMASK_0 | CCMASK_1 | CCMASK_2 | CCMASK_3; 49108760Sobrien 50108760Sobrien// Condition-code mask assignments for CS. 51108760Sobrienconst unsigned CCMASK_CS_EQ = CCMASK_0; 52108760Sobrienconst unsigned CCMASK_CS_NE = CCMASK_1; 53108760Sobrienconst unsigned CCMASK_CS = CCMASK_0 | CCMASK_1; 54108760Sobrien 55108760Sobrien// Condition-code mask assignments for a completed SRST loop. 56108760Sobrienconst unsigned CCMASK_SRST_FOUND = CCMASK_1; 57108760Sobrienconst unsigned CCMASK_SRST_NOTFOUND = CCMASK_2; 58108760Sobrienconst unsigned CCMASK_SRST = CCMASK_1 | CCMASK_2; 59108760Sobrien 60108760Sobrien// Condition-code mask assignments for TEST UNDER MASK. 61108760Sobrienconst unsigned CCMASK_TM_ALL_0 = CCMASK_0; 62108760Sobrienconst unsigned CCMASK_TM_MIXED_MSB_0 = CCMASK_1; 63108760Sobrienconst unsigned CCMASK_TM_MIXED_MSB_1 = CCMASK_2; 64108760Sobrienconst unsigned CCMASK_TM_ALL_1 = CCMASK_3; 65108760Sobrienconst unsigned CCMASK_TM_SOME_0 = CCMASK_TM_ALL_1 ^ CCMASK_ANY; 66108760Sobrienconst unsigned CCMASK_TM_SOME_1 = CCMASK_TM_ALL_0 ^ CCMASK_ANY; 67108760Sobrienconst unsigned CCMASK_TM_MSB_0 = CCMASK_0 | CCMASK_1; 68108760Sobrienconst unsigned CCMASK_TM_MSB_1 = CCMASK_2 | CCMASK_3; 69108760Sobrienconst unsigned CCMASK_TM = CCMASK_ANY; 70108760Sobrien 71108760Sobrien// Condition-code mask assignments for TRANSACTION_BEGIN. 72108760Sobrienconst unsigned CCMASK_TBEGIN_STARTED = CCMASK_0; 73108760Sobrienconst unsigned CCMASK_TBEGIN_INDETERMINATE = CCMASK_1; 74108760Sobrienconst unsigned CCMASK_TBEGIN_TRANSIENT = CCMASK_2; 75108760Sobrienconst unsigned CCMASK_TBEGIN_PERSISTENT = CCMASK_3; 76108760Sobrienconst unsigned CCMASK_TBEGIN = CCMASK_ANY; 77108760Sobrien 78108760Sobrien// Condition-code mask assignments for TRANSACTION_END. 79108760Sobrienconst unsigned CCMASK_TEND_TX = CCMASK_0; 80108760Sobrienconst unsigned CCMASK_TEND_NOTX = CCMASK_2; 81108760Sobrienconst unsigned CCMASK_TEND = CCMASK_TEND_TX | CCMASK_TEND_NOTX; 82108760Sobrien 83108760Sobrien// Condition-code mask assignments for vector comparisons (and similar 84108760Sobrien// operations). 85108760Sobrienconst unsigned CCMASK_VCMP_ALL = CCMASK_0; 86108760Sobrienconst unsigned CCMASK_VCMP_MIXED = CCMASK_1; 87108760Sobrienconst unsigned CCMASK_VCMP_NONE = CCMASK_3; 88108760Sobrienconst unsigned CCMASK_VCMP = CCMASK_0 | CCMASK_1 | CCMASK_3; 89108760Sobrien 90108760Sobrien// The position of the low CC bit in an IPM result. 91108760Sobrienconst unsigned IPM_CC = 28; 92108760Sobrien 93108760Sobrien// Mask assignments for PFD. 94108760Sobrienconst unsigned PFD_READ = 1; 95108760Sobrienconst unsigned PFD_WRITE = 2; 96108760Sobrien 97108760Sobrien// Number of bits in a vector register. 98108760Sobrienconst unsigned VectorBits = 128; 99108760Sobrien 100108760Sobrien// Number of bytes in a vector register (and consequently the number of 101108760Sobrien// bytes in a general permute vector). 102108760Sobrienconst unsigned VectorBytes = VectorBits / 8; 103108760Sobrien 104108760Sobrien// Return true if Val fits an LLILL operand. 105108760Sobrienstatic inline bool isImmLL(uint64_t Val) { 106108760Sobrien return (Val & ~0x000000000000ffffULL) == 0; 107108760Sobrien} 108108760Sobrien 109108760Sobrien// Return true if Val fits an LLILH operand. 110108760Sobrienstatic inline bool isImmLH(uint64_t Val) { 111108760Sobrien return (Val & ~0x00000000ffff0000ULL) == 0; 112108760Sobrien} 113108760Sobrien 114108760Sobrien// Return true if Val fits an LLIHL operand. 115108760Sobrienstatic inline bool isImmHL(uint64_t Val) { 116108760Sobrien return (Val & ~0x00000ffff00000000ULL) == 0; 117108760Sobrien} 118108760Sobrien 119108760Sobrien// Return true if Val fits an LLIHH operand. 120108760Sobrienstatic inline bool isImmHH(uint64_t Val) { 121108760Sobrien return (Val & ~0xffff000000000000ULL) == 0; 122108760Sobrien} 123108760Sobrien 124108760Sobrien// Return true if Val fits an LLILF operand. 125108760Sobrienstatic inline bool isImmLF(uint64_t Val) { 126108760Sobrien return (Val & ~0x00000000ffffffffULL) == 0; 127108760Sobrien} 128108760Sobrien 129108760Sobrien// Return true if Val fits an LLIHF operand. 130108760Sobrienstatic inline bool isImmHF(uint64_t Val) { 131108760Sobrien return (Val & ~0xffffffff00000000ULL) == 0; 132108760Sobrien} 133108760Sobrien} // end namespace SystemZ 134108760Sobrien 135108760SobrienFunctionPass *createSystemZISelDag(SystemZTargetMachine &TM, 136108760Sobrien CodeGenOpt::Level OptLevel); 137108760SobrienFunctionPass *createSystemZElimComparePass(SystemZTargetMachine &TM); 138108760SobrienFunctionPass *createSystemZShortenInstPass(SystemZTargetMachine &TM); 139108760SobrienFunctionPass *createSystemZLongBranchPass(SystemZTargetMachine &TM); 140108760SobrienFunctionPass *createSystemZLDCleanupPass(SystemZTargetMachine &TM); 141108760Sobrien} // end namespace llvm 142108760Sobrien 143108760Sobrien#endif 144108760Sobrien