1251607Sdim//==- SystemZ.h - Top-Level Interface for SystemZ representation -*- C++ -*-==// 2251607Sdim// 3251607Sdim// The LLVM Compiler Infrastructure 4251607Sdim// 5251607Sdim// This file is distributed under the University of Illinois Open Source 6251607Sdim// License. See LICENSE.TXT for details. 7251607Sdim// 8251607Sdim//===----------------------------------------------------------------------===// 9251607Sdim// 10251607Sdim// This file contains the entry points for global functions defined in 11251607Sdim// the LLVM SystemZ backend. 12251607Sdim// 13251607Sdim//===----------------------------------------------------------------------===// 14251607Sdim 15280031Sdim#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZ_H 16280031Sdim#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZ_H 17251607Sdim 18251607Sdim#include "MCTargetDesc/SystemZMCTargetDesc.h" 19251607Sdim#include "llvm/Support/CodeGen.h" 20251607Sdim 21251607Sdimnamespace llvm { 22276479Sdimclass SystemZTargetMachine; 23276479Sdimclass FunctionPass; 24251607Sdim 25276479Sdimnamespace SystemZ { 26276479Sdim// Condition-code mask values. 27276479Sdimconst unsigned CCMASK_0 = 1 << 3; 28276479Sdimconst unsigned CCMASK_1 = 1 << 2; 29276479Sdimconst unsigned CCMASK_2 = 1 << 1; 30276479Sdimconst unsigned CCMASK_3 = 1 << 0; 31276479Sdimconst unsigned CCMASK_ANY = CCMASK_0 | CCMASK_1 | CCMASK_2 | CCMASK_3; 32251607Sdim 33276479Sdim// Condition-code mask assignments for integer and floating-point 34276479Sdim// comparisons. 35276479Sdimconst unsigned CCMASK_CMP_EQ = CCMASK_0; 36276479Sdimconst unsigned CCMASK_CMP_LT = CCMASK_1; 37276479Sdimconst unsigned CCMASK_CMP_GT = CCMASK_2; 38276479Sdimconst unsigned CCMASK_CMP_NE = CCMASK_CMP_LT | CCMASK_CMP_GT; 39276479Sdimconst unsigned CCMASK_CMP_LE = CCMASK_CMP_EQ | CCMASK_CMP_LT; 40276479Sdimconst unsigned CCMASK_CMP_GE = CCMASK_CMP_EQ | CCMASK_CMP_GT; 41261991Sdim 42276479Sdim// Condition-code mask assignments for floating-point comparisons only. 43276479Sdimconst unsigned CCMASK_CMP_UO = CCMASK_3; 44276479Sdimconst unsigned CCMASK_CMP_O = CCMASK_ANY ^ CCMASK_CMP_UO; 45251607Sdim 46276479Sdim// All condition-code values produced by comparisons. 47276479Sdimconst unsigned CCMASK_ICMP = CCMASK_0 | CCMASK_1 | CCMASK_2; 48276479Sdimconst unsigned CCMASK_FCMP = CCMASK_0 | CCMASK_1 | CCMASK_2 | CCMASK_3; 49261991Sdim 50276479Sdim// Condition-code mask assignments for CS. 51276479Sdimconst unsigned CCMASK_CS_EQ = CCMASK_0; 52276479Sdimconst unsigned CCMASK_CS_NE = CCMASK_1; 53276479Sdimconst unsigned CCMASK_CS = CCMASK_0 | CCMASK_1; 54261991Sdim 55276479Sdim// Condition-code mask assignments for a completed SRST loop. 56276479Sdimconst unsigned CCMASK_SRST_FOUND = CCMASK_1; 57276479Sdimconst unsigned CCMASK_SRST_NOTFOUND = CCMASK_2; 58276479Sdimconst unsigned CCMASK_SRST = CCMASK_1 | CCMASK_2; 59261991Sdim 60276479Sdim// Condition-code mask assignments for TEST UNDER MASK. 61276479Sdimconst unsigned CCMASK_TM_ALL_0 = CCMASK_0; 62276479Sdimconst unsigned CCMASK_TM_MIXED_MSB_0 = CCMASK_1; 63276479Sdimconst unsigned CCMASK_TM_MIXED_MSB_1 = CCMASK_2; 64276479Sdimconst unsigned CCMASK_TM_ALL_1 = CCMASK_3; 65276479Sdimconst unsigned CCMASK_TM_SOME_0 = CCMASK_TM_ALL_1 ^ CCMASK_ANY; 66276479Sdimconst unsigned CCMASK_TM_SOME_1 = CCMASK_TM_ALL_0 ^ CCMASK_ANY; 67276479Sdimconst unsigned CCMASK_TM_MSB_0 = CCMASK_0 | CCMASK_1; 68276479Sdimconst unsigned CCMASK_TM_MSB_1 = CCMASK_2 | CCMASK_3; 69276479Sdimconst unsigned CCMASK_TM = CCMASK_ANY; 70261991Sdim 71288943Sdim// Condition-code mask assignments for TRANSACTION_BEGIN. 72288943Sdimconst unsigned CCMASK_TBEGIN_STARTED = CCMASK_0; 73288943Sdimconst unsigned CCMASK_TBEGIN_INDETERMINATE = CCMASK_1; 74288943Sdimconst unsigned CCMASK_TBEGIN_TRANSIENT = CCMASK_2; 75288943Sdimconst unsigned CCMASK_TBEGIN_PERSISTENT = CCMASK_3; 76288943Sdimconst unsigned CCMASK_TBEGIN = CCMASK_ANY; 77288943Sdim 78288943Sdim// Condition-code mask assignments for TRANSACTION_END. 79288943Sdimconst unsigned CCMASK_TEND_TX = CCMASK_0; 80288943Sdimconst unsigned CCMASK_TEND_NOTX = CCMASK_2; 81288943Sdimconst unsigned CCMASK_TEND = CCMASK_TEND_TX | CCMASK_TEND_NOTX; 82288943Sdim 83288943Sdim// Condition-code mask assignments for vector comparisons (and similar 84288943Sdim// operations). 85288943Sdimconst unsigned CCMASK_VCMP_ALL = CCMASK_0; 86288943Sdimconst unsigned CCMASK_VCMP_MIXED = CCMASK_1; 87288943Sdimconst unsigned CCMASK_VCMP_NONE = CCMASK_3; 88288943Sdimconst unsigned CCMASK_VCMP = CCMASK_0 | CCMASK_1 | CCMASK_3; 89288943Sdim 90276479Sdim// The position of the low CC bit in an IPM result. 91276479Sdimconst unsigned IPM_CC = 28; 92261991Sdim 93276479Sdim// Mask assignments for PFD. 94276479Sdimconst unsigned PFD_READ = 1; 95276479Sdimconst unsigned PFD_WRITE = 2; 96261991Sdim 97288943Sdim// Number of bits in a vector register. 98288943Sdimconst unsigned VectorBits = 128; 99288943Sdim 100288943Sdim// Number of bytes in a vector register (and consequently the number of 101288943Sdim// bytes in a general permute vector). 102288943Sdimconst unsigned VectorBytes = VectorBits / 8; 103288943Sdim 104276479Sdim// Return true if Val fits an LLILL operand. 105276479Sdimstatic inline bool isImmLL(uint64_t Val) { 106276479Sdim return (Val & ~0x000000000000ffffULL) == 0; 107276479Sdim} 108251607Sdim 109276479Sdim// Return true if Val fits an LLILH operand. 110276479Sdimstatic inline bool isImmLH(uint64_t Val) { 111276479Sdim return (Val & ~0x00000000ffff0000ULL) == 0; 112276479Sdim} 113251607Sdim 114276479Sdim// Return true if Val fits an LLIHL operand. 115276479Sdimstatic inline bool isImmHL(uint64_t Val) { 116276479Sdim return (Val & ~0x00000ffff00000000ULL) == 0; 117276479Sdim} 118251607Sdim 119276479Sdim// Return true if Val fits an LLIHH operand. 120276479Sdimstatic inline bool isImmHH(uint64_t Val) { 121276479Sdim return (Val & ~0xffff000000000000ULL) == 0; 122276479Sdim} 123251607Sdim 124276479Sdim// Return true if Val fits an LLILF operand. 125276479Sdimstatic inline bool isImmLF(uint64_t Val) { 126276479Sdim return (Val & ~0x00000000ffffffffULL) == 0; 127276479Sdim} 128251607Sdim 129276479Sdim// Return true if Val fits an LLIHF operand. 130276479Sdimstatic inline bool isImmHF(uint64_t Val) { 131276479Sdim return (Val & ~0xffffffff00000000ULL) == 0; 132276479Sdim} 133276479Sdim} // end namespace SystemZ 134251607Sdim 135276479SdimFunctionPass *createSystemZISelDag(SystemZTargetMachine &TM, 136276479Sdim CodeGenOpt::Level OptLevel); 137276479SdimFunctionPass *createSystemZElimComparePass(SystemZTargetMachine &TM); 138276479SdimFunctionPass *createSystemZShortenInstPass(SystemZTargetMachine &TM); 139276479SdimFunctionPass *createSystemZLongBranchPass(SystemZTargetMachine &TM); 140288943SdimFunctionPass *createSystemZLDCleanupPass(SystemZTargetMachine &TM); 141276479Sdim} // end namespace llvm 142276479Sdim 143251607Sdim#endif 144