Change AArch64 GRP_JUMP to use a static table implementation
Added support for GRP_CALL and GRP_RETURN to AArch64
diff --git a/arch/AArch64/AArch64Mapping.c b/arch/AArch64/AArch64Mapping.c
index b5eed13..b31c958 100644
--- a/arch/AArch64/AArch64Mapping.c
+++ b/arch/AArch64/AArch64Mapping.c
@@ -332,12 +332,6 @@
 			insn->detail->groups_count = (uint8_t)count_positive(insns[i].groups);
 
 			insn->detail->arm64.update_flags = cs_reg_write((csh)&handle, insn, ARM64_REG_NZCV);
-
-			if (insns[i].branch || insns[i].indirect_branch) {
-				// this insn also belongs to JUMP group. add JUMP group
-				insn->detail->groups[insn->detail->groups_count] = ARM64_GRP_JUMP;
-				insn->detail->groups_count++;
-			}
 #endif
 		}
 	}
@@ -844,6 +838,8 @@
 	// generic groups
 	{ ARM64_GRP_INVALID, NULL },
 	{ ARM64_GRP_JUMP, "jump" },
+	{ ARM64_GRP_CALL, "call" },
+	{ ARM64_GRP_RET, "return" },
 
 	// architecture-specific groups
 	{ ARM64_GRP_CRYPTO, "crypto" },
@@ -858,12 +854,12 @@
 {
 #ifndef CAPSTONE_DIET
 	// verify group id
-	if (id >= ARM64_GRP_ENDING || (id > ARM64_GRP_JUMP && id < ARM64_GRP_CRYPTO))
+	if (id >= ARM64_GRP_ENDING || (id > ARM64_GRP_RET && id < ARM64_GRP_CRYPTO))
 		return NULL;
 
 	// NOTE: when new generic groups are added, 2 must be changed accordingly
 	if (id >= 128)
-		return group_name_maps[id - 128 + 2].name;
+		return group_name_maps[id - 128 + 4].name;
 	else
 		return group_name_maps[id].name;
 #else
diff --git a/arch/AArch64/AArch64MappingInsn.inc b/arch/AArch64/AArch64MappingInsn.inc
index f7acc95..bb6b15a 100644
--- a/arch/AArch64/AArch64MappingInsn.inc
+++ b/arch/AArch64/AArch64MappingInsn.inc
@@ -430,7 +430,7 @@
 {
 	AArch64_B, ARM64_INS_B,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
@@ -532,19 +532,19 @@
 {
 	AArch64_BL, ARM64_INS_BL,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { ARM64_REG_LR, 0 }, { 0 }, 0, 0
+	{ 0 }, { ARM64_REG_LR, 0 }, { ARM64_GRP_CALL, 0 }, 0, 0
 #endif
 },
 {
 	AArch64_BLR, ARM64_INS_BLR,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { ARM64_REG_LR, 0 }, { 0 }, 0, 0
+	{ 0 }, { ARM64_REG_LR, 0 }, { ARM64_GRP_CALL, 0 }, 0, 0
 #endif
 },
 {
 	AArch64_BR, ARM64_INS_BR,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 1
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 1
 #endif
 },
 {
@@ -568,31 +568,31 @@
 {
 	AArch64_Bcc, ARM64_INS_B,
 #ifndef CAPSTONE_DIET
-	{ ARM64_REG_NZCV, 0 }, { 0 }, { 0 }, 1, 0
+	{ ARM64_REG_NZCV, 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
 	AArch64_CBNZW, ARM64_INS_CBNZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
 	AArch64_CBNZX, ARM64_INS_CBNZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
 	AArch64_CBZW, ARM64_INS_CBZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
 	AArch64_CBZX, ARM64_INS_CBZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
@@ -6832,7 +6832,7 @@
 {
 	AArch64_RET, ARM64_INS_RET,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 0, 0
+	{ 0 }, { 0 }, { ARM64_GRP_RET, 0 }, 0, 0
 #endif
 },
 {
@@ -11632,13 +11632,13 @@
 {
 	AArch64_TBNZW, ARM64_INS_TBNZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
 	AArch64_TBNZX, ARM64_INS_TBNZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
@@ -11692,13 +11692,13 @@
 {
 	AArch64_TBZW, ARM64_INS_TBZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
 	AArch64_TBZX, ARM64_INS_TBZ,
 #ifndef CAPSTONE_DIET
-	{ 0 }, { 0 }, { 0 }, 1, 0
+	{ 0 }, { 0 }, { ARM64_GRP_JUMP, 0 }, 1, 0
 #endif
 },
 {
diff --git a/include/capstone/arm64.h b/include/capstone/arm64.h
index 5854a94..9acff2b 100644
--- a/include/capstone/arm64.h
+++ b/include/capstone/arm64.h
@@ -1134,6 +1134,8 @@
 	//> Generic groups
 	// all jump instructions (conditional+direct+indirect jumps)
 	ARM64_GRP_JUMP,	// = CS_GRP_JUMP
+	ARM64_GRP_CALL,
+	ARM64_GRP_RET,
 	ARM64_GRP_PRIVILEGE = 6, // = CS_GRP_PRIVILEGE
 
 	//> Architecture-specific groups