add new API cs_group_name() to return group name in string, given the group id
diff --git a/arch/AArch64/AArch64Mapping.c b/arch/AArch64/AArch64Mapping.c
index 411f775..765af53 100644
--- a/arch/AArch64/AArch64Mapping.c
+++ b/arch/AArch64/AArch64Mapping.c
@@ -17034,6 +17034,29 @@
 #endif
 }
 
+#ifndef CAPSTONE_DIET
+static name_map group_name_maps[] = {
+	{ ARM64_GRP_INVALID, NULL },
+	{ ARM64_GRP_CRYPTO, "crypto" },
+	{ ARM64_GRP_FPARMV8, "fparmv8" },
+	{ ARM64_GRP_NEON, "neon" },
+
+	{ ARM64_GRP_JUMP, "jump" },
+};
+#endif
+
+const char *AArch64_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= ARM64_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 // map instruction name to public instruction ID
 arm64_reg AArch64_map_insn(const char *name)
 {
diff --git a/arch/AArch64/AArch64Mapping.h b/arch/AArch64/AArch64Mapping.h
index 2bbdd35..1aaf31f 100644
--- a/arch/AArch64/AArch64Mapping.h
+++ b/arch/AArch64/AArch64Mapping.h
@@ -14,6 +14,8 @@
 
 const char *AArch64_insn_name(csh handle, unsigned int id);
 
+const char *AArch64_group_name(csh handle, unsigned int id);
+
 // map instruction name to public instruction ID
 arm64_reg AArch64_map_insn(const char *name);
 
diff --git a/arch/AArch64/AArch64Module.c b/arch/AArch64/AArch64Module.c
index 22d0fd8..f7fa97f 100644
--- a/arch/AArch64/AArch64Module.c
+++ b/arch/AArch64/AArch64Module.c
@@ -27,6 +27,7 @@
 	ud->reg_name = AArch64_reg_name;
 	ud->insn_id = AArch64_get_insn_id;
 	ud->insn_name = AArch64_insn_name;
+	ud->group_name = AArch64_group_name;
 	ud->post_printer = AArch64_post_printer;
 
 	return CS_ERR_OK;
diff --git a/arch/ARM/ARMMapping.c b/arch/ARM/ARMMapping.c
index 479e313..6497005 100644
--- a/arch/ARM/ARMMapping.c
+++ b/arch/ARM/ARMMapping.c
@@ -13888,6 +13888,57 @@
 #endif
 }
 
+#ifndef CAPSTONE_DIET
+static name_map group_name_maps[] = {
+	{ ARM_GRP_INVALID, NULL },
+	{ ARM_GRP_CRYPTO, "crypto" },
+	{ ARM_GRP_DATABARRIER, "databarrier" },
+	{ ARM_GRP_DIVIDE, "divide" },
+	{ ARM_GRP_FPARMV8, "fparmv8" },
+	{ ARM_GRP_MULTPRO, "multpro" },
+	{ ARM_GRP_NEON, "neon" },
+	{ ARM_GRP_T2EXTRACTPACK, "T2EXTRACTPACK" },
+	{ ARM_GRP_THUMB2DSP, "THUMB2DSP" },
+	{ ARM_GRP_TRUSTZONE, "TRUSTZONE" },
+	{ ARM_GRP_V4T, "v4t" },
+	{ ARM_GRP_V5T, "v5t" },
+	{ ARM_GRP_V5TE, "v5te" },
+	{ ARM_GRP_V6, "v6" },
+	{ ARM_GRP_V6T2, "v6t2" },
+	{ ARM_GRP_V7, "v7" },
+	{ ARM_GRP_V8, "v8" },
+	{ ARM_GRP_VFP2, "vfp2" },
+	{ ARM_GRP_VFP3, "vfp3" },
+	{ ARM_GRP_VFP4, "vfp4" },
+	{ ARM_GRP_ARM, "arm" },
+	{ ARM_GRP_MCLASS, "mclass" },
+	{ ARM_GRP_NOTMCLASS, "notmclass" },
+	{ ARM_GRP_THUMB, "thumb" },
+	{ ARM_GRP_THUMB1ONLY, "thumb1only" },
+	{ ARM_GRP_THUMB2, "thumb2" },
+	{ ARM_GRP_PREV8, "prev8" },
+	{ ARM_GRP_FPVMLX, "fpvmlx" },
+	{ ARM_GRP_MULOPS, "mulops" },
+	{ ARM_GRP_CRC, "crc" },
+	{ ARM_GRP_DPVFP, "dpvfp" },
+	{ ARM_GRP_V6M, "v6m" },
+
+	{ ARM_GRP_JUMP,	"jump" }
+};
+#endif
+
+const char *ARM_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= ARM_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 // list all relative branch instructions
 // ie: insns[i].branch && !insns[i].indirect_branch
 static unsigned int insn_rel[] = {
diff --git a/arch/ARM/ARMMapping.h b/arch/ARM/ARMMapping.h
index 7553e06..69d9b15 100644
--- a/arch/ARM/ARMMapping.h
+++ b/arch/ARM/ARMMapping.h
@@ -15,6 +15,8 @@
 
 const char *ARM_insn_name(csh handle, unsigned int id);
 
+const char *ARM_group_name(csh handle, unsigned int id);
+
 // check if this insn is relative branch
 bool ARM_rel_branch(cs_struct *h, unsigned int insn_id);
 
diff --git a/arch/ARM/ARMModule.c b/arch/ARM/ARMModule.c
index 5c1a6d9..d859c83 100644
--- a/arch/ARM/ARMModule.c
+++ b/arch/ARM/ARMModule.c
@@ -28,6 +28,7 @@
 	ud->reg_name = ARM_reg_name;
 	ud->insn_id = ARM_get_insn_id;
 	ud->insn_name = ARM_insn_name;
+	ud->group_name = ARM_group_name;
 	ud->post_printer = ARM_post_printer;
 
 	if (ud->mode & CS_MODE_THUMB)
diff --git a/arch/Mips/MipsMapping.c b/arch/Mips/MipsMapping.c
index eda3362..b0b8648 100644
--- a/arch/Mips/MipsMapping.c
+++ b/arch/Mips/MipsMapping.c
@@ -8422,6 +8422,44 @@
 #endif
 }
 
