change API cs_disasm_dyn(): break cs_insn into 2 structures, and put all details into new structure cs_detail. this break API compatibility
diff --git a/arch/AArch64/AArch64InstPrinter.c b/arch/AArch64/AArch64InstPrinter.c
index cb63f3f..11baf01 100644
--- a/arch/AArch64/AArch64InstPrinter.c
+++ b/arch/AArch64/AArch64InstPrinter.c
@@ -41,13 +41,13 @@
 	doing_mem = status;
 
 	if (doing_mem) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_MEM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.base = ARM64_REG_INVALID;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.index = ARM64_REG_INVALID;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.disp = 0;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_MEM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.base = ARM64_REG_INVALID;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.index = ARM64_REG_INVALID;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.disp = 0;
 	} else {
 		// done, create the next operand slot
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -71,9 +71,9 @@
 		SStream_concat(O, "#%u", Imm);
 
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = Imm;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = Imm;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -91,7 +91,7 @@
 			if (RmSize == 32) {
 				Ext = "uxtw";
 				if (MI->detail)
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].ext = ARM64_EXT_UXTW;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].ext = ARM64_EXT_UXTW;
 			} else {
 				Ext = "lsl";
 			}
@@ -100,11 +100,11 @@
 			if (RmSize == 32) {
 				Ext = "sxtw";
 				if (MI->detail)
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].ext = ARM64_EXT_SXTW;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].ext = ARM64_EXT_SXTW;
 			} else {
 				Ext = "sxtx";
 				if (MI->detail)
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].ext = ARM64_EXT_SXTX;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].ext = ARM64_EXT_SXTX;
 			}
 			break;
 		default:
@@ -120,11 +120,11 @@
 			SStream_concat(O, " #%u", ShiftAmt);
 			if (MI->detail) {
 				if (doing_mem) {
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].shift.type = ARM64_SFT_LSL;
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].shift.value = ShiftAmt;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].shift.type = ARM64_SFT_LSL;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].shift.value = ShiftAmt;
 				} else {
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.value = ShiftAmt;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.value = ShiftAmt;
 				}
 			}
 	} else if (IsLSL) {
@@ -144,9 +144,9 @@
 		else
 			SStream_concat(O, "#%u"PRIu64, Imm12);
 		if (MI->detail) {
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = Imm12;
-			MI->pub_insn.arm64.op_count++;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = Imm12;
+			MI->flat_insn.arm64.op_count++;
 		}
 	}
 }
@@ -157,8 +157,8 @@
 
 	SStream_concat(O, ", lsl #12");
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.value = 12;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.value = 12;
 	}
 }
 
@@ -171,9 +171,9 @@
 	else
 		SStream_concat(O, "%"PRIu64, imm);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = imm;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = imm;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -188,9 +188,9 @@
 	else
 		SStream_concat(O, "#%u", LSB);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = LSB;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = LSB;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -221,9 +221,9 @@
 		SStream_concat(O, "#%u", (ImmS - ImmR + 1));
 
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = ImmS - ImmR + 1;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = ImmS - ImmR + 1;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -233,9 +233,9 @@
 	SStream_concat(O, "c%"PRIu64, MCOperand_getImm(CRx));
 
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_CIMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = MCOperand_getImm(CRx);
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_CIMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = MCOperand_getImm(CRx);
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -248,9 +248,9 @@
 	else
 		SStream_concat(O, "#%u", 64 - MCOperand_getImm(ScaleOp));
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = 64 - MCOperand_getImm(ScaleOp);
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = 64 - MCOperand_getImm(ScaleOp);
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -282,9 +282,9 @@
 	//o << '#' << format("%.8f", Val);
 	SStream_concat(O, "#%.8f", Val);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_FP;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].fp = Val;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_FP;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].fp = Val;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -292,9 +292,9 @@
 {
 	SStream_concat(O, "#0.0");
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_FP;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].fp = 0;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_FP;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].fp = 0;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -303,7 +303,7 @@
 	MCOperand *MO = MCInst_getOperand(MI, OpNum);
 	SStream_concat(O, A64CondCodeToString((A64CC_CondCodes)(MCOperand_getImm(MO))));
 	if (MI->detail)
-		MI->pub_insn.arm64.cc = MCOperand_getImm(MO) + 1;
+		MI->flat_insn.arm64.cc = MCOperand_getImm(MO) + 1;
 }
 
 static void printLabelOperand(MCInst *MI, unsigned OpNum,
@@ -327,9 +327,9 @@
 	SImm += MI->address;
 
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = SImm;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = SImm;
+		MI->flat_insn.arm64.op_count++;
 	}
 
 	if (SImm > HEX_THRESHOLD)
