arm: no longer rely on information from @groups to verify relative instructions
diff --git a/arch/ARM/ARMInstPrinter.c b/arch/ARM/ARMInstPrinter.c
index bfcce01..0be00ef 100644
--- a/arch/ARM/ARMInstPrinter.c
+++ b/arch/ARM/ARMInstPrinter.c
@@ -556,7 +556,6 @@
 		}
 	} else if (MCOperand_isImm(Op)) {
 		SStream_concat(O, markup("<imm:"));
-		//O << "#" << formatImm(Op.getImm());
 		int32_t imm = (int32_t)MCOperand_getImm(Op);
 
 		// relative branch only has relative offset, so we have to update it
@@ -1475,7 +1474,6 @@
 
 static void printThumbS4ImmOperand(MCInst *MI, unsigned OpNum, SStream *O)
 {
-	//<< "#" << formatImm(MI->getOperand(OpNum).getImm() * 4)
 	unsigned tmp = (unsigned int)MCOperand_getImm(MCInst_getOperand(MI, OpNum)) * 4;
 	if (tmp > HEX_THRESHOLD)
 		SStream_concat(O, "%s#0x%x", markup("<imm:"), tmp);
@@ -1492,7 +1490,6 @@
 static void printThumbSRImm(MCInst *MI, unsigned OpNum, SStream *O)
 {
 	unsigned Imm = (unsigned int)MCOperand_getImm(MCInst_getOperand(MI, OpNum));
-	//  << "#" << formatImm((Imm == 0 ? 32 : Imm))
 	unsigned tmp = Imm == 0 ? 32 : Imm;
 	if (tmp > HEX_THRESHOLD)
 		SStream_concat(O, "%s#0x%x", markup("<imm:"), tmp);
@@ -1764,8 +1761,6 @@
 	if (MCOperand_getImm(MO2)) {
 		SStream_concat(O, ", ");
 		SStream_concat(O, markup("<imm:"));
-		//<< "#" << 
-		// formatImm(MCOperand_getImm(MO2.getImm() * 4)
 		unsigned tmp = (unsigned int)MCOperand_getImm(MO2) * 4;
 		if (tmp > HEX_THRESHOLD)
 			SStream_concat(O, "#0x%x", tmp);
diff --git a/arch/ARM/ARMMapping.c b/arch/ARM/ARMMapping.c
index 9490714..12ec4c3 100644
--- a/arch/ARM/ARMMapping.c
+++ b/arch/ARM/ARMMapping.c
@@ -13601,18 +13601,28 @@
 #endif
 }
 
+// list all relative branch instructions
+// ie: insns[i].branch && !insns[i].indirect_branch
+static unsigned int insn_rel[] = {
+	ARM_Bcc,
+	ARM_t2B,
+	ARM_t2Bcc,
+	ARM_tB,
+	ARM_tBcc,
+	ARM_tCBNZ,
+	ARM_tCBZ,
+	0
+};
+
+// check if this insn is relative branch
 bool ARM_rel_branch(cs_struct *h, unsigned int id)
 {
-#ifndef CAPSTONE_DIET
-	int i = insn_find(insns, ARR_SIZE(insns), id, &h->insn_cache);
-	if (i != 0)
-		return (insns[i].branch && !insns[i].indirect_branch);
-	else {
-		printf("ALERT: rel_branch() got incorrect id!\n");
-		return false;
-	}
-#else
-	printf("ALERT: rel_branch() got incorrect id!\n");
+	int i;
+
+	for (i = 0; insn_rel[i]; i++)
+		if (id == insn_rel[i])
+			return true;
+
+	// not found
 	return false;
-#endif
 }