1*9a0e4156SSadaf Ebrahimi //===-- PPCPredicates.h - PPC Branch Predicate Information ------*- C++ -*-===// 2*9a0e4156SSadaf Ebrahimi // 3*9a0e4156SSadaf Ebrahimi // The LLVM Compiler Infrastructure 4*9a0e4156SSadaf Ebrahimi // 5*9a0e4156SSadaf Ebrahimi // This file is distributed under the University of Illinois Open Source 6*9a0e4156SSadaf Ebrahimi // License. See LICENSE.TXT for details. 7*9a0e4156SSadaf Ebrahimi // 8*9a0e4156SSadaf Ebrahimi //===----------------------------------------------------------------------===// 9*9a0e4156SSadaf Ebrahimi // 10*9a0e4156SSadaf Ebrahimi // This file describes the PowerPC branch predicates. 11*9a0e4156SSadaf Ebrahimi // 12*9a0e4156SSadaf Ebrahimi //===----------------------------------------------------------------------===// 13*9a0e4156SSadaf Ebrahimi 14*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */ 15*9a0e4156SSadaf Ebrahimi /* By Nguyen Anh Quynh <[email protected]>, 2013-2015 */ 16*9a0e4156SSadaf Ebrahimi 17*9a0e4156SSadaf Ebrahimi #ifndef CS_POWERPC_PPCPREDICATES_H 18*9a0e4156SSadaf Ebrahimi #define CS_POWERPC_PPCPREDICATES_H 19*9a0e4156SSadaf Ebrahimi 20*9a0e4156SSadaf Ebrahimi #include "capstone/ppc.h" 21*9a0e4156SSadaf Ebrahimi 22*9a0e4156SSadaf Ebrahimi // NOTE: duplicate of ppc_bc in ppc.h to maitain code compatibility with LLVM 23*9a0e4156SSadaf Ebrahimi typedef enum ppc_predicate { 24*9a0e4156SSadaf Ebrahimi PPC_PRED_LT = (0 << 5) | 12, 25*9a0e4156SSadaf Ebrahimi PPC_PRED_LE = (1 << 5) | 4, 26*9a0e4156SSadaf Ebrahimi PPC_PRED_EQ = (2 << 5) | 12, 27*9a0e4156SSadaf Ebrahimi PPC_PRED_GE = (0 << 5) | 4, 28*9a0e4156SSadaf Ebrahimi PPC_PRED_GT = (1 << 5) | 12, 29*9a0e4156SSadaf Ebrahimi PPC_PRED_NE = (2 << 5) | 4, 30*9a0e4156SSadaf Ebrahimi PPC_PRED_UN = (3 << 5) | 12, 31*9a0e4156SSadaf Ebrahimi PPC_PRED_NU = (3 << 5) | 4, 32*9a0e4156SSadaf Ebrahimi PPC_PRED_LT_MINUS = (0 << 5) | 14, 33*9a0e4156SSadaf Ebrahimi PPC_PRED_LE_MINUS = (1 << 5) | 6, 34*9a0e4156SSadaf Ebrahimi PPC_PRED_EQ_MINUS = (2 << 5) | 14, 35*9a0e4156SSadaf Ebrahimi PPC_PRED_GE_MINUS = (0 << 5) | 6, 36*9a0e4156SSadaf Ebrahimi PPC_PRED_GT_MINUS = (1 << 5) | 14, 37*9a0e4156SSadaf Ebrahimi PPC_PRED_NE_MINUS = (2 << 5) | 6, 38*9a0e4156SSadaf Ebrahimi PPC_PRED_UN_MINUS = (3 << 5) | 14, 39*9a0e4156SSadaf Ebrahimi PPC_PRED_NU_MINUS = (3 << 5) | 6, 40*9a0e4156SSadaf Ebrahimi PPC_PRED_LT_PLUS = (0 << 5) | 15, 41*9a0e4156SSadaf Ebrahimi PPC_PRED_LE_PLUS = (1 << 5) | 7, 42*9a0e4156SSadaf Ebrahimi PPC_PRED_EQ_PLUS = (2 << 5) | 15, 43*9a0e4156SSadaf Ebrahimi PPC_PRED_GE_PLUS = (0 << 5) | 7, 44*9a0e4156SSadaf Ebrahimi PPC_PRED_GT_PLUS = (1 << 5) | 15, 45*9a0e4156SSadaf Ebrahimi PPC_PRED_NE_PLUS = (2 << 5) | 7, 46*9a0e4156SSadaf Ebrahimi PPC_PRED_UN_PLUS = (3 << 5) | 15, 47*9a0e4156SSadaf Ebrahimi PPC_PRED_NU_PLUS = (3 << 5) | 7, 48*9a0e4156SSadaf Ebrahimi 49*9a0e4156SSadaf Ebrahimi // When dealing with individual condition-register bits, we have simple set 50*9a0e4156SSadaf Ebrahimi // and unset predicates. 51*9a0e4156SSadaf Ebrahimi PPC_PRED_BIT_SET = 1024, 52*9a0e4156SSadaf Ebrahimi PPC_PRED_BIT_UNSET = 1025 53*9a0e4156SSadaf Ebrahimi } ppc_predicate; 54*9a0e4156SSadaf Ebrahimi 55*9a0e4156SSadaf Ebrahimi /// Invert the specified predicate. != -> ==, < -> >=. 56*9a0e4156SSadaf Ebrahimi ppc_predicate InvertPredicate(ppc_predicate Opcode); 57*9a0e4156SSadaf Ebrahimi 58*9a0e4156SSadaf Ebrahimi /// Assume the condition register is set by MI(a,b), return the predicate if 59*9a0e4156SSadaf Ebrahimi /// we modify the instructions such that condition register is set by MI(b,a). 60*9a0e4156SSadaf Ebrahimi ppc_predicate getSwappedPredicate(ppc_predicate Opcode); 61*9a0e4156SSadaf Ebrahimi 62*9a0e4156SSadaf Ebrahimi #endif 63