@@ -349,9 +349,9 @@
 	else
 		SStream_concat(O, "#%"PRIu64, Val);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = Val;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = Val;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -370,11 +370,11 @@
 
 		if (MI->detail) {
 			if (doing_mem) {
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.disp = Imm;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.disp = Imm;
 			} else {
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = Imm;
-				MI->pub_insn.arm64.op_count++;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = Imm;
+				MI->flat_insn.arm64.op_count++;
 			}
 		}
 	}
@@ -403,8 +403,8 @@
 	else
 		SStream_concat(O, " #%u", imm);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = Shift + 1;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.value = imm;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = Shift + 1;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.value = imm;
 	}
 }
 
@@ -420,9 +420,9 @@
 		else
 			SStream_concat(O, "#%"PRIu64, imm);
 		if (MI->detail) {
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = imm;
-			MI->pub_insn.arm64.op_count++;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = imm;
+			MI->flat_insn.arm64.op_count++;
 		}
 
 		if (MCOperand_getImm(ShiftMO) != 0) {
@@ -432,8 +432,8 @@
 			else
 				SStream_concat(O, ", lsl #%u", shift);
 			if (MI->detail) {
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.value = shift;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.value = shift;
 			}
 		}
 
@@ -457,9 +457,9 @@
 		else
 			SStream_concat(O, "#%"PRIu64, imm);
 		if (MI->detail) {
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = imm;
-			MI->pub_insn.arm64.op_count++;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = imm;
+			MI->flat_insn.arm64.op_count++;
 		}
 	}
 }
@@ -509,9 +509,9 @@
 			else
 				SStream_concat(O, "lsl #%u", shift);
 			if (MI->detail) {
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.value = shift;
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].ext = Ext - 4;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.value = shift;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].ext = Ext - 4;
 			}
 			return;
 		}
@@ -530,7 +530,7 @@
 	}
 
 	if (MI->detail)
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].ext = Ext - 4;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].ext = Ext - 4;
 	MCOperand *MO = MCInst_getOperand(MI, OpNum);
 	if (MCOperand_getImm(MO) != 0) {
 		unsigned int shift = MCOperand_getImm(MO);
@@ -539,8 +539,8 @@
 		else
 			SStream_concat(O, " #%u", shift);
 		if (MI->detail) {
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.value = shift;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.value = shift;
 		}
 	}
 }
@@ -557,11 +557,11 @@
 		SStream_concat(O, "#%u", Imm * MemScale);
 	if (MI->detail) {
 		if (doing_mem) {
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.disp = Imm * MemScale;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.disp = Imm * MemScale;
 		} else {
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = Imm * MemScale;
-			MI->pub_insn.arm64.op_count++;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = Imm * MemScale;
+			MI->flat_insn.arm64.op_count++;
 		}
 	}
 }
@@ -575,9 +575,9 @@
 	SStream_concat(O, "%s", Name);
 	free(Name);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_REG;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].reg = Reg;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_REG;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].reg = Reg;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -589,15 +589,15 @@
 		SStream_concat(O, getRegisterName(Reg));
 		if (MI->detail) {
 			if (doing_mem) {
-				if (MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.base == ARM64_REG_INVALID) {
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.base = Reg;
+				if (MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.base == ARM64_REG_INVALID) {
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.base = Reg;
 				} else {
-					MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.index = Reg;
+					MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.index = Reg;
 				}
 			} else {
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_REG;
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].reg = Reg;
-				MI->pub_insn.arm64.op_count++;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_REG;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].reg = Reg;
+				MI->flat_insn.arm64.op_count++;
 			}
 		}
 	} else if (MCOperand_isImm(Op)) {
@@ -608,11 +608,11 @@
 			SStream_concat(O, "#%"PRIu64, imm);
 		if (MI->detail) {
 			if (doing_mem) {
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.disp = imm;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.disp = imm;
 			} else {
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-				MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = imm;
-				MI->pub_insn.arm64.op_count++;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+				MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = imm;
+				MI->flat_insn.arm64.op_count++;
 			}
 		}
 	}
