ppc: handle branch condition for alias instructions. this also updates Python & Java bindings
diff --git a/arch/PowerPC/PPCInstPrinter.c b/arch/PowerPC/PPCInstPrinter.c
index aadf814..21af838 100644
--- a/arch/PowerPC/PPCInstPrinter.c
+++ b/arch/PowerPC/PPCInstPrinter.c
@@ -146,23 +146,72 @@
mnem = printAliasInstr(MI, O, Info);
if (mnem) {
+ struct ppc_alias alias;
// check to remove the last letter of ('.', '-', '+')
if (mnem[strlen(mnem) - 1] == '-' || mnem[strlen(mnem) - 1] == '+' || mnem[strlen(mnem) - 1] == '.')
mnem[strlen(mnem) - 1] = '\0';
- MCInst_setOpcodePub(MI, PPC_map_insn(mnem));
+ if (PPC_alias_insn(mnem, &alias)) {
+ MCInst_setOpcodePub(MI, alias.id);
+ if (MI->csh->detail) {
+ MI->flat_insn->detail->ppc.bc = (ppc_bc)alias.cc;
+ }
+ }
+
cs_mem_free(mnem);
} else
printInstruction(MI, O, NULL);
}
+enum ppc_bc_hint {
+ PPC_BC_LT_MINUS = (0 << 5) | 14,
+ PPC_BC_LE_MINUS = (1 << 5) | 6,
+ PPC_BC_EQ_MINUS = (2 << 5) | 14,
+ PPC_BC_GE_MINUS = (0 << 5) | 6,
+ PPC_BC_GT_MINUS = (1 << 5) | 14,
+ PPC_BC_NE_MINUS = (2 << 5) | 6,
+ PPC_BC_UN_MINUS = (3 << 5) | 14,
+ PPC_BC_NU_MINUS = (3 << 5) | 6,
+ PPC_BC_LT_PLUS = (0 << 5) | 15,
+ PPC_BC_LE_PLUS = (1 << 5) | 7,
+ PPC_BC_EQ_PLUS = (2 << 5) | 15,
+ PPC_BC_GE_PLUS = (0 << 5) | 7,
+ PPC_BC_GT_PLUS = (1 << 5) | 15,
+ PPC_BC_NE_PLUS = (2 << 5) | 7,
+ PPC_BC_UN_PLUS = (3 << 5) | 15,
+ PPC_BC_NU_PLUS = (3 << 5) | 7,
+};
+
+// normalize CC to remove _MINUS & _PLUS
+static int cc_normalize(int cc)
+{
+ switch(cc) {
+ default: return cc;
+ case PPC_BC_LT_MINUS: return PPC_BC_LT;
+ case PPC_BC_LE_MINUS: return PPC_BC_LE;
+ case PPC_BC_EQ_MINUS: return PPC_BC_EQ;
+ case PPC_BC_GE_MINUS: return PPC_BC_GE;
+ case PPC_BC_GT_MINUS: return PPC_BC_GT;
+ case PPC_BC_NE_MINUS: return PPC_BC_NE;
+ case PPC_BC_UN_MINUS: return PPC_BC_UN;
+ case PPC_BC_NU_MINUS: return PPC_BC_NU;
+ case PPC_BC_LT_PLUS : return PPC_BC_LT;
+ case PPC_BC_LE_PLUS : return PPC_BC_LE;
+ case PPC_BC_EQ_PLUS : return PPC_BC_EQ;
+ case PPC_BC_GE_PLUS : return PPC_BC_GE;
+ case PPC_BC_GT_PLUS : return PPC_BC_GT;
+ case PPC_BC_NE_PLUS : return PPC_BC_NE;
+ case PPC_BC_UN_PLUS : return PPC_BC_UN;
+ case PPC_BC_NU_PLUS : return PPC_BC_NU;
+ }
+}
static void printPredicateOperand(MCInst *MI, unsigned OpNo,
SStream *O, const char *Modifier)
{
unsigned Code = (unsigned int)MCOperand_getImm(MCInst_getOperand(MI, OpNo));
- MI->flat_insn->detail->ppc.bc = (ppc_bc)Code;
+ MI->flat_insn->detail->ppc.bc = (ppc_bc)cc_normalize(Code);
if (!strcmp(Modifier, "cc")) {
switch ((ppc_predicate)Code) {
diff --git a/arch/PowerPC/PPCMapping.c b/arch/PowerPC/PPCMapping.c
index 59d71d7..d549101 100644
--- a/arch/PowerPC/PPCMapping.c
+++ b/arch/PowerPC/PPCMapping.c
@@ -491,61 +491,61 @@
#endif
},
{
- PPC_BCC, PPC_INS_B_CC,
+ PPC_BCC, PPC_INS_B,
#ifndef CAPSTONE_DIET
{ 0 }, { 0 }, { 0 }, 1, 0
#endif
},
{
- PPC_BCCA, PPC_INS_BA_CC,
+ PPC_BCCA, PPC_INS_BA,
#ifndef CAPSTONE_DIET
{ 0 }, { 0 }, { 0 }, 1, 0
#endif
},
{
- PPC_BCCCTR, PPC_INS_BCTR_CC,
+ PPC_BCCCTR, PPC_INS_BCTR,
#ifndef CAPSTONE_DIET
{ PPC_REG_CTR, 0 }, { 0 }, { 0 }, 1, 1
#endif
},
{
- PPC_BCCCTR8, PPC_INS_BCTR_CC,
+ PPC_BCCCTR8, PPC_INS_BCTR,
#ifndef CAPSTONE_DIET
{ PPC_REG_CTR8, 0 }, { 0 }, { PPC_GRP_MODE64, 0 }, 1, 1
#endif
},
{
- PPC_BCCCTRL, PPC_INS_BCTRL_CC,
+ PPC_BCCCTRL, PPC_INS_BCTRL,
#ifndef CAPSTONE_DIET
{ PPC_REG_CTR, PPC_REG_RM, 0 }, { PPC_REG_LR, 0 }, { 0 }, 0, 0
#endif
},
{
- PPC_BCCCTRL8, PPC_INS_BCTRL_CC,
+ PPC_BCCCTRL8, PPC_INS_BCTRL,
#ifndef CAPSTONE_DIET
{ PPC_REG_CTR8, PPC_REG_RM, 0 }, { PPC_REG_LR8, 0 }, { PPC_GRP_MODE64, 0 }, 0, 0
#endif
},
{
- PPC_BCCL, PPC_INS_BL_CC,
+ PPC_BCCL, PPC_INS_BL,
#ifndef CAPSTONE_DIET
{ PPC_REG_RM, 0 }, { PPC_REG_LR, 0 }, { 0 }, 0, 0
#endif
},
{
- PPC_BCCLA, PPC_INS_BLA_CC,
+ PPC_BCCLA, PPC_INS_BLA,
#ifndef CAPSTONE_DIET
{ PPC_REG_RM, 0 }, { PPC_REG_LR, 0 }, { 0 }, 0, 0
#endif
},
{
- PPC_BCCLR, PPC_INS_BLR_CC,
+ PPC_BCCLR, PPC_INS_BLR,
#ifndef CAPSTONE_DIET
{ PPC_REG_LR, PPC_REG_RM, 0 }, { 0 }, { 0 }, 1, 0
#endif
},
{
- PPC_BCCLRL, PPC_INS_BLRL_CC,
+ PPC_BCCLRL, PPC_INS_BLRL,
#ifndef CAPSTONE_DIET
{ PPC_REG_LR, PPC_REG_RM, 0 }, { PPC_REG_LR, 0 }, { 0 }, 0, 0
#endif
@@ -7862,19 +7862,6 @@
{ PPC_INS_BDNZFLRL, "bdnzflrl" },
{ PPC_INS_BDZTLRL, "bdztlrl" },
{ PPC_INS_BDZFLRL, "bdzflrl" },
-
- // BccX
- { PPC_INS_B_CC, "b_cc" },
- { PPC_INS_BL_CC, "bl_cc" },
- { PPC_INS_BLA_CC, "bla_cc" },
- { PPC_INS_BLR_CC, "blr_cc" },
- { PPC_INS_BLRL_CC, "blrl_cc" },
- { PPC_INS_BA_CC, "ba_cc" },
- { PPC_INS_BCTR_CC, "bctr_cc" },
- { PPC_INS_BCTRL_CC, "bctrl_cc" },
-
- // alias instructions
- { PPC_INS_BNE, "bne" },
};
// special alias insn
@@ -8001,58 +7988,120 @@
return 0;
}
-static name_map alias_insn_name_maps[] = {
- { PPC_INS_BTA, "bta" },
- { PPC_INS_B, "blt" },
- { PPC_INS_B, "bgt" },
- { PPC_INS_B, "beq" },
- { PPC_INS_B, "bne" },
+static struct ppc_alias alias_insn_name_maps[] = {
+ //{ PPC_INS_BTA, "bta" },
+ { PPC_INS_B, PPC_BC_LT, "blt" },
+ { PPC_INS_B, PPC_BC_LE, "ble" },
+ { PPC_INS_B, PPC_BC_EQ, "beq" },
+ { PPC_INS_B, PPC_BC_GE, "bge" },
+ { PPC_INS_B, PPC_BC_GT, "bgt" },
+ { PPC_INS_B, PPC_BC_NE, "bne" },
+ { PPC_INS_B, PPC_BC_UN, "bun" },
+ { PPC_INS_B, PPC_BC_NU, "bnu" },
+ { PPC_INS_B, PPC_BC_SO, "bso" },
+ { PPC_INS_B, PPC_BC_NS, "bns" },
- { PPC_INS_BA_CC, "blta" },
- { PPC_INS_BA_CC, "bgta" },
- { PPC_INS_BA_CC, "beqa" },
- { PPC_INS_BA_CC, "bnea" },
+ { PPC_INS_BA, PPC_BC_LT, "blta" },
+ { PPC_INS_BA, PPC_BC_LE, "blea" },
+ { PPC_INS_BA, PPC_BC_EQ, "beqa" },
+ { PPC_INS_BA, PPC_BC_GE, "bgea" },
+ { PPC_INS_BA, PPC_BC_GT, "bgta" },
+ { PPC_INS_BA, PPC_BC_NE, "bnea" },
+ { PPC_INS_BA, PPC_BC_UN, "buna" },
+ { PPC_INS_BA, PPC_BC_NU, "bnua" },
+ { PPC_INS_BA, PPC_BC_SO, "bsoa" },
+ { PPC_INS_BA, PPC_BC_NS, "bnsa" },
- { PPC_INS_BCTR_CC, "bltctr" },
- { PPC_INS_BCTR_CC, "bgtctr" },
- { PPC_INS_BCTR_CC, "beqctr" },
- { PPC_INS_BCTR_CC, "bnectr" },
+ { PPC_INS_BCTR, PPC_BC_LT, "bltctr" },
+ { PPC_INS_BCTR, PPC_BC_LE, "blectr" },
+ { PPC_INS_BCTR, PPC_BC_EQ, "beqctr" },
+ { PPC_INS_BCTR, PPC_BC_GE, "bgectr" },
+ { PPC_INS_BCTR, PPC_BC_GT, "bgtctr" },
+ { PPC_INS_BCTR, PPC_BC_NE, "bnectr" },
+ { PPC_INS_BCTR, PPC_BC_UN, "bunctr" },
+ { PPC_INS_BCTR, PPC_BC_NU, "bnuctr" },
+ { PPC_INS_BCTR, PPC_BC_SO, "bsoctr" },
+ { PPC_INS_BCTR, PPC_BC_NS, "bnsctr" },
- { PPC_INS_BCTRL_CC, "bltctrl" },
- { PPC_INS_BCTRL_CC, "bgtctrl" },
- { PPC_INS_BCTRL_CC, "beqctrl" },
- { PPC_INS_BCTRL_CC, "bnectrl" },
+ { PPC_INS_BCTRL, PPC_BC_LT, "bltctrl" },
+ { PPC_INS_BCTRL, PPC_BC_LE, "blectrl" },
+ { PPC_INS_BCTRL, PPC_BC_EQ, "beqctrl" },
+ { PPC_INS_BCTRL, PPC_BC_GE, "bgectrl" },
+ { PPC_INS_BCTRL, PPC_BC_GT, "bgtctrl" },
+ { PPC_INS_BCTRL, PPC_BC_NE, "bnectrl" },
+ { PPC_INS_BCTRL, PPC_BC_UN, "bunctrl" },
+ { PPC_INS_BCTRL, PPC_BC_NU, "bnuctrl" },
+ { PPC_INS_BCTRL, PPC_BC_SO, "bsoctrl" },
+ { PPC_INS_BCTRL, PPC_BC_NS, "bnsctrl" },
- { PPC_INS_BL_CC, "bltl" },
- { PPC_INS_BL_CC, "bgtl" },
- { PPC_INS_BL_CC, "beql" },
- { PPC_INS_BL_CC, "bnel" },
+ { PPC_INS_BL, PPC_BC_LT, "bltl" },
+ { PPC_INS_BL, PPC_BC_LE, "blel" },
+ { PPC_INS_BL, PPC_BC_EQ, "beql" },
+ { PPC_INS_BL, PPC_BC_GE, "bgel" },
+ { PPC_INS_BL, PPC_BC_GT, "bgtl" },
+ { PPC_INS_BL, PPC_BC_NE, "bnel" },
+ { PPC_INS_BL, PPC_BC_UN, "bunl" },
+ { PPC_INS_BL, PPC_BC_NU, "bnul" },
+ { PPC_INS_BL, PPC_BC_SO, "bsol" },
+ { PPC_INS_BL, PPC_BC_NS, "bnsl" },
- { PPC_INS_BLA_CC, "bltla" },
- { PPC_INS_BLA_CC, "bgtla" },
- { PPC_INS_BLA_CC, "beqla" },
- { PPC_INS_BLA_CC, "bnela" },
+ { PPC_INS_BLA, PPC_BC_LT, "bltla" },
+ { PPC_INS_BLA, PPC_BC_LE, "blela" },
+ { PPC_INS_BLA, PPC_BC_EQ, "beqla" },
+ { PPC_INS_BLA, PPC_BC_GE, "bgela" },
+ { PPC_INS_BLA, PPC_BC_GT, "bgtla" },
+ { PPC_INS_BLA, PPC_BC_NE, "bnela" },
+ { PPC_INS_BLA, PPC_BC_UN, "bunla" },
+ { PPC_INS_BLA, PPC_BC_NU, "bnula" },
+ { PPC_INS_BLA, PPC_BC_SO, "bsola" },
+ { PPC_INS_BLA, PPC_BC_NS, "bnsla" },
- { PPC_INS_BLR_CC, "bltlr" },
- { PPC_INS_BLR_CC, "bgtlr" },
- { PPC_INS_BLR_CC, "beqlr" },
- { PPC_INS_BLR_CC, "bnelr" },
+ { PPC_INS_BLR, PPC_BC_LT, "bltlr" },
+ { PPC_INS_BLR, PPC_BC_LE, "blelr" },
+ { PPC_INS_BLR, PPC_BC_EQ, "beqlr" },
+ { PPC_INS_BLR, PPC_BC_GE, "bgelr" },
+ { PPC_INS_BLR, PPC_BC_GT, "bgtlr" },
+ { PPC_INS_BLR, PPC_BC_NE, "bnelr" },
+ { PPC_INS_BLR, PPC_BC_UN, "bunlr" },
+ { PPC_INS_BLR, PPC_BC_NU, "bnulr" },
+ { PPC_INS_BLR, PPC_BC_SO, "bsolr" },
+ { PPC_INS_BLR, PPC_BC_NS, "bnslr" },
- { PPC_INS_BLRL_CC, "bltlrl" },
- { PPC_INS_BLRL_CC, "bgtlrl" },
- { PPC_INS_BLRL_CC, "beqlrl" },
- { PPC_INS_BLRL_CC, "bnelrl" },
+ { PPC_INS_BLRL, PPC_BC_LT, "bltlrl" },
+ { PPC_INS_BLRL, PPC_BC_LE, "blelrl" },
+ { PPC_INS_BLRL, PPC_BC_EQ, "beqlrl" },
+ { PPC_INS_BLRL, PPC_BC_GE, "bgelrl" },
+ { PPC_INS_BLRL, PPC_BC_GT, "bgtlrl" },
+ { PPC_INS_BLRL, PPC_BC_NE, "bnelrl" },
+ { PPC_INS_BLRL, PPC_BC_UN, "bunlrl" },
+ { PPC_INS_BLRL, PPC_BC_NU, "bnulrl" },
+ { PPC_INS_BLRL, PPC_BC_SO, "bsolrl" },
+ { PPC_INS_BLRL, PPC_BC_NS, "bnslrl" },
};
-// map instruction name to public instruction ID
-ppc_reg PPC_map_insn(const char *name)
+
+// given alias mnemonic, return instruction ID & CC
+bool PPC_alias_insn(const char *name, struct ppc_alias *alias)
{
- // NOTE: skip first NULL name in insn_name_maps
- int i = name2id(&insn_name_maps[1], ARR_SIZE(insn_name_maps) - 1, name);
+ int i;
- if (i == -1)
- // try again with 'special' insn that is not available in insn_name_maps
- i = name2id(alias_insn_name_maps, ARR_SIZE(alias_insn_name_maps), name);
+ for(i = 0; i < ARR_SIZE(alias_insn_name_maps); i++) {
+ if (!strcmp(name, alias_insn_name_maps[i].mnem)) {
+ alias->id = alias_insn_name_maps[i].id;
+ alias->cc = alias_insn_name_maps[i].cc;
+ return true;
+ }
+ }
- return (i != -1)? i : PPC_REG_INVALID;
+ // not really an alias insn
+ i = name2id(&insn_name_maps[1], ARR_SIZE(insn_name_maps) - 1, name);
+ if (i) {
+ alias->id = insn_name_maps[i].id;
+ alias->cc = PPC_BC_INVALID;
+ return true;
+ }
+
+ // not found
+ return false;
}
+
#endif
diff --git a/arch/PowerPC/PPCMapping.h b/arch/PowerPC/PPCMapping.h
index 2056f28..66abcf4 100644
--- a/arch/PowerPC/PPCMapping.h
+++ b/arch/PowerPC/PPCMapping.h
@@ -18,7 +18,14 @@
// map internal raw register to 'public' register
ppc_reg PPC_map_register(unsigned int r);
-ppc_reg PPC_map_insn(const char *name);
+struct ppc_alias {
+ unsigned int id; // instruction id
+ int cc; // code condition
+ const char *mnem;
+};
+
+// given alias mnemonic, return instruction ID & CC
+bool PPC_alias_insn(const char *name, struct ppc_alias *alias);
#endif
diff --git a/bindings/java/capstone/Ppc_const.java b/bindings/java/capstone/Ppc_const.java
index 131ea2b..9b4edf9 100644
--- a/bindings/java/capstone/Ppc_const.java
+++ b/bindings/java/capstone/Ppc_const.java
@@ -14,22 +14,8 @@
public static final int PPC_BC_NE = (2<<5)|4;
public static final int PPC_BC_UN = (3<<5)|12;
public static final int PPC_BC_NU = (3<<5)|4;
- public static final int PPC_BC_LT_MINUS = (0<<5)|14;
- public static final int PPC_BC_LE_MINUS = (1<<5)|6;
- public static final int PPC_BC_EQ_MINUS = (2<<5)|14;
- public static final int PPC_BC_GE_MINUS = (0<<5)|6;
- public static final int PPC_BC_GT_MINUS = (1<<5)|14;
- public static final int PPC_BC_NE_MINUS = (2<<5)|6;
- public static final int PPC_BC_UN_MINUS = (3<<5)|14;
- public static final int PPC_BC_NU_MINUS = (3<<5)|6;
- public static final int PPC_BC_LT_PLUS = (0<<5)|15;
- public static final int PPC_BC_LE_PLUS = (1<<5)|7;
- public static final int PPC_BC_EQ_PLUS = (2<<5)|15;
- public static final int PPC_BC_GE_PLUS = (0<<5)|7;
- public static final int PPC_BC_GT_PLUS = (1<<5)|15;
- public static final int PPC_BC_NE_PLUS = (2<<5)|7;
- public static final int PPC_BC_UN_PLUS = (3<<5)|15;
- public static final int PPC_BC_NU_PLUS = (3<<5)|7;
+ public static final int PPC_BC_SO = 4<<5;
+ public static final int PPC_BC_NS = 4<<5;
// PPC branch hint for some branch instructions
@@ -1162,16 +1148,7 @@
public static final int PPC_INS_BDNZFLRL = 931;
public static final int PPC_INS_BDZTLRL = 932;
public static final int PPC_INS_BDZFLRL = 933;
- public static final int PPC_INS_B_CC = 934;
- public static final int PPC_INS_BL_CC = 935;
- public static final int PPC_INS_BLA_CC = 936;
- public static final int PPC_INS_BLR_CC = 937;
- public static final int PPC_INS_BLRL_CC = 938;
- public static final int PPC_INS_BA_CC = 939;
- public static final int PPC_INS_BCTR_CC = 940;
- public static final int PPC_INS_BCTRL_CC = 941;
- public static final int PPC_INS_BNE = 942;
- public static final int PPC_INS_MAX = 943;
+ public static final int PPC_INS_MAX = 934;
// Group of PPC instructions
diff --git a/bindings/python/capstone/ppc_const.py b/bindings/python/capstone/ppc_const.py
index 07dc580..e34b2af 100644
--- a/bindings/python/capstone/ppc_const.py
+++ b/bindings/python/capstone/ppc_const.py
@@ -11,22 +11,8 @@
PPC_BC_NE = (2<<5)|4
PPC_BC_UN = (3<<5)|12
PPC_BC_NU = (3<<5)|4
-PPC_BC_LT_MINUS = (0<<5)|14
-PPC_BC_LE_MINUS = (1<<5)|6
-PPC_BC_EQ_MINUS = (2<<5)|14
-PPC_BC_GE_MINUS = (0<<5)|6
-PPC_BC_GT_MINUS = (1<<5)|14
-PPC_BC_NE_MINUS = (2<<5)|6
-PPC_BC_UN_MINUS = (3<<5)|14
-PPC_BC_NU_MINUS = (3<<5)|6
-PPC_BC_LT_PLUS = (0<<5)|15
-PPC_BC_LE_PLUS = (1<<5)|7
-PPC_BC_EQ_PLUS = (2<<5)|15
-PPC_BC_GE_PLUS = (0<<5)|7
-PPC_BC_GT_PLUS = (1<<5)|15
-PPC_BC_NE_PLUS = (2<<5)|7
-PPC_BC_UN_PLUS = (3<<5)|15
-PPC_BC_NU_PLUS = (3<<5)|7
+PPC_BC_SO = 4<<5
+PPC_BC_NS = 4<<5
# PPC branch hint for some branch instructions
@@ -1159,16 +1145,7 @@
PPC_INS_BDNZFLRL = 931
PPC_INS_BDZTLRL = 932
PPC_INS_BDZFLRL = 933
-PPC_INS_B_CC = 934
-PPC_INS_BL_CC = 935
-PPC_INS_BLA_CC = 936
-PPC_INS_BLR_CC = 937
-PPC_INS_BLRL_CC = 938
-PPC_INS_BA_CC = 939
-PPC_INS_BCTR_CC = 940
-PPC_INS_BCTRL_CC = 941
-PPC_INS_BNE = 942
-PPC_INS_MAX = 943
+PPC_INS_MAX = 934
# Group of PPC instructions
diff --git a/include/ppc.h b/include/ppc.h
index ade1c61..ef77ea9 100644
--- a/include/ppc.h
+++ b/include/ppc.h
@@ -26,22 +26,10 @@
PPC_BC_NE = (2 << 5) | 4,
PPC_BC_UN = (3 << 5) | 12,
PPC_BC_NU = (3 << 5) | 4,
- PPC_BC_LT_MINUS = (0 << 5) | 14,
- PPC_BC_LE_MINUS = (1 << 5) | 6,
- PPC_BC_EQ_MINUS = (2 << 5) | 14,
- PPC_BC_GE_MINUS = (0 << 5) | 6,
- PPC_BC_GT_MINUS = (1 << 5) | 14,
- PPC_BC_NE_MINUS = (2 << 5) | 6,
- PPC_BC_UN_MINUS = (3 << 5) | 14,
- PPC_BC_NU_MINUS = (3 << 5) | 6,
- PPC_BC_LT_PLUS = (0 << 5) | 15,
- PPC_BC_LE_PLUS = (1 << 5) | 7,
- PPC_BC_EQ_PLUS = (2 << 5) | 15,
- PPC_BC_GE_PLUS = (0 << 5) | 7,
- PPC_BC_GT_PLUS = (1 << 5) | 15,
- PPC_BC_NE_PLUS = (2 << 5) | 7,
- PPC_BC_UN_PLUS = (3 << 5) | 15,
- PPC_BC_NU_PLUS = (3 << 5) | 7
+
+ // extra conditions
+ PPC_BC_SO = 4 << 5, // summary overflow
+ PPC_BC_NS = 4 << 5, // not summary overflow
} ppc_bc;
//> PPC branch hint for some branch instructions
@@ -1221,19 +1209,6 @@
PPC_INS_BDZTLRL,
PPC_INS_BDZFLRL,
- // branch CC instruction
- PPC_INS_B_CC, // Bcc
- PPC_INS_BL_CC, // BccL
- PPC_INS_BLA_CC, // BccLA
- PPC_INS_BLR_CC, // BccLR
- PPC_INS_BLRL_CC, // BccLRL
- PPC_INS_BA_CC, // BccA
- PPC_INS_BCTR_CC, // BccCTR
- PPC_INS_BCTRL_CC, // BccCTRL
-
- // alias instructions
- PPC_INS_BNE,
-
PPC_INS_MAX, // <-- mark the end of the list of instructions
} ppc_insn;
diff --git a/tests/test_detail.c b/tests/test_detail.c
index 5509357..22f04c7 100644
--- a/tests/test_detail.c
+++ b/tests/test_detail.c
@@ -54,7 +54,7 @@
#define ARM64_CODE "\x09\x00\x38\xd5\xbf\x40\x00\xd5\x0c\x05\x13\xd5\x20\x50\x02\x0e\x20\xe4\x3d\x0f\x00\x18\xa0\x5f\xa2\x00\xae\x9e\x9f\x37\x03\xd5\xbf\x33\x03\xd5\xdf\x3f\x03\xd5\x21\x7c\x02\x9b\x21\x7c\x00\x53\x00\x40\x21\x4b\xe1\x0b\x40\xb9\x20\x04\x81\xda\x20\x08\x02\x8b\x10\x5b\xe8\x3c"
//#define THUMB_CODE "\x0a\xbf" // itet eq
//#define X86_CODE32 "\x77\x04" // ja +6
-#define PPC_CODE "\x80\x20\x00\x00\x80\x3f\x00\x00\x10\x43\x23\x0e\xd0\x44\x00\x80\x4c\x43\x22\x02\x2d\x03\x00\x80\x7c\x43\x20\x14\x7c\x43\x20\x93\x4f\x20\x00\x21\x4c\xc8\x00\x21"
+#define PPC_CODE "\x80\x20\x00\x00\x80\x3f\x00\x00\x10\x43\x23\x0e\xd0\x44\x00\x80\x4c\x43\x22\x02\x2d\x03\x00\x80\x7c\x43\x20\x14\x7c\x43\x20\x93\x4f\x20\x00\x21\x4c\xc8\x00\x21\x40\x82\x00\x14"
#define SPARC_CODE "\x80\xa0\x40\x02\x85\xc2\x60\x08\x85\xe8\x20\x01\x81\xe8\x00\x00\x90\x10\x20\x01\xd5\xf6\x10\x16\x21\x00\x00\x0a\x86\x00\x40\x02\x01\x00\x00\x00\x12\xbf\xff\xff\x10\xbf\xff\xff\xa0\x02\x00\x09\x0d\xbf\xff\xff\xd4\x20\x60\x00\xd4\x4e\x00\x16\x2a\xc2\x80\x03"
#define SPARCV9_CODE "\x81\xa8\x0a\x24\x89\xa0\x10\x20\x89\xa0\x1a\x60\x89\xa0\x00\xe0"
#define SYSZ_CODE "\xed\x00\x00\x00\x00\x1a\x5a\x0f\x1f\xff\xc2\x09\x80\x00\x00\x00\x07\xf7\xeb\x2a\xff\xff\x7f\x57\xe3\x01\xff\xff\x7f\x57\xeb\x00\xf0\x00\x00\x24\xb2\x4f\x00\x78"
diff --git a/tests/test_ppc.c b/tests/test_ppc.c
index f4575bb..07c6456 100644
--- a/tests/test_ppc.c
+++ b/tests/test_ppc.c
@@ -78,7 +78,7 @@
static void test()
{
-#define PPC_CODE "\x80\x20\x00\x00\x80\x3f\x00\x00\x10\x43\x23\x0e\xd0\x44\x00\x80\x4c\x43\x22\x02\x2d\x03\x00\x80\x7c\x43\x20\x14\x7c\x43\x20\x93\x4f\x20\x00\x21\x4c\xc8\x00\x21"
+#define PPC_CODE "\x80\x20\x00\x00\x80\x3f\x00\x00\x10\x43\x23\x0e\xd0\x44\x00\x80\x4c\x43\x22\x02\x2d\x03\x00\x80\x7c\x43\x20\x14\x7c\x43\x20\x93\x4f\x20\x00\x21\x4c\xc8\x00\x21\x40\x82\x00\x14"
struct platform platforms[] = {
{