+#ifndef CAPSTONE_DIET
+static name_map group_name_maps[] = {
+	{ MIPS_GRP_INVALID, NULL },
+	{ MIPS_GRP_BITCOUNT, "bitcount" },
+	{ MIPS_GRP_DSP, "dsp" },
+	{ MIPS_GRP_DSPR2, "dspr2" },
+	{ MIPS_GRP_FPIDX, "fpidx" },
+	{ MIPS_GRP_MSA, "msa" },
+	{ MIPS_GRP_MIPS32R2, "mips32r2" },
+	{ MIPS_GRP_MIPS64, "mips64" },
+	{ MIPS_GRP_MIPS64R2, "mips64r2" },
+	{ MIPS_GRP_SEINREG, "seinreg" },
+	{ MIPS_GRP_STDENC, "stdenc" },
+	{ MIPS_GRP_SWAP, "swap" },
+	{ MIPS_GRP_MICROMIPS, "micromips" },
+	{ MIPS_GRP_MIPS16MODE, "mips16mode" },
+	{ MIPS_GRP_FP64BIT, "fp64bit" },
+	{ MIPS_GRP_NONANSFPMATH, "nonansfpmath" },
+	{ MIPS_GRP_NOTFP64BIT, "notfp64bit" },
+	{ MIPS_GRP_NOTINMICROMIPS, "notinmicromips" },
+	{ MIPS_GRP_NOTNACL, "notnacl" },
+
+	{ MIPS_GRP_JUMP, "jump" }
+};
+#endif
+
+const char *Mips_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= MIPS_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 mips_reg Mips_map_insn(const char *name)
 {
 	// handle special alias first
diff --git a/arch/Mips/MipsMapping.h b/arch/Mips/MipsMapping.h
index 9365c55..f6d4b4f 100644
--- a/arch/Mips/MipsMapping.h
+++ b/arch/Mips/MipsMapping.h
@@ -12,9 +12,10 @@
 // given internal insn id, return public instruction info
 void Mips_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id);
 
-// given public insn id, return internal insn id
 const char *Mips_insn_name(csh handle, unsigned int id);
 
+const char *Mips_group_name(csh handle, unsigned int id);
+
 // map instruction name to instruction ID
 mips_reg Mips_map_insn(const char *name);
 
diff --git a/arch/Mips/MipsModule.c b/arch/Mips/MipsModule.c
index 42316f3..4686799 100644
--- a/arch/Mips/MipsModule.c
+++ b/arch/Mips/MipsModule.c
@@ -27,6 +27,7 @@
 	ud->reg_name = Mips_reg_name;
 	ud->insn_id = Mips_get_insn_id;
 	ud->insn_name = Mips_insn_name;
+	ud->group_name = Mips_group_name;
 
 	if (ud->mode & CS_MODE_32)
 		ud->disasm = Mips_getInstruction;
diff --git a/arch/PowerPC/PPCMapping.c b/arch/PowerPC/PPCMapping.c
index 7611bf1..2d34aa0 100644
--- a/arch/PowerPC/PPCMapping.c
+++ b/arch/PowerPC/PPCMapping.c
@@ -5177,6 +5177,31 @@
 #endif
 }
 