@@ -660,11 +660,11 @@
 			return;
 		SStream_concat(O, ", lsl");
 		if (MI->detail)
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = ARM64_SFT_LSL;
 	} else {
 		SStream_concat(O, ", msl");
 		if (MI->detail)
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.type = ARM64_SFT_MSL;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.type = ARM64_SFT_MSL;
 	}
 
 	if (Imm > HEX_THRESHOLD)
@@ -672,7 +672,7 @@
 	else
 		SStream_concat(O, " #%"PRIu64, Imm);
 	if (MI->detail)
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count - 1].shift.value = Imm;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count - 1].shift.value = Imm;
 }
 
 static void printNeonUImm0Operand(MCInst *MI, unsigned OpNum, SStream *O)
@@ -680,9 +680,9 @@
 	SStream_concat(O, "#0");
 	// FIXME: vector ZERO
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = 0;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = 0;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -700,9 +700,9 @@
 	else
 		SStream_concat(O, "#%u", Imm);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = Imm;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = Imm;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -721,7 +721,7 @@
 
 	if (MI->detail) {
 		if (doing_mem) {
-			MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].mem.disp = Imm;
+			MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].mem.disp = Imm;
 		} else {
 			// FIXME: never has false branch??
 		}
@@ -750,9 +750,9 @@
 	else
 		SStream_concat(O, "#%"PRIu64, Mask);
 	if (MI->detail) {
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].type = ARM64_OP_IMM;
-		MI->pub_insn.arm64.operands[MI->pub_insn.arm64.op_count].imm = Mask;
-		MI->pub_insn.arm64.op_count++;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].type = ARM64_OP_IMM;
+		MI->flat_insn.arm64.operands[MI->flat_insn.arm64.op_count].imm = Mask;
+		MI->flat_insn.arm64.op_count++;
 	}
 }
 
@@ -802,11 +802,11 @@
 #define PRINT_ALIAS_INSTR
 #include "AArch64GenAsmWriter.inc"
 
-void AArch64_post_printer(csh handle, cs_insn *pub_insn, char *insn_asm)
+void AArch64_post_printer(csh handle, cs_insn *flat_insn, char *insn_asm)
 {
 	// check if this insn requests write-back
 	if (strrchr(insn_asm, '!') != NULL)
-		pub_insn->arm64.writeback = true;
+		flat_insn->detail->arm64.writeback = true;
 }
 
 void AArch64_printInst(MCInst *MI, SStream *O, void *Info)
diff --git a/arch/AArch64/mapping.c b/arch/AArch64/mapping.c
index d4eb255..cf8c8f0 100644
--- a/arch/AArch64/mapping.c
+++ b/arch/AArch64/mapping.c
@@ -6,6 +6,7 @@
 
 #include "../../include/arm64.h"
 #include "../../utils.h"
+#include "../../cs_priv.h"
 
 #include "mapping.h"
 
@@ -2996,23 +2997,23 @@
 		insn->id = insns[i].mapid;
 
 		if (detail) {
-			memcpy(insn->regs_read, insns[i].regs_use, sizeof(insns[i].regs_use));
-			insn->regs_read_count = count_positive(insns[i].regs_use);
+			cs_struct handle;
+			handle.detail = detail;
+			memcpy(insn->detail->regs_read, insns[i].regs_use, sizeof(insns[i].regs_use));
+			insn->detail->regs_read_count = count_positive(insns[i].regs_use);
 
-			memcpy(insn->regs_write, insns[i].regs_mod, sizeof(insns[i].regs_mod));
-			insn->regs_write_count = count_positive(insns[i].regs_mod);
+			memcpy(insn->detail->regs_write, insns[i].regs_mod, sizeof(insns[i].regs_mod));
+			insn->detail->regs_write_count = count_positive(insns[i].regs_mod);
 
-			memcpy(insn->groups, insns[i].groups, sizeof(insns[i].groups));
-			insn->groups_count = count_positive(insns[i].groups);
+			memcpy(insn->detail->groups, insns[i].groups, sizeof(insns[i].groups));
+			insn->detail->groups_count = count_positive(insns[i].groups);
 
-			// call cs_reg_write() with handle = 1 to bypass handle check
-			// we only need to find if this insn modifies ARM64_REG_NZCV
-			insn->arm64.update_flags = cs_reg_write(1, insn, ARM64_REG_NZCV);
+			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->groups[insn->groups_count] = ARM64_GRP_JUMP;
-				insn->groups_count++;
+				insn->detail->groups[insn->detail->groups_count] = ARM64_GRP_JUMP;
+				insn->detail->groups_count++;
 			}
 		}
 	}