1*9880d681SAndroid Build Coastguard Worker //===-- R600Defines.h - R600 Helper Macros ----------------------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker /// \file 9*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_AMDGPU_R600DEFINES_H 12*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_AMDGPU_R600DEFINES_H 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCRegisterInfo.h" 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker // Operand Flags 17*9880d681SAndroid Build Coastguard Worker #define MO_FLAG_CLAMP (1 << 0) 18*9880d681SAndroid Build Coastguard Worker #define MO_FLAG_NEG (1 << 1) 19*9880d681SAndroid Build Coastguard Worker #define MO_FLAG_ABS (1 << 2) 20*9880d681SAndroid Build Coastguard Worker #define MO_FLAG_MASK (1 << 3) 21*9880d681SAndroid Build Coastguard Worker #define MO_FLAG_PUSH (1 << 4) 22*9880d681SAndroid Build Coastguard Worker #define MO_FLAG_NOT_LAST (1 << 5) 23*9880d681SAndroid Build Coastguard Worker #define MO_FLAG_LAST (1 << 6) 24*9880d681SAndroid Build Coastguard Worker #define NUM_MO_FLAGS 7 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker /// \brief Helper for getting the operand index for the instruction flags 27*9880d681SAndroid Build Coastguard Worker /// operand. 28*9880d681SAndroid Build Coastguard Worker #define GET_FLAG_OPERAND_IDX(Flags) (((Flags) >> 7) & 0x3) 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker namespace R600_InstFlag { 31*9880d681SAndroid Build Coastguard Worker enum TIF { 32*9880d681SAndroid Build Coastguard Worker TRANS_ONLY = (1 << 0), 33*9880d681SAndroid Build Coastguard Worker TEX = (1 << 1), 34*9880d681SAndroid Build Coastguard Worker REDUCTION = (1 << 2), 35*9880d681SAndroid Build Coastguard Worker FC = (1 << 3), 36*9880d681SAndroid Build Coastguard Worker TRIG = (1 << 4), 37*9880d681SAndroid Build Coastguard Worker OP3 = (1 << 5), 38*9880d681SAndroid Build Coastguard Worker VECTOR = (1 << 6), 39*9880d681SAndroid Build Coastguard Worker //FlagOperand bits 7, 8 40*9880d681SAndroid Build Coastguard Worker NATIVE_OPERANDS = (1 << 9), 41*9880d681SAndroid Build Coastguard Worker OP1 = (1 << 10), 42*9880d681SAndroid Build Coastguard Worker OP2 = (1 << 11), 43*9880d681SAndroid Build Coastguard Worker VTX_INST = (1 << 12), 44*9880d681SAndroid Build Coastguard Worker TEX_INST = (1 << 13), 45*9880d681SAndroid Build Coastguard Worker ALU_INST = (1 << 14), 46*9880d681SAndroid Build Coastguard Worker LDS_1A = (1 << 15), 47*9880d681SAndroid Build Coastguard Worker LDS_1A1D = (1 << 16), 48*9880d681SAndroid Build Coastguard Worker IS_EXPORT = (1 << 17), 49*9880d681SAndroid Build Coastguard Worker LDS_1A2D = (1 << 18) 50*9880d681SAndroid Build Coastguard Worker }; 51*9880d681SAndroid Build Coastguard Worker } 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker #define HAS_NATIVE_OPERANDS(Flags) ((Flags) & R600_InstFlag::NATIVE_OPERANDS) 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker /// \brief Defines for extracting register information from register encoding 56*9880d681SAndroid Build Coastguard Worker #define HW_REG_MASK 0x1ff 57*9880d681SAndroid Build Coastguard Worker #define HW_CHAN_SHIFT 9 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker #define GET_REG_CHAN(reg) ((reg) >> HW_CHAN_SHIFT) 60*9880d681SAndroid Build Coastguard Worker #define GET_REG_INDEX(reg) ((reg) & HW_REG_MASK) 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker #define IS_VTX(desc) ((desc).TSFlags & R600_InstFlag::VTX_INST) 63*9880d681SAndroid Build Coastguard Worker #define IS_TEX(desc) ((desc).TSFlags & R600_InstFlag::TEX_INST) 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker namespace OpName { 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker enum VecOps { 68*9880d681SAndroid Build Coastguard Worker UPDATE_EXEC_MASK_X, 69*9880d681SAndroid Build Coastguard Worker UPDATE_PREDICATE_X, 70*9880d681SAndroid Build Coastguard Worker WRITE_X, 71*9880d681SAndroid Build Coastguard Worker OMOD_X, 72*9880d681SAndroid Build Coastguard Worker DST_REL_X, 73*9880d681SAndroid Build Coastguard Worker CLAMP_X, 74*9880d681SAndroid Build Coastguard Worker SRC0_X, 75*9880d681SAndroid Build Coastguard Worker SRC0_NEG_X, 76*9880d681SAndroid Build Coastguard Worker SRC0_REL_X, 77*9880d681SAndroid Build Coastguard Worker SRC0_ABS_X, 78*9880d681SAndroid Build Coastguard Worker SRC0_SEL_X, 79*9880d681SAndroid Build Coastguard Worker SRC1_X, 80*9880d681SAndroid Build Coastguard Worker SRC1_NEG_X, 81*9880d681SAndroid Build Coastguard Worker SRC1_REL_X, 82*9880d681SAndroid Build Coastguard Worker SRC1_ABS_X, 83*9880d681SAndroid Build Coastguard Worker SRC1_SEL_X, 84*9880d681SAndroid Build Coastguard Worker PRED_SEL_X, 85*9880d681SAndroid Build Coastguard Worker UPDATE_EXEC_MASK_Y, 86*9880d681SAndroid Build Coastguard Worker UPDATE_PREDICATE_Y, 87*9880d681SAndroid Build Coastguard Worker WRITE_Y, 88*9880d681SAndroid Build Coastguard Worker OMOD_Y, 89*9880d681SAndroid Build Coastguard Worker DST_REL_Y, 90*9880d681SAndroid Build Coastguard Worker CLAMP_Y, 91*9880d681SAndroid Build Coastguard Worker SRC0_Y, 92*9880d681SAndroid Build Coastguard Worker SRC0_NEG_Y, 93*9880d681SAndroid Build Coastguard Worker SRC0_REL_Y, 94*9880d681SAndroid Build Coastguard Worker SRC0_ABS_Y, 95*9880d681SAndroid Build Coastguard Worker SRC0_SEL_Y, 96*9880d681SAndroid Build Coastguard Worker SRC1_Y, 97*9880d681SAndroid Build Coastguard Worker SRC1_NEG_Y, 98*9880d681SAndroid Build Coastguard Worker SRC1_REL_Y, 99*9880d681SAndroid Build Coastguard Worker SRC1_ABS_Y, 100*9880d681SAndroid Build Coastguard Worker SRC1_SEL_Y, 101*9880d681SAndroid Build Coastguard Worker PRED_SEL_Y, 102*9880d681SAndroid Build Coastguard Worker UPDATE_EXEC_MASK_Z, 103*9880d681SAndroid Build Coastguard Worker UPDATE_PREDICATE_Z, 104*9880d681SAndroid Build Coastguard Worker WRITE_Z, 105*9880d681SAndroid Build Coastguard Worker OMOD_Z, 106*9880d681SAndroid Build Coastguard Worker DST_REL_Z, 107*9880d681SAndroid Build Coastguard Worker CLAMP_Z, 108*9880d681SAndroid Build Coastguard Worker SRC0_Z, 109*9880d681SAndroid Build Coastguard Worker SRC0_NEG_Z, 110*9880d681SAndroid Build Coastguard Worker SRC0_REL_Z, 111*9880d681SAndroid Build Coastguard Worker SRC0_ABS_Z, 112*9880d681SAndroid Build Coastguard Worker SRC0_SEL_Z, 113*9880d681SAndroid Build Coastguard Worker SRC1_Z, 114*9880d681SAndroid Build Coastguard Worker SRC1_NEG_Z, 115*9880d681SAndroid Build Coastguard Worker SRC1_REL_Z, 116*9880d681SAndroid Build Coastguard Worker SRC1_ABS_Z, 117*9880d681SAndroid Build Coastguard Worker SRC1_SEL_Z, 118*9880d681SAndroid Build Coastguard Worker PRED_SEL_Z, 119*9880d681SAndroid Build Coastguard Worker UPDATE_EXEC_MASK_W, 120*9880d681SAndroid Build Coastguard Worker UPDATE_PREDICATE_W, 121*9880d681SAndroid Build Coastguard Worker WRITE_W, 122*9880d681SAndroid Build Coastguard Worker OMOD_W, 123*9880d681SAndroid Build Coastguard Worker DST_REL_W, 124*9880d681SAndroid Build Coastguard Worker CLAMP_W, 125*9880d681SAndroid Build Coastguard Worker SRC0_W, 126*9880d681SAndroid Build Coastguard Worker SRC0_NEG_W, 127*9880d681SAndroid Build Coastguard Worker SRC0_REL_W, 128*9880d681SAndroid Build Coastguard Worker SRC0_ABS_W, 129*9880d681SAndroid Build Coastguard Worker SRC0_SEL_W, 130*9880d681SAndroid Build Coastguard Worker SRC1_W, 131*9880d681SAndroid Build Coastguard Worker SRC1_NEG_W, 132*9880d681SAndroid Build Coastguard Worker SRC1_REL_W, 133*9880d681SAndroid Build Coastguard Worker SRC1_ABS_W, 134*9880d681SAndroid Build Coastguard Worker SRC1_SEL_W, 135*9880d681SAndroid Build Coastguard Worker PRED_SEL_W, 136*9880d681SAndroid Build Coastguard Worker IMM_0, 137*9880d681SAndroid Build Coastguard Worker IMM_1, 138*9880d681SAndroid Build Coastguard Worker VEC_COUNT 139*9880d681SAndroid Build Coastguard Worker }; 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Worker } 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 144*9880d681SAndroid Build Coastguard Worker // Config register definitions 145*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker #define R_02880C_DB_SHADER_CONTROL 0x02880C 148*9880d681SAndroid Build Coastguard Worker #define S_02880C_KILL_ENABLE(x) (((x) & 0x1) << 6) 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Worker // These fields are the same for all shader types and families. 151*9880d681SAndroid Build Coastguard Worker #define S_NUM_GPRS(x) (((x) & 0xFF) << 0) 152*9880d681SAndroid Build Coastguard Worker #define S_STACK_SIZE(x) (((x) & 0xFF) << 8) 153*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 154*9880d681SAndroid Build Coastguard Worker // R600, R700 Registers 155*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker #define R_028850_SQ_PGM_RESOURCES_PS 0x028850 158*9880d681SAndroid Build Coastguard Worker #define R_028868_SQ_PGM_RESOURCES_VS 0x028868 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 161*9880d681SAndroid Build Coastguard Worker // Evergreen, Northern Islands Registers 162*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker #define R_028844_SQ_PGM_RESOURCES_PS 0x028844 165*9880d681SAndroid Build Coastguard Worker #define R_028860_SQ_PGM_RESOURCES_VS 0x028860 166*9880d681SAndroid Build Coastguard Worker #define R_028878_SQ_PGM_RESOURCES_GS 0x028878 167*9880d681SAndroid Build Coastguard Worker #define R_0288D4_SQ_PGM_RESOURCES_LS 0x0288d4 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker #define R_0288E8_SQ_LDS_ALLOC 0x0288E8 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker #endif 172