+#ifndef CAPSTONE_DIET
+static name_map group_name_maps[] = {
+	{ PPC_GRP_INVALID, NULL },
+	{ PPC_GRP_ALTIVEC, "altivec" },
+	{ PPC_GRP_MODE32, "mode32" },
+	{ PPC_GRP_MODE64, "mode64" },
+	{ PPC_GRP_BOOKE, "booke" },
+	{ PPC_GRP_NOTBOOKE, "notbooke" },
+
+	{ PPC_GRP_JUMP,	"jump" },
+};
+#endif
+
+const char *PPC_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= PPC_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 // map internal raw register to 'public' register
 ppc_reg PPC_map_register(unsigned int r)
 {
diff --git a/arch/PowerPC/PPCMapping.h b/arch/PowerPC/PPCMapping.h
index c821628..01c6583 100644
--- a/arch/PowerPC/PPCMapping.h
+++ b/arch/PowerPC/PPCMapping.h
@@ -13,6 +13,7 @@
 void PPC_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id);
 
 const char *PPC_insn_name(csh handle, unsigned int id);
+const char *PPC_group_name(csh handle, unsigned int id);
 
 // map internal raw register to 'public' register
 ppc_reg PPC_map_register(unsigned int r);
diff --git a/arch/PowerPC/PPCModule.c b/arch/PowerPC/PPCModule.c
index 88a7fe8..d456468 100644
--- a/arch/PowerPC/PPCModule.c
+++ b/arch/PowerPC/PPCModule.c
@@ -30,6 +30,7 @@
 	ud->reg_name = PPC_reg_name;
 	ud->insn_id = PPC_get_insn_id;
 	ud->insn_name = PPC_insn_name;
+	ud->group_name = PPC_group_name;
 
 	return CS_ERR_OK;
 }
diff --git a/arch/Sparc/SparcMapping.c b/arch/Sparc/SparcMapping.c
index fdd9384..47e992a 100644
--- a/arch/Sparc/SparcMapping.c
+++ b/arch/Sparc/SparcMapping.c
@@ -3140,6 +3140,33 @@
 #endif
 }
 
+#ifndef CAPSTONE_DIET
+static name_map group_name_maps[] = {
+	{ SPARC_GRP_INVALID, NULL },
+	{ SPARC_GRP_HARDQUAD, "hardquad" },
+	{ SPARC_GRP_V9, "v9" },
+	{ SPARC_GRP_VIS, "vis" },
+	{ SPARC_GRP_VIS2, "vis2" },
+	{ SPARC_GRP_VIS3,  "vis3" },
+	{ SPARC_GRP_32BIT, "32bit" },
+	{ SPARC_GRP_64BIT, "64bit" },
+
+	{ SPARC_GRP_JUMP, "jump" },
+};
+#endif
+
+const char *Sparc_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= SPARC_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 // map internal raw register to 'public' register
 sparc_reg Sparc_map_register(unsigned int r)
 {
diff --git a/arch/Sparc/SparcMapping.h b/arch/Sparc/SparcMapping.h
index 9db678a..216189a 100644
--- a/arch/Sparc/SparcMapping.h
+++ b/arch/Sparc/SparcMapping.h
@@ -14,6 +14,8 @@
 
 const char *Sparc_insn_name(csh handle, unsigned int id);
 
+const char *Sparc_group_name(csh handle, unsigned int id);
+
 // map internal raw register to 'public' register
 sparc_reg Sparc_map_register(unsigned int r);
 
diff --git a/arch/Sparc/SparcModule.c b/arch/Sparc/SparcModule.c
index a1dc05e..a44c4bc 100644
--- a/arch/Sparc/SparcModule.c
+++ b/arch/Sparc/SparcModule.c
@@ -29,6 +29,7 @@
 	ud->reg_name = Sparc_reg_name;
 	ud->insn_id = Sparc_get_insn_id;
 	ud->insn_name = Sparc_insn_name;
+	ud->group_name = Sparc_group_name;
 
 	return CS_ERR_OK;
 }
diff --git a/arch/SystemZ/SystemZMapping.c b/arch/SystemZ/SystemZMapping.c
index c8e44a6..903f148 100644
--- a/arch/SystemZ/SystemZMapping.c
+++ b/arch/SystemZ/SystemZMapping.c
@@ -144,7 +144,7 @@
 	{
 		SystemZ_AGHIK, SYSZ_INS_AGHIK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -156,7 +156,7 @@
 	{
 		SystemZ_AGRK, SYSZ_INS_AGRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -180,7 +180,7 @@
 	{
 		SystemZ_AHIK, SYSZ_INS_AHIK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -192,7 +192,7 @@
 	{
 		SystemZ_AIH, SYSZ_INS_AIH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -258,7 +258,7 @@
 	{
 		SystemZ_ALGHSIK, SYSZ_INS_ALGHSIK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -270,13 +270,13 @@
 	{
 		SystemZ_ALGRK, SYSZ_INS_ALGRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_ALHSIK, SYSZ_INS_ALHSIK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -288,7 +288,7 @@
 	{
 		SystemZ_ALRK, SYSZ_INS_ALRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -306,7 +306,7 @@
 	{
 		SystemZ_ARK, SYSZ_INS_ARK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -414,37 +414,37 @@
 	{
 		SystemZ_AsmELOC, SYSZ_INS_LOCE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmELOCG, SYSZ_INS_LOCGE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmELOCGR, SYSZ_INS_LOCGRE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmELOCR, SYSZ_INS_LOCRE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmESTOC, SYSZ_INS_STOCE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmESTOCG, SYSZ_INS_STOCGE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -474,37 +474,37 @@
 	{
 		SystemZ_AsmHELOC, SYSZ_INS_LOCHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHELOCG, SYSZ_INS_LOCGHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHELOCGR, SYSZ_INS_LOCGRHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHELOCR, SYSZ_INS_LOCRHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHESTOC, SYSZ_INS_STOCHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHESTOCG, SYSZ_INS_STOCGHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -522,37 +522,37 @@
 	{
 		SystemZ_AsmHLOC, SYSZ_INS_LOCH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHLOCG, SYSZ_INS_LOCGH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHLOCGR, SYSZ_INS_LOCGRH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHLOCR, SYSZ_INS_LOCRH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHSTOC, SYSZ_INS_STOCH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmHSTOCG, SYSZ_INS_STOCGH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1158,37 +1158,37 @@
 	{
 		SystemZ_AsmLELOC, SYSZ_INS_LOCLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLELOCG, SYSZ_INS_LOCGLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLELOCGR, SYSZ_INS_LOCGRLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLELOCR, SYSZ_INS_LOCRLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLESTOC, SYSZ_INS_STOCLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLESTOCG, SYSZ_INS_STOCGLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1212,37 +1212,37 @@
 	{
 		SystemZ_AsmLHLOC, SYSZ_INS_LOCLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLHLOCG, SYSZ_INS_LOCGLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLHLOCGR, SYSZ_INS_LOCGRLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLHLOCR, SYSZ_INS_LOCRLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLHSTOC, SYSZ_INS_STOCLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLHSTOCG, SYSZ_INS_STOCGLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1260,61 +1260,61 @@
 	{
 		SystemZ_AsmLLOC, SYSZ_INS_LOCL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLLOCG, SYSZ_INS_LOCGL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLLOCGR, SYSZ_INS_LOCGRL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLLOCR, SYSZ_INS_LOCRL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLOC, SYSZ_INS_LOC,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLOCG, SYSZ_INS_LOCG,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLOCGR, SYSZ_INS_LOCGR,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLOCR, SYSZ_INS_LOCR,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLSTOC, SYSZ_INS_STOCL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmLSTOCG, SYSZ_INS_STOCGL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1338,37 +1338,37 @@
 	{
 		SystemZ_AsmNELOC, SYSZ_INS_LOCNE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNELOCG, SYSZ_INS_LOCGNE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNELOCGR, SYSZ_INS_LOCGRNE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNELOCR, SYSZ_INS_LOCRNE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNESTOC, SYSZ_INS_STOCNE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNESTOCG, SYSZ_INS_STOCGNE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1398,37 +1398,37 @@
 	{
 		SystemZ_AsmNHELOC, SYSZ_INS_LOCNHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHELOCG, SYSZ_INS_LOCGNHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHELOCGR, SYSZ_INS_LOCGRNHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHELOCR, SYSZ_INS_LOCRNHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHESTOC, SYSZ_INS_STOCNHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHESTOCG, SYSZ_INS_STOCGNHE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1446,37 +1446,37 @@
 	{
 		SystemZ_AsmNHLOC, SYSZ_INS_LOCNH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHLOCG, SYSZ_INS_LOCGNH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHLOCGR, SYSZ_INS_LOCGRNH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHLOCR, SYSZ_INS_LOCRNH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHSTOC, SYSZ_INS_STOCNH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNHSTOCG, SYSZ_INS_STOCGNH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1506,37 +1506,37 @@
 	{
 		SystemZ_AsmNLELOC, SYSZ_INS_LOCNLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLELOCG, SYSZ_INS_LOCGNLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLELOCGR, SYSZ_INS_LOCGRNLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLELOCR, SYSZ_INS_LOCRNLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLESTOC, SYSZ_INS_STOCNLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLESTOCG, SYSZ_INS_STOCGNLE,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1560,37 +1560,37 @@
 	{
 		SystemZ_AsmNLHLOC, SYSZ_INS_LOCNLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLHLOCG, SYSZ_INS_LOCGNLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLHLOCGR, SYSZ_INS_LOCGRNLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLHLOCR, SYSZ_INS_LOCRNLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLHSTOC, SYSZ_INS_STOCNLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLHSTOCG, SYSZ_INS_STOCGNLH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1608,37 +1608,37 @@
 	{
 		SystemZ_AsmNLLOC, SYSZ_INS_LOCNL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLLOCG, SYSZ_INS_LOCGNL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLLOCGR, SYSZ_INS_LOCGRNL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLLOCR, SYSZ_INS_LOCRNL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLSTOC, SYSZ_INS_STOCNL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNLSTOCG, SYSZ_INS_STOCGNL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1662,37 +1662,37 @@
 	{
 		SystemZ_AsmNOLOC, SYSZ_INS_LOCNO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNOLOCG, SYSZ_INS_LOCGNO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNOLOCGR, SYSZ_INS_LOCGRNO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNOLOCR, SYSZ_INS_LOCRNO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNOSTOC, SYSZ_INS_STOCNO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmNOSTOCG, SYSZ_INS_STOCGNO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1716,49 +1716,49 @@
 	{
 		SystemZ_AsmOLOC, SYSZ_INS_LOCO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmOLOCG, SYSZ_INS_LOCGO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmOLOCGR, SYSZ_INS_LOCGRO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmOLOCR, SYSZ_INS_LOCRO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmOSTOC, SYSZ_INS_STOCO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmOSTOCG, SYSZ_INS_STOCGO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmSTOC, SYSZ_INS_STOC,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_AsmSTOCG, SYSZ_INS_STOCG,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1842,13 +1842,13 @@
 	{
 		SystemZ_CDLFBR, SYSZ_INS_CDLFBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_CDLGBR, SYSZ_INS_CDLGBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -1878,13 +1878,13 @@
 	{
 		SystemZ_CELFBR, SYSZ_INS_CELFBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_CELGBR, SYSZ_INS_CELGBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2016,7 +2016,7 @@
 	{
 		SystemZ_CHF, SYSZ_INS_CHF,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2052,7 +2052,7 @@
 	{
 		SystemZ_CIH, SYSZ_INS_CIH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2076,13 +2076,13 @@
 	{
 		SystemZ_CLFDBR, SYSZ_INS_CLFDBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_CLFEBR, SYSZ_INS_CLFEBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2100,7 +2100,7 @@
 	{
 		SystemZ_CLFXBR, SYSZ_INS_CLFXBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2112,13 +2112,13 @@
 	{
 		SystemZ_CLGDBR, SYSZ_INS_CLGDBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_CLGEBR, SYSZ_INS_CLGEBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2184,13 +2184,13 @@
 	{
 		SystemZ_CLGXBR, SYSZ_INS_CLGXBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_CLHF, SYSZ_INS_CLHF,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2214,7 +2214,7 @@
 	{
 		SystemZ_CLIH, SYSZ_INS_CLIH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2340,13 +2340,13 @@
 	{
 		SystemZ_CXLFBR, SYSZ_INS_CXLFBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_CXLGBR, SYSZ_INS_CXLGBR,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2448,7 +2448,7 @@
 	{
 		SystemZ_FIDBRA, SYSZ_INS_FIDBRA,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2460,7 +2460,7 @@
 	{
 		SystemZ_FIEBRA, SYSZ_INS_FIEBRA,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2472,7 +2472,7 @@
 	{
 		SystemZ_FIXBRA, SYSZ_INS_FIXBRA,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREFPEXTENSION, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_FPEXTENSION, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2574,49 +2574,49 @@
 	{
 		SystemZ_LAA, SYSZ_INS_LAA,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LAAG, SYSZ_INS_LAAG,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LAAL, SYSZ_INS_LAAL,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LAALG, SYSZ_INS_LAALG,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LAN, SYSZ_INS_LAN,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LANG, SYSZ_INS_LANG,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LAO, SYSZ_INS_LAO,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LAOG, SYSZ_INS_LAOG,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2628,13 +2628,13 @@
 	{
 		SystemZ_LAX, SYSZ_INS_LAX,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LAXG, SYSZ_INS_LAXG,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREINTERLOCKEDACCESS1, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_INTERLOCKEDACCESS1, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2652,7 +2652,7 @@
 	{
 		SystemZ_LBH, SYSZ_INS_LBH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2772,7 +2772,7 @@
 	{
 		SystemZ_LFH, SYSZ_INS_LFH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2868,7 +2868,7 @@
 	{
 		SystemZ_LHH, SYSZ_INS_LHH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2904,7 +2904,7 @@
 	{
 		SystemZ_LLCH, SYSZ_INS_LLCH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -2970,7 +2970,7 @@
 	{
 		SystemZ_LLHH, SYSZ_INS_LLHH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3066,25 +3066,25 @@
 	{
 		SystemZ_LOC, SYSZ_INS_LOC,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LOCG, SYSZ_INS_LOCG,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LOCGR, SYSZ_INS_LOCGR,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_LOCR, SYSZ_INS_LOCR,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3546,7 +3546,7 @@
 	{
 		SystemZ_NGRK, SYSZ_INS_NGRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3606,7 +3606,7 @@
 	{
 		SystemZ_NRK, SYSZ_INS_NRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3642,7 +3642,7 @@
 	{
 		SystemZ_OGRK, SYSZ_INS_OGRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3702,7 +3702,7 @@
 	{
 		SystemZ_ORK, SYSZ_INS_ORK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3738,13 +3738,13 @@
 	{
 		SystemZ_RISBHG, SYSZ_INS_RISBHG,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_RISBLG, SYSZ_INS_RISBLG,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3834,7 +3834,7 @@
 	{
 		SystemZ_SGRK, SYSZ_INS_SGRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3918,7 +3918,7 @@
 	{
 		SystemZ_SLGRK, SYSZ_INS_SLGRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3936,7 +3936,7 @@
 	{
 		SystemZ_SLLK, SYSZ_INS_SLLK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -3948,7 +3948,7 @@
 	{
 		SystemZ_SLRK, SYSZ_INS_SLRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4008,13 +4008,13 @@
 	{
 		SystemZ_SRAK, SYSZ_INS_SRAK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_SRK, SYSZ_INS_SRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4032,7 +4032,7 @@
 	{
 		SystemZ_SRLK, SYSZ_INS_SRLK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4056,7 +4056,7 @@
 	{
 		SystemZ_STCH, SYSZ_INS_STCH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4092,7 +4092,7 @@
 	{
 		SystemZ_STFH, SYSZ_INS_STFH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4116,7 +4116,7 @@
 	{
 		SystemZ_STHH, SYSZ_INS_STHH,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { 0 }, { SYSZ_GRP_FEATUREHIGHWORD, 0 }, 0, 0
+		{ 0 }, { 0 }, { SYSZ_GRP_HIGHWORD, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4140,13 +4140,13 @@
 	{
 		SystemZ_STOC, SYSZ_INS_STOC,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
 		SystemZ_STOCG, SYSZ_INS_STOCG,
 #ifndef CAPSTONE_DIET
-		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_FEATURELOADSTOREONCOND, 0 }, 0, 0
+		{ SYSZ_REG_CC, 0 }, { 0 }, { SYSZ_GRP_LOADSTOREONCOND, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4248,7 +4248,7 @@
 	{
 		SystemZ_XGRK, SYSZ_INS_XGRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -4284,7 +4284,7 @@
 	{
 		SystemZ_XRK, SYSZ_INS_XRK,
 #ifndef CAPSTONE_DIET
-		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_FEATUREDISTINCTOPS, 0 }, 0, 0
+		{ 0 }, { SYSZ_REG_CC, 0 }, { SYSZ_GRP_DISTINCTOPS, 0 }, 0, 0
 #endif
 	},
 	{
@@ -5035,6 +5035,31 @@
 #endif
 }
 
+#ifndef CAPSTONE_DIET
+static name_map group_name_maps[] = {
+	{ SYSZ_GRP_INVALID, NULL },
+	{ SYSZ_GRP_DISTINCTOPS, "distinctops" },
+	{ SYSZ_GRP_FPEXTENSION, "fpextension" },
+	{ SYSZ_GRP_HIGHWORD, "highword" },
+	{ SYSZ_GRP_INTERLOCKEDACCESS1, "interlockedaccess1" },
+	{ SYSZ_GRP_LOADSTOREONCOND, "loadstoreoncond" },
+
+	{ SYSZ_GRP_JUMP, "jump" },
+};
+#endif
+
+const char *SystemZ_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= SYSZ_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 // map internal raw register to 'public' register
 sysz_reg SystemZ_map_register(unsigned int r)
 {
diff --git a/arch/SystemZ/SystemZMapping.h b/arch/SystemZ/SystemZMapping.h
index 21f8d43..0abb772 100644
--- a/arch/SystemZ/SystemZMapping.h
+++ b/arch/SystemZ/SystemZMapping.h
@@ -14,6 +14,8 @@
 
 const char *SystemZ_insn_name(csh handle, unsigned int id);
 
+const char *SystemZ_group_name(csh handle, unsigned int id);
+
 // map internal raw register to 'public' register
 sysz_reg SystemZ_map_register(unsigned int r);
 
diff --git a/arch/SystemZ/SystemZModule.c b/arch/SystemZ/SystemZModule.c
index 267c046..b034cf4 100644
--- a/arch/SystemZ/SystemZModule.c
+++ b/arch/SystemZ/SystemZModule.c
@@ -25,6 +25,7 @@
 	ud->reg_name = SystemZ_reg_name;
 	ud->insn_id = SystemZ_get_insn_id;
 	ud->insn_name = SystemZ_insn_name;
+	ud->group_name = SystemZ_group_name;
 
 	return CS_ERR_OK;
 }
diff --git a/arch/X86/X86Mapping.c b/arch/X86/X86Mapping.c
index ce420a5..03b90bb 100644
--- a/arch/X86/X86Mapping.c
+++ b/arch/X86/X86Mapping.c
@@ -2086,6 +2086,64 @@
 #endif
 }
 
+#ifndef CAPSTONE_DIET
+static name_map group_name_maps[] = {
+	{ X86_GRP_INVALID, NULL },
+	{ X86_GRP_3DNOW, "3dnow" },
+	{ X86_GRP_AES, "aes" },
+	{ X86_GRP_ADX, "adx" },
+	{ X86_GRP_AVX, "avx" },
+	{ X86_GRP_AVX2, "avx2" },
+	{ X86_GRP_AVX512, "avx512" },
+	{ X86_GRP_BMI, "bmi" },
+	{ X86_GRP_BMI2, "bmi2" },
+	{ X86_GRP_CMOV, "cmov" },
+	{ X86_GRP_F16C, "fc16" },
+	{ X86_GRP_FMA, "fma" },
+	{ X86_GRP_FMA4, "fma4" },
+	{ X86_GRP_FSGSBASE, "fsgsbase" },
+	{ X86_GRP_HLE, "hle" },
+	{ X86_GRP_MMX, "mmx" },
+	{ X86_GRP_MODE32, "mode32" },
+	{ X86_GRP_MODE64, "mode64" },
+	{ X86_GRP_RTM, "rtm" },
+	{ X86_GRP_SHA, "sha" },
+	{ X86_GRP_SSE1, "sse1" },
+	{ X86_GRP_SSE2, "sse2" },
+	{ X86_GRP_SSE3, "sse3" },
+	{ X86_GRP_SSE41, "sse41" },
+	{ X86_GRP_SSE42, "sse42" },
+	{ X86_GRP_SSE4A, "sse4a" },
+	{ X86_GRP_SSSE3, "ssse3" },
+	{ X86_GRP_PCLMUL, "pclmul" },
+	{ X86_GRP_XOP, "xop" },
+	{ X86_GRP_CDI, "cdi" },
+	{ X86_GRP_ERI, "eri" },
+	{ X86_GRP_TBM, "tbm" },
+	{ X86_GRP_16BITMODE, "16bitmode" },
+	{ X86_GRP_NOT64BITMODE, "not64bitmode" },
+
+	{ X86_GRP_JUMP,	"jump" },
+	{ X86_GRP_VM, "vm" },
+	{ X86_GRP_INT, "int" },
+	{ X86_GRP_IRET,	"iret" },
+	{ X86_GRP_CALL,	"call" },
+	{ X86_GRP_RET, "ret" },
+};
+#endif
+
+const char *X86_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= X86_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 #define GET_INSTRINFO_ENUM
 #ifdef CAPSTONE_X86_REDUCE
 #include "X86GenInstrInfo_reduce.inc"
diff --git a/arch/X86/X86Mapping.h b/arch/X86/X86Mapping.h
index 17ba458..9b3742a 100644
--- a/arch/X86/X86Mapping.h
+++ b/arch/X86/X86Mapping.h
@@ -25,6 +25,9 @@
 // return insn name, given insn id
 const char *X86_insn_name(csh handle, unsigned int id);
 
+// return group name, given group id
+const char *X86_group_name(csh handle, unsigned int id);
+
 // post printer for X86.
 void X86_post_printer(csh handle, cs_insn *pub_insn, char *insn_asm, MCInst *mci);
 
diff --git a/arch/X86/X86Module.c b/arch/X86/X86Module.c
index 97c9eb9..8e91bb7 100644
--- a/arch/X86/X86Module.c
+++ b/arch/X86/X86Module.c
@@ -23,6 +23,7 @@
 	ud->reg_name = X86_reg_name;
 	ud->insn_id = X86_get_insn_id;
 	ud->insn_name = X86_insn_name;
+	ud->group_name = X86_group_name;
 	ud->post_printer = X86_post_printer;
 
 	if (ud->mode == CS_MODE_64)
diff --git a/arch/XCore/XCoreMapping.c b/arch/XCore/XCoreMapping.c
index 3aa5c72..e3a2abc 100644
--- a/arch/XCore/XCoreMapping.c
+++ b/arch/XCore/XCoreMapping.c
@@ -1548,6 +1548,23 @@
 #endif
 }
 
+static name_map group_name_maps[] = {
+	{ XCORE_GRP_INVALID, NULL },
+	{ XCORE_GRP_JUMP, "jump" },
+};
+
+const char *XCore_group_name(csh handle, unsigned int id)
+{
+#ifndef CAPSTONE_DIET
+	if (id >= XCORE_GRP_MAX)
+		return NULL;
+
+	return group_name_maps[id].name;
+#else
+	return NULL;
+#endif
+}
+
 // map internal raw register to 'public' register
 xcore_reg XCore_map_register(unsigned int r)
 {
diff --git a/arch/XCore/XCoreMapping.h b/arch/XCore/XCoreMapping.h
index 8d8a9b2..7ad50d9 100644
--- a/arch/XCore/XCoreMapping.h
+++ b/arch/XCore/XCoreMapping.h
@@ -14,6 +14,8 @@
 
 const char *XCore_insn_name(csh handle, unsigned int id);
 
+const char *XCore_group_name(csh handle, unsigned int id);
+
 // map internal raw register to 'public' register
 xcore_reg XCore_map_register(unsigned int r);
 
diff --git a/arch/XCore/XCoreModule.c b/arch/XCore/XCoreModule.c
index 9ab4e26..9b871bb 100644
--- a/arch/XCore/XCoreModule.c
+++ b/arch/XCore/XCoreModule.c
@@ -25,6 +25,7 @@
 	ud->reg_name = XCore_reg_name;
 	ud->insn_id = XCore_get_insn_id;
 	ud->insn_name = XCore_insn_name;
+	ud->group_name = XCore_group_name;
 
 	return CS_ERR_OK;
 }
diff --git a/cs.c b/cs.c
index a02de94..9e40a17 100644
--- a/cs.c
+++ b/cs.c
@@ -635,6 +635,18 @@
 	return handle->insn_name(ud, insn);
 }
 
+CAPSTONE_EXPORT
+const char *cs_group_name(csh ud, unsigned int group)
+{
+	struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+
+	if (!handle || handle->group_name == NULL) {
+		return NULL;
+	}
+
+	return handle->group_name(ud, group);
+}
+
 static bool arr_exist(unsigned char *arr, unsigned char max, unsigned int id)
 {
 	int i;
diff --git a/cs_priv.h b/cs_priv.h
index d50a4b8..b56030c 100644
--- a/cs_priv.h
+++ b/cs_priv.h
@@ -17,7 +17,7 @@
 
 typedef bool (*Disasm_t)(csh handle, const uint8_t *code, size_t code_len, MCInst *instr, uint16_t *size, uint64_t address, void *info);
 
-typedef const char *(*GetName_t)(csh handle, unsigned int reg);
+typedef const char *(*GetName_t)(csh handle, unsigned int id);
 
 typedef void (*GetID_t)(cs_struct *h, cs_insn *insn, unsigned int id);
 
@@ -40,6 +40,7 @@
 	bool big_endian;
 	GetName_t reg_name;
 	GetName_t insn_name;
+	GetName_t group_name;
 	GetID_t insn_id;
 	PostPrinter_t post_printer;
 	cs_err errnum;
diff --git a/include/capstone.h b/include/capstone.h
index 4f8b57e..6fbcecc 100644
--- a/include/capstone.h
+++ b/include/capstone.h
@@ -389,7 +389,7 @@
 void cs_free(cs_insn *insn, size_t count);
 
 /*
- Return friendly name of regiser in a string
+ Return friendly name of regiser in a string.
  Find the instruction id from header file of corresponding architecture (arm.h for ARM,
  x86.h for X86, ...)
 
@@ -397,21 +397,21 @@
  store register name.
 
  @handle: handle returned by cs_open()
- @reg: register id
+ @reg_id: register id
  @return: string name of the register, or NULL if @reg_id is invalid.
 */
 CAPSTONE_EXPORT
 const char *cs_reg_name(csh handle, unsigned int reg_id);
 
 /*
- Return friendly name of an instruction in a string
+ Return friendly name of an instruction in a string.
  Find the instruction id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...)
 
  WARN: when in 'diet' mode, this API is irrelevant because the engine does not
  store instruction name.
 
  @handle: handle returned by cs_open()
- @insn: instruction id
+ @insn_id: instruction id
 
  @return: string name of the instruction, or NULL if @insn_id is invalid.
 */
@@ -419,6 +419,21 @@
 const char *cs_insn_name(csh handle, unsigned int insn_id);
 
 /*
+ Return friendly name of a group id (that an instruction can belong to)
+ Find the group id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...)
+
+ WARN: when in 'diet' mode, this API is irrelevant because the engine does not
+ store group name.
+
+ @handle: handle returned by cs_open()
+ @group_id: group id
+
+ @return: string name of the group, or NULL if @group_id is invalid.
+*/
+CAPSTONE_EXPORT
+const char *cs_group_name(csh handle, unsigned int insn_id);
+
+/*
  Check if a disassembled instruction belong to a particular group.
  Find the group id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...)
  Internally, this simply verifies if @group_id matches any member of insn->groups array.
diff --git a/include/systemz.h b/include/systemz.h
index 191bbc1..b8314a2 100644
--- a/include/systemz.h
+++ b/include/systemz.h
@@ -803,11 +803,11 @@
 //> Group of SystemZ instructions
 typedef enum sysz_insn_group {
 	SYSZ_GRP_INVALID = 0,
-	SYSZ_GRP_FEATUREDISTINCTOPS,
-	SYSZ_GRP_FEATUREFPEXTENSION,
-	SYSZ_GRP_FEATUREHIGHWORD,
-	SYSZ_GRP_FEATUREINTERLOCKEDACCESS1,
-	SYSZ_GRP_FEATURELOADSTOREONCOND,
+	SYSZ_GRP_DISTINCTOPS,
+	SYSZ_GRP_FPEXTENSION,
+	SYSZ_GRP_HIGHWORD,
+	SYSZ_GRP_INTERLOCKEDACCESS1,
+	SYSZ_GRP_LOADSTOREONCOND,
 
 	SYSZ_GRP_JUMP,	// all jump instructions (conditional+direct+indirect jumps)