neo: binding support
diff --git a/bindings/const_generator.py b/bindings/const_generator.py
index 2c76090..900c6ae 100644
--- a/bindings/const_generator.py
+++ b/bindings/const_generator.py
@@ -5,7 +5,7 @@
 
 INCL_DIR = '../include/capstone/'
 
-include = [ 'arm.h', 'arm64.h', 'm68k.h', 'mips.h', 'x86.h', 'ppc.h', 'sparc.h', 'systemz.h', 'xcore.h', 'tms320c64x.h', 'm680x.h', 'evm.h' ]
+include = [ 'arm.h', 'arm64.h', 'm68k.h', 'mips.h', 'x86.h', 'ppc.h', 'sparc.h', 'systemz.h', 'xcore.h', 'tms320c64x.h', 'm680x.h', 'evm.h', 'neo.h' ]
 
 template = {
     'java': {
@@ -26,6 +26,7 @@
             'tms320c64x.h': 'TMS320C64x',
             'm680x.h': 'M680x',
             'evm.h': 'Evm',
+            'neo.h': 'Neo',
             'comment_open': '\t//',
             'comment_close': '',
         },
@@ -47,6 +48,7 @@
             'tms320c64x.h': 'tms320c64x',
             'm680x.h': 'm680x',
             'evm.h': 'evm',
+            'neo.h': 'neo',
             'comment_open': '#',
             'comment_close': '',
         },
@@ -68,6 +70,7 @@
             'tms320c64x.h': 'tms320c64x',
             'm680x.h': 'm680x',
             'evm.h': 'evm',
+            'neo.h': 'neo',
             'comment_open': '(*',
             'comment_close': ' *)',
         },
diff --git a/bindings/java/capstone/Neo_const.java b/bindings/java/capstone/Neo_const.java
new file mode 100644
index 0000000..4ce9620
--- /dev/null
+++ b/bindings/java/capstone/Neo_const.java
@@ -0,0 +1,207 @@
+// For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT
+package capstone;
+
+public class Neo_const {
+
+	public static final int NEO_FEE_0 = 0;
+	public static final int NEO_FEE_01 = 1;
+	public static final int NEO_FEE_001 = 2;
+	public static final int NEO_FEE_002 = 3;
+	public static final int NEO_FEE_0001 = 4;
+
+	// NEO instruction
+
+	public static final int NEO_INS_PUSH0 = 0;
+	public static final int NEO_INS_PUSHBYTES1 = 1;
+	public static final int NEO_INS_PUSHBYTES2 = 2;
+	public static final int NEO_INS_PUSHBYTES3 = 3;
+	public static final int NEO_INS_PUSHBYTES4 = 4;
+	public static final int NEO_INS_PUSHBYTES5 = 5;
+	public static final int NEO_INS_PUSHBYTES6 = 6;
+	public static final int NEO_INS_PUSHBYTES7 = 7;
+	public static final int NEO_INS_PUSHBYTES8 = 8;
+	public static final int NEO_INS_PUSHBYTES9 = 9;
+	public static final int NEO_INS_PUSHBYTES10 = 10;
+	public static final int NEO_INS_PUSHBYTES11 = 11;
+	public static final int NEO_INS_PUSHBYTES12 = 12;
+	public static final int NEO_INS_PUSHBYTES13 = 13;
+	public static final int NEO_INS_PUSHBYTES14 = 14;
+	public static final int NEO_INS_PUSHBYTES15 = 15;
+	public static final int NEO_INS_PUSHBYTES16 = 16;
+	public static final int NEO_INS_PUSHBYTES17 = 17;
+	public static final int NEO_INS_PUSHBYTES18 = 18;
+	public static final int NEO_INS_PUSHBYTES19 = 19;
+	public static final int NEO_INS_PUSHBYTES20 = 20;
+	public static final int NEO_INS_PUSHBYTES21 = 21;
+	public static final int NEO_INS_PUSHBYTES22 = 22;
+	public static final int NEO_INS_PUSHBYTES23 = 23;
+	public static final int NEO_INS_PUSHBYTES24 = 24;
+	public static final int NEO_INS_PUSHBYTES25 = 25;
+	public static final int NEO_INS_PUSHBYTES26 = 26;
+	public static final int NEO_INS_PUSHBYTES27 = 27;
+	public static final int NEO_INS_PUSHBYTES28 = 28;
+	public static final int NEO_INS_PUSHBYTES29 = 29;
+	public static final int NEO_INS_PUSHBYTES30 = 30;
+	public static final int NEO_INS_PUSHBYTES31 = 31;
+	public static final int NEO_INS_PUSHBYTES32 = 32;
+	public static final int NEO_INS_PUSHBYTES33 = 33;
+	public static final int NEO_INS_PUSHBYTES34 = 34;
+	public static final int NEO_INS_PUSHBYTES35 = 35;
+	public static final int NEO_INS_PUSHBYTES36 = 36;
+	public static final int NEO_INS_PUSHBYTES37 = 37;
+	public static final int NEO_INS_PUSHBYTES38 = 38;
+	public static final int NEO_INS_PUSHBYTES39 = 39;
+	public static final int NEO_INS_PUSHBYTES40 = 40;
+	public static final int NEO_INS_PUSHBYTES41 = 41;
+	public static final int NEO_INS_PUSHBYTES42 = 42;
+	public static final int NEO_INS_PUSHBYTES43 = 43;
+	public static final int NEO_INS_PUSHBYTES44 = 44;
+	public static final int NEO_INS_PUSHBYTES45 = 45;
+	public static final int NEO_INS_PUSHBYTES46 = 46;
+	public static final int NEO_INS_PUSHBYTES47 = 47;
+	public static final int NEO_INS_PUSHBYTES48 = 48;
+	public static final int NEO_INS_PUSHBYTES49 = 49;
+	public static final int NEO_INS_PUSHBYTES50 = 50;
+	public static final int NEO_INS_PUSHBYTES51 = 51;
+	public static final int NEO_INS_PUSHBYTES52 = 52;
+	public static final int NEO_INS_PUSHBYTES53 = 53;
+	public static final int NEO_INS_PUSHBYTES54 = 54;
+	public static final int NEO_INS_PUSHBYTES55 = 55;
+	public static final int NEO_INS_PUSHBYTES56 = 56;
+	public static final int NEO_INS_PUSHBYTES57 = 57;
+	public static final int NEO_INS_PUSHBYTES58 = 58;
+	public static final int NEO_INS_PUSHBYTES59 = 59;
+	public static final int NEO_INS_PUSHBYTES60 = 60;
+	public static final int NEO_INS_PUSHBYTES61 = 61;
+	public static final int NEO_INS_PUSHBYTES62 = 62;
+	public static final int NEO_INS_PUSHBYTES63 = 63;
+	public static final int NEO_INS_PUSHBYTES64 = 64;
+	public static final int NEO_INS_PUSHBYTES65 = 65;
+	public static final int NEO_INS_PUSHBYTES66 = 66;
+	public static final int NEO_INS_PUSHBYTES67 = 67;
+	public static final int NEO_INS_PUSHBYTES68 = 68;
+	public static final int NEO_INS_PUSHBYTES69 = 69;
+	public static final int NEO_INS_PUSHBYTES70 = 70;
+	public static final int NEO_INS_PUSHBYTES71 = 71;
+	public static final int NEO_INS_PUSHBYTES72 = 72;
+	public static final int NEO_INS_PUSHBYTES73 = 73;
+	public static final int NEO_INS_PUSHBYTES74 = 74;
+	public static final int NEO_INS_PUSHBYTES75 = 75;
+	public static final int NEO_INS_PUSHDATA1 = 76;
+	public static final int NEO_INS_PUSHDATA2 = 77;
+	public static final int NEO_INS_PUSHDATA4 = 78;
+	public static final int NEO_INS_PUSHM1 = 79;
+	public static final int NEO_INS_PUSH1 = 81;
+	public static final int NEO_INS_PUSH2 = 82;
+	public static final int NEO_INS_PUSH3 = 83;
+	public static final int NEO_INS_PUSH4 = 84;
+	public static final int NEO_INS_PUSH5 = 85;
+	public static final int NEO_INS_PUSH6 = 86;
+	public static final int NEO_INS_PUSH7 = 87;
+	public static final int NEO_INS_PUSH8 = 88;
+	public static final int NEO_INS_PUSH9 = 89;
+	public static final int NEO_INS_PUSH10 = 90;
+	public static final int NEO_INS_PUSH11 = 91;
+	public static final int NEO_INS_PUSH12 = 92;
+	public static final int NEO_INS_PUSH13 = 93;
+	public static final int NEO_INS_PUSH14 = 94;
+	public static final int NEO_INS_PUSH15 = 95;
+	public static final int NEO_INS_PUSH16 = 96;
+	public static final int NEO_INS_NOP = 97;
+	public static final int NEO_INS_JMP = 98;
+	public static final int NEO_INS_JMPIF = 99;
+	public static final int NEO_INS_JMPIFNOT = 100;
+	public static final int NEO_INS_CALL = 101;
+	public static final int NEO_INS_RET = 102;
+	public static final int NEO_INS_APPCALL = 103;
+	public static final int NEO_INS_SYSCALL = 104;
+	public static final int NEO_INS_TAILCALL = 105;
+	public static final int NEO_INS_DUPFROMALTSTACK = 106;
+	public static final int NEO_INS_TOALTSTACK = 107;
+	public static final int NEO_INS_FROMALTSTACK = 108;
+	public static final int NEO_INS_XDROP = 109;
+	public static final int NEO_INS_XSWAP = 114;
+	public static final int NEO_INS_XTUCK = 115;
+	public static final int NEO_INS_DEPTH = 116;
+	public static final int NEO_INS_DROP = 117;
+	public static final int NEO_INS_DUP = 118;
+	public static final int NEO_INS_NIP = 119;
+	public static final int NEO_INS_OVER = 120;
+	public static final int NEO_INS_PICK = 121;
+	public static final int NEO_INS_ROLL = 122;
+	public static final int NEO_INS_ROT = 123;
+	public static final int NEO_INS_SWAP = 124;
+	public static final int NEO_INS_TUCK = 125;
+	public static final int NEO_INS_CAT = 126;
+	public static final int NEO_INS_SUBSTR = 127;
+	public static final int NEO_INS_LEFT = 128;
+	public static final int NEO_INS_RIGHT = 129;
+	public static final int NEO_INS_SIZE = 130;
+	public static final int NEO_INS_INVERT = 131;
+	public static final int NEO_INS_AND = 132;
+	public static final int NEO_INS_OR = 133;
+	public static final int NEO_INS_XOR = 134;
+	public static final int NEO_INS_EQUAL = 135;
+	public static final int NEO_INS_OP_EQUALVERIFY = 136;
+	public static final int NEO_INS_OP_RESERVED1 = 137;
+	public static final int NEO_INS_OP_RESERVED2 = 138;
+	public static final int NEO_INS_INC = 139;
+	public static final int NEO_INS_DEC = 140;
+	public static final int NEO_INS_SIGN = 141;
+	public static final int NEO_INS_NEGATE = 143;
+	public static final int NEO_INS_ABS = 144;
+	public static final int NEO_INS_NOT = 145;
+	public static final int NEO_INS_NZ = 146;
+	public static final int NEO_INS_ADD = 147;
+	public static final int NEO_INS_SUB = 148;
+	public static final int NEO_INS_MUL = 149;
+	public static final int NEO_INS_DIV = 150;
+	public static final int NEO_INS_MOD = 151;
+	public static final int NEO_INS_SHL = 152;
+	public static final int NEO_INS_SHR = 153;
+	public static final int NEO_INS_BOOLAND = 154;
+	public static final int NEO_INS_BOOLOR = 155;
+	public static final int NEO_INS_NUMEQUAL = 156;
+	public static final int NEO_INS_NUMNOTEQUAL = 158;
+	public static final int NEO_INS_LT = 159;
+	public static final int NEO_INS_GT = 160;
+	public static final int NEO_INS_LTE = 161;
+	public static final int NEO_INS_GTE = 162;
+	public static final int NEO_INS_MIN = 163;
+	public static final int NEO_INS_MAX = 164;
+	public static final int NEO_INS_WITHIN = 165;
+	public static final int NEO_INS_SHA1 = 167;
+	public static final int NEO_INS_SHA256 = 168;
+	public static final int NEO_INS_HASH160 = 169;
+	public static final int NEO_INS_HASH256 = 170;
+	public static final int NEO_INS_CHECKSIG = 172;
+	public static final int NEO_INS_VERIFY = 173;
+	public static final int NEO_INS_CHECKMULTISIG = 174;
+	public static final int NEO_INS_ARRAYSIZE = 192;
+	public static final int NEO_INS_PACK = 193;
+	public static final int NEO_INS_UNPACK = 194;
+	public static final int NEO_INS_PICKITEM = 195;
+	public static final int NEO_INS_SETITEM = 196;
+	public static final int NEO_INS_NEWARRAY = 197;
+	public static final int NEO_INS_NEWSTRUCT = 198;
+	public static final int NEO_INS_NEWMAP = 199;
+	public static final int NEO_INS_APPEND = 200;
+	public static final int NEO_INS_REVERSE = 201;
+	public static final int NEO_INS_REMOVE = 202;
+	public static final int NEO_INS_HASKEY = 203;
+	public static final int NEO_INS_KEYS = 204;
+	public static final int NEO_INS_VALUES = 205;
+	public static final int NEO_INS_THROW = 240;
+	public static final int NEO_INS_THROWIFNOT = 241;
+	public static final int NEO_INS_INVALID = 512;
+	public static final int NEO_INS_ENDING = 513;
+
+	// Group of NEO instructions
+
+	public static final int NEO_GRP_INVALID = 0;
+	public static final int NEO_GRP_JUMP = 1;
+	public static final int NEO_GRP_MATH = 8;
+	public static final int NEO_GRP_STACK_WRITE = 9;
+	public static final int NEO_GRP_STACK_READ = 10;
+	public static final int NEO_GRP_ENDING = 11;
+}
\ No newline at end of file
diff --git a/bindings/ocaml/neo_const.ml b/bindings/ocaml/neo_const.ml
new file mode 100644
index 0000000..07c8817
--- /dev/null
+++ b/bindings/ocaml/neo_const.ml
@@ -0,0 +1,203 @@
+(* For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [neo_const.ml] *)
+
+let _NEO_FEE_0 = 0;;
+let _NEO_FEE_01 = 1;;
+let _NEO_FEE_001 = 2;;
+let _NEO_FEE_002 = 3;;
+let _NEO_FEE_0001 = 4;;
+
+(* NEO instruction *)
+
+let _NEO_INS_PUSH0 = 0;;
+let _NEO_INS_PUSHBYTES1 = 1;;
+let _NEO_INS_PUSHBYTES2 = 2;;
+let _NEO_INS_PUSHBYTES3 = 3;;
+let _NEO_INS_PUSHBYTES4 = 4;;
+let _NEO_INS_PUSHBYTES5 = 5;;
+let _NEO_INS_PUSHBYTES6 = 6;;
+let _NEO_INS_PUSHBYTES7 = 7;;
+let _NEO_INS_PUSHBYTES8 = 8;;
+let _NEO_INS_PUSHBYTES9 = 9;;
+let _NEO_INS_PUSHBYTES10 = 10;;
+let _NEO_INS_PUSHBYTES11 = 11;;
+let _NEO_INS_PUSHBYTES12 = 12;;
+let _NEO_INS_PUSHBYTES13 = 13;;
+let _NEO_INS_PUSHBYTES14 = 14;;
+let _NEO_INS_PUSHBYTES15 = 15;;
+let _NEO_INS_PUSHBYTES16 = 16;;
+let _NEO_INS_PUSHBYTES17 = 17;;
+let _NEO_INS_PUSHBYTES18 = 18;;
+let _NEO_INS_PUSHBYTES19 = 19;;
+let _NEO_INS_PUSHBYTES20 = 20;;
+let _NEO_INS_PUSHBYTES21 = 21;;
+let _NEO_INS_PUSHBYTES22 = 22;;
+let _NEO_INS_PUSHBYTES23 = 23;;
+let _NEO_INS_PUSHBYTES24 = 24;;
+let _NEO_INS_PUSHBYTES25 = 25;;
+let _NEO_INS_PUSHBYTES26 = 26;;
+let _NEO_INS_PUSHBYTES27 = 27;;
+let _NEO_INS_PUSHBYTES28 = 28;;
+let _NEO_INS_PUSHBYTES29 = 29;;
+let _NEO_INS_PUSHBYTES30 = 30;;
+let _NEO_INS_PUSHBYTES31 = 31;;
+let _NEO_INS_PUSHBYTES32 = 32;;
+let _NEO_INS_PUSHBYTES33 = 33;;
+let _NEO_INS_PUSHBYTES34 = 34;;
+let _NEO_INS_PUSHBYTES35 = 35;;
+let _NEO_INS_PUSHBYTES36 = 36;;
+let _NEO_INS_PUSHBYTES37 = 37;;
+let _NEO_INS_PUSHBYTES38 = 38;;
+let _NEO_INS_PUSHBYTES39 = 39;;
+let _NEO_INS_PUSHBYTES40 = 40;;
+let _NEO_INS_PUSHBYTES41 = 41;;
+let _NEO_INS_PUSHBYTES42 = 42;;
+let _NEO_INS_PUSHBYTES43 = 43;;
+let _NEO_INS_PUSHBYTES44 = 44;;
+let _NEO_INS_PUSHBYTES45 = 45;;
+let _NEO_INS_PUSHBYTES46 = 46;;
+let _NEO_INS_PUSHBYTES47 = 47;;
+let _NEO_INS_PUSHBYTES48 = 48;;
+let _NEO_INS_PUSHBYTES49 = 49;;
+let _NEO_INS_PUSHBYTES50 = 50;;
+let _NEO_INS_PUSHBYTES51 = 51;;
+let _NEO_INS_PUSHBYTES52 = 52;;
+let _NEO_INS_PUSHBYTES53 = 53;;
+let _NEO_INS_PUSHBYTES54 = 54;;
+let _NEO_INS_PUSHBYTES55 = 55;;
+let _NEO_INS_PUSHBYTES56 = 56;;
+let _NEO_INS_PUSHBYTES57 = 57;;
+let _NEO_INS_PUSHBYTES58 = 58;;
+let _NEO_INS_PUSHBYTES59 = 59;;
+let _NEO_INS_PUSHBYTES60 = 60;;
+let _NEO_INS_PUSHBYTES61 = 61;;
+let _NEO_INS_PUSHBYTES62 = 62;;
+let _NEO_INS_PUSHBYTES63 = 63;;
+let _NEO_INS_PUSHBYTES64 = 64;;
+let _NEO_INS_PUSHBYTES65 = 65;;
+let _NEO_INS_PUSHBYTES66 = 66;;
+let _NEO_INS_PUSHBYTES67 = 67;;
+let _NEO_INS_PUSHBYTES68 = 68;;
+let _NEO_INS_PUSHBYTES69 = 69;;
+let _NEO_INS_PUSHBYTES70 = 70;;
+let _NEO_INS_PUSHBYTES71 = 71;;
+let _NEO_INS_PUSHBYTES72 = 72;;
+let _NEO_INS_PUSHBYTES73 = 73;;
+let _NEO_INS_PUSHBYTES74 = 74;;
+let _NEO_INS_PUSHBYTES75 = 75;;
+let _NEO_INS_PUSHDATA1 = 76;;
+let _NEO_INS_PUSHDATA2 = 77;;
+let _NEO_INS_PUSHDATA4 = 78;;
+let _NEO_INS_PUSHM1 = 79;;
+let _NEO_INS_PUSH1 = 81;;
+let _NEO_INS_PUSH2 = 82;;
+let _NEO_INS_PUSH3 = 83;;
+let _NEO_INS_PUSH4 = 84;;
+let _NEO_INS_PUSH5 = 85;;
+let _NEO_INS_PUSH6 = 86;;
+let _NEO_INS_PUSH7 = 87;;
+let _NEO_INS_PUSH8 = 88;;
+let _NEO_INS_PUSH9 = 89;;
+let _NEO_INS_PUSH10 = 90;;
+let _NEO_INS_PUSH11 = 91;;
+let _NEO_INS_PUSH12 = 92;;
+let _NEO_INS_PUSH13 = 93;;
+let _NEO_INS_PUSH14 = 94;;
+let _NEO_INS_PUSH15 = 95;;
+let _NEO_INS_PUSH16 = 96;;
+let _NEO_INS_NOP = 97;;
+let _NEO_INS_JMP = 98;;
+let _NEO_INS_JMPIF = 99;;
+let _NEO_INS_JMPIFNOT = 100;;
+let _NEO_INS_CALL = 101;;
+let _NEO_INS_RET = 102;;
+let _NEO_INS_APPCALL = 103;;
+let _NEO_INS_SYSCALL = 104;;
+let _NEO_INS_TAILCALL = 105;;
+let _NEO_INS_DUPFROMALTSTACK = 106;;
+let _NEO_INS_TOALTSTACK = 107;;
+let _NEO_INS_FROMALTSTACK = 108;;
+let _NEO_INS_XDROP = 109;;
+let _NEO_INS_XSWAP = 114;;
+let _NEO_INS_XTUCK = 115;;
+let _NEO_INS_DEPTH = 116;;
+let _NEO_INS_DROP = 117;;
+let _NEO_INS_DUP = 118;;
+let _NEO_INS_NIP = 119;;
+let _NEO_INS_OVER = 120;;
+let _NEO_INS_PICK = 121;;
+let _NEO_INS_ROLL = 122;;
+let _NEO_INS_ROT = 123;;
+let _NEO_INS_SWAP = 124;;
+let _NEO_INS_TUCK = 125;;
+let _NEO_INS_CAT = 126;;
+let _NEO_INS_SUBSTR = 127;;
+let _NEO_INS_LEFT = 128;;
+let _NEO_INS_RIGHT = 129;;
+let _NEO_INS_SIZE = 130;;
+let _NEO_INS_INVERT = 131;;
+let _NEO_INS_AND = 132;;
+let _NEO_INS_OR = 133;;
+let _NEO_INS_XOR = 134;;
+let _NEO_INS_EQUAL = 135;;
+let _NEO_INS_OP_EQUALVERIFY = 136;;
+let _NEO_INS_OP_RESERVED1 = 137;;
+let _NEO_INS_OP_RESERVED2 = 138;;
+let _NEO_INS_INC = 139;;
+let _NEO_INS_DEC = 140;;
+let _NEO_INS_SIGN = 141;;
+let _NEO_INS_NEGATE = 143;;
+let _NEO_INS_ABS = 144;;
+let _NEO_INS_NOT = 145;;
+let _NEO_INS_NZ = 146;;
+let _NEO_INS_ADD = 147;;
+let _NEO_INS_SUB = 148;;
+let _NEO_INS_MUL = 149;;
+let _NEO_INS_DIV = 150;;
+let _NEO_INS_MOD = 151;;
+let _NEO_INS_SHL = 152;;
+let _NEO_INS_SHR = 153;;
+let _NEO_INS_BOOLAND = 154;;
+let _NEO_INS_BOOLOR = 155;;
+let _NEO_INS_NUMEQUAL = 156;;
+let _NEO_INS_NUMNOTEQUAL = 158;;
+let _NEO_INS_LT = 159;;
+let _NEO_INS_GT = 160;;
+let _NEO_INS_LTE = 161;;
+let _NEO_INS_GTE = 162;;
+let _NEO_INS_MIN = 163;;
+let _NEO_INS_MAX = 164;;
+let _NEO_INS_WITHIN = 165;;
+let _NEO_INS_SHA1 = 167;;
+let _NEO_INS_SHA256 = 168;;
+let _NEO_INS_HASH160 = 169;;
+let _NEO_INS_HASH256 = 170;;
+let _NEO_INS_CHECKSIG = 172;;
+let _NEO_INS_VERIFY = 173;;
+let _NEO_INS_CHECKMULTISIG = 174;;
+let _NEO_INS_ARRAYSIZE = 192;;
+let _NEO_INS_PACK = 193;;
+let _NEO_INS_UNPACK = 194;;
+let _NEO_INS_PICKITEM = 195;;
+let _NEO_INS_SETITEM = 196;;
+let _NEO_INS_NEWARRAY = 197;;
+let _NEO_INS_NEWSTRUCT = 198;;
+let _NEO_INS_NEWMAP = 199;;
+let _NEO_INS_APPEND = 200;;
+let _NEO_INS_REVERSE = 201;;
+let _NEO_INS_REMOVE = 202;;
+let _NEO_INS_HASKEY = 203;;
+let _NEO_INS_KEYS = 204;;
+let _NEO_INS_VALUES = 205;;
+let _NEO_INS_THROW = 240;;
+let _NEO_INS_THROWIFNOT = 241;;
+let _NEO_INS_INVALID = 512;;
+let _NEO_INS_ENDING = 513;;
+
+(* Group of NEO instructions *)
+
+let _NEO_GRP_INVALID = 0;;
+let _NEO_GRP_JUMP = 1;;
+let _NEO_GRP_MATH = 8;;
+let _NEO_GRP_STACK_WRITE = 9;;
+let _NEO_GRP_STACK_READ = 10;;
+let _NEO_GRP_ENDING = 11;;
diff --git a/bindings/python/capstone/__init__.py b/bindings/python/capstone/__init__.py
index eff46c1..d6b8fa5 100644
--- a/bindings/python/capstone/__init__.py
+++ b/bindings/python/capstone/__init__.py
@@ -35,6 +35,7 @@
     'CS_ARCH_TMS320C64X',
     'CS_ARCH_M680X',
     'CS_ARCH_EVM',
+    'CS_ARCH_NEO',
     'CS_ARCH_ALL',
 
     'CS_MODE_LITTLE_ENDIAN',
@@ -151,7 +152,8 @@
 CS_ARCH_TMS320C64X = 9
 CS_ARCH_M680X = 10
 CS_ARCH_EVM = 11
-CS_ARCH_MAX = 12
+CS_ARCH_NEO = 12
+CS_ARCH_MAX = 13
 CS_ARCH_ALL = 0xFFFF
 
 # disasm mode
@@ -327,7 +329,7 @@
     return [copy_ctypes(n) for n in src]
 
 # Weird import placement because these modules are needed by the below code but need the above functions
-from . import arm, arm64, m68k, mips, ppc, sparc, systemz, x86, xcore, tms320c64x, m680x, evm
+from . import arm, arm64, m68k, mips, ppc, sparc, systemz, x86, xcore, tms320c64x, m680x, evm, neo
 
 class _cs_arch(ctypes.Union):
     _fields_ = (
@@ -343,6 +345,7 @@
         ('tms320c64x', tms320c64x.CsTMS320C64x),
         ('m680x', m680x.CsM680x),
         ('evm', evm.CsEvm),
+        ('neo', neo.CsNeo),
     )
 
 class _cs_detail(ctypes.Structure):
@@ -653,6 +656,8 @@
             (self.flags, self.operands) = m680x.get_arch_info(self._raw.detail.contents.arch.m680x)
         elif arch == CS_ARCH_EVM:
             (self.pop, self.push, self.fee) = evm.get_arch_info(self._raw.detail.contents.arch.evm)
+        elif arch == CS_ARCH_NEO:
+            (self.pop, self.push, self.fee) = neo.get_arch_info(self._raw.detail.contents.arch.neo)
 
 
     def __getattr__(self, name):
@@ -1077,7 +1082,7 @@
     archs = { "arm": CS_ARCH_ARM, "arm64": CS_ARCH_ARM64, "m68k": CS_ARCH_M68K, \
         "mips": CS_ARCH_MIPS, "ppc": CS_ARCH_PPC, "sparc": CS_ARCH_SPARC, \
         "sysz": CS_ARCH_SYSZ, 'xcore': CS_ARCH_XCORE, "tms320c64x": CS_ARCH_TMS320C64X, \
-        "m680x": CS_ARCH_M680X, 'evm': CS_ARCH_EVM }
+        "m680x": CS_ARCH_M680X, 'evm': CS_ARCH_EVM, 'neo': CS_ARCH_NEO }
 
     all_archs = ""
     keys = archs.keys()
diff --git a/bindings/python/capstone/neo.py b/bindings/python/capstone/neo.py
new file mode 100644
index 0000000..4aa54ea
--- /dev/null
+++ b/bindings/python/capstone/neo.py
@@ -0,0 +1,17 @@
+# Capstone Python bindings, by Nguyen Anh Quynnh <aquynh@gmail.com>
+
+import ctypes
+from . import copy_ctypes_list
+from .neo_const import *
+
+# define the API
+class CsNeo(ctypes.Structure):
+    _fields_ = (
+        ('pop', ctypes.c_byte),
+        ('push', ctypes.c_byte),
+        ('fee', ctypes.c_uint),
+    )
+
+def get_arch_info(a):
+    return (a.pop, a.push, a.fee)
+
diff --git a/bindings/python/capstone/neo_const.py b/bindings/python/capstone/neo_const.py
new file mode 100644
index 0000000..500454a
--- /dev/null
+++ b/bindings/python/capstone/neo_const.py
@@ -0,0 +1,203 @@
+# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [neo_const.py]
+
+NEO_FEE_0 = 0
+NEO_FEE_01 = 1
+NEO_FEE_001 = 2
+NEO_FEE_002 = 3
+NEO_FEE_0001 = 4
+
+# NEO instruction
+
+NEO_INS_PUSH0 = 0
+NEO_INS_PUSHBYTES1 = 1
+NEO_INS_PUSHBYTES2 = 2
+NEO_INS_PUSHBYTES3 = 3
+NEO_INS_PUSHBYTES4 = 4
+NEO_INS_PUSHBYTES5 = 5
+NEO_INS_PUSHBYTES6 = 6
+NEO_INS_PUSHBYTES7 = 7
+NEO_INS_PUSHBYTES8 = 8
+NEO_INS_PUSHBYTES9 = 9
+NEO_INS_PUSHBYTES10 = 10
+NEO_INS_PUSHBYTES11 = 11
+NEO_INS_PUSHBYTES12 = 12
+NEO_INS_PUSHBYTES13 = 13
+NEO_INS_PUSHBYTES14 = 14
+NEO_INS_PUSHBYTES15 = 15
+NEO_INS_PUSHBYTES16 = 16
+NEO_INS_PUSHBYTES17 = 17
+NEO_INS_PUSHBYTES18 = 18
+NEO_INS_PUSHBYTES19 = 19
+NEO_INS_PUSHBYTES20 = 20
+NEO_INS_PUSHBYTES21 = 21
+NEO_INS_PUSHBYTES22 = 22
+NEO_INS_PUSHBYTES23 = 23
+NEO_INS_PUSHBYTES24 = 24
+NEO_INS_PUSHBYTES25 = 25
+NEO_INS_PUSHBYTES26 = 26
+NEO_INS_PUSHBYTES27 = 27
+NEO_INS_PUSHBYTES28 = 28
+NEO_INS_PUSHBYTES29 = 29
+NEO_INS_PUSHBYTES30 = 30
+NEO_INS_PUSHBYTES31 = 31
+NEO_INS_PUSHBYTES32 = 32
+NEO_INS_PUSHBYTES33 = 33
+NEO_INS_PUSHBYTES34 = 34
+NEO_INS_PUSHBYTES35 = 35
+NEO_INS_PUSHBYTES36 = 36
+NEO_INS_PUSHBYTES37 = 37
+NEO_INS_PUSHBYTES38 = 38
+NEO_INS_PUSHBYTES39 = 39
+NEO_INS_PUSHBYTES40 = 40
+NEO_INS_PUSHBYTES41 = 41
+NEO_INS_PUSHBYTES42 = 42
+NEO_INS_PUSHBYTES43 = 43
+NEO_INS_PUSHBYTES44 = 44
+NEO_INS_PUSHBYTES45 = 45
+NEO_INS_PUSHBYTES46 = 46
+NEO_INS_PUSHBYTES47 = 47
+NEO_INS_PUSHBYTES48 = 48
+NEO_INS_PUSHBYTES49 = 49
+NEO_INS_PUSHBYTES50 = 50
+NEO_INS_PUSHBYTES51 = 51
+NEO_INS_PUSHBYTES52 = 52
+NEO_INS_PUSHBYTES53 = 53
+NEO_INS_PUSHBYTES54 = 54
+NEO_INS_PUSHBYTES55 = 55
+NEO_INS_PUSHBYTES56 = 56
+NEO_INS_PUSHBYTES57 = 57
+NEO_INS_PUSHBYTES58 = 58
+NEO_INS_PUSHBYTES59 = 59
+NEO_INS_PUSHBYTES60 = 60
+NEO_INS_PUSHBYTES61 = 61
+NEO_INS_PUSHBYTES62 = 62
+NEO_INS_PUSHBYTES63 = 63
+NEO_INS_PUSHBYTES64 = 64
+NEO_INS_PUSHBYTES65 = 65
+NEO_INS_PUSHBYTES66 = 66
+NEO_INS_PUSHBYTES67 = 67
+NEO_INS_PUSHBYTES68 = 68
+NEO_INS_PUSHBYTES69 = 69
+NEO_INS_PUSHBYTES70 = 70
+NEO_INS_PUSHBYTES71 = 71
+NEO_INS_PUSHBYTES72 = 72
+NEO_INS_PUSHBYTES73 = 73
+NEO_INS_PUSHBYTES74 = 74
+NEO_INS_PUSHBYTES75 = 75
+NEO_INS_PUSHDATA1 = 76
+NEO_INS_PUSHDATA2 = 77
+NEO_INS_PUSHDATA4 = 78
+NEO_INS_PUSHM1 = 79
+NEO_INS_PUSH1 = 81
+NEO_INS_PUSH2 = 82
+NEO_INS_PUSH3 = 83
+NEO_INS_PUSH4 = 84
+NEO_INS_PUSH5 = 85
+NEO_INS_PUSH6 = 86
+NEO_INS_PUSH7 = 87
+NEO_INS_PUSH8 = 88
+NEO_INS_PUSH9 = 89
+NEO_INS_PUSH10 = 90
+NEO_INS_PUSH11 = 91
+NEO_INS_PUSH12 = 92
+NEO_INS_PUSH13 = 93
+NEO_INS_PUSH14 = 94
+NEO_INS_PUSH15 = 95
+NEO_INS_PUSH16 = 96
+NEO_INS_NOP = 97
+NEO_INS_JMP = 98
+NEO_INS_JMPIF = 99
+NEO_INS_JMPIFNOT = 100
+NEO_INS_CALL = 101
+NEO_INS_RET = 102
+NEO_INS_APPCALL = 103
+NEO_INS_SYSCALL = 104
+NEO_INS_TAILCALL = 105
+NEO_INS_DUPFROMALTSTACK = 106
+NEO_INS_TOALTSTACK = 107
+NEO_INS_FROMALTSTACK = 108
+NEO_INS_XDROP = 109
+NEO_INS_XSWAP = 114
+NEO_INS_XTUCK = 115
+NEO_INS_DEPTH = 116
+NEO_INS_DROP = 117
+NEO_INS_DUP = 118
+NEO_INS_NIP = 119
+NEO_INS_OVER = 120
+NEO_INS_PICK = 121
+NEO_INS_ROLL = 122
+NEO_INS_ROT = 123
+NEO_INS_SWAP = 124
+NEO_INS_TUCK = 125
+NEO_INS_CAT = 126
+NEO_INS_SUBSTR = 127
+NEO_INS_LEFT = 128
+NEO_INS_RIGHT = 129
+NEO_INS_SIZE = 130
+NEO_INS_INVERT = 131
+NEO_INS_AND = 132
+NEO_INS_OR = 133
+NEO_INS_XOR = 134
+NEO_INS_EQUAL = 135
+NEO_INS_OP_EQUALVERIFY = 136
+NEO_INS_OP_RESERVED1 = 137
+NEO_INS_OP_RESERVED2 = 138
+NEO_INS_INC = 139
+NEO_INS_DEC = 140
+NEO_INS_SIGN = 141
+NEO_INS_NEGATE = 143
+NEO_INS_ABS = 144
+NEO_INS_NOT = 145
+NEO_INS_NZ = 146
+NEO_INS_ADD = 147
+NEO_INS_SUB = 148
+NEO_INS_MUL = 149
+NEO_INS_DIV = 150
+NEO_INS_MOD = 151
+NEO_INS_SHL = 152
+NEO_INS_SHR = 153
+NEO_INS_BOOLAND = 154
+NEO_INS_BOOLOR = 155
+NEO_INS_NUMEQUAL = 156
+NEO_INS_NUMNOTEQUAL = 158
+NEO_INS_LT = 159
+NEO_INS_GT = 160
+NEO_INS_LTE = 161
+NEO_INS_GTE = 162
+NEO_INS_MIN = 163
+NEO_INS_MAX = 164
+NEO_INS_WITHIN = 165
+NEO_INS_SHA1 = 167
+NEO_INS_SHA256 = 168
+NEO_INS_HASH160 = 169
+NEO_INS_HASH256 = 170
+NEO_INS_CHECKSIG = 172
+NEO_INS_VERIFY = 173
+NEO_INS_CHECKMULTISIG = 174
+NEO_INS_ARRAYSIZE = 192
+NEO_INS_PACK = 193
+NEO_INS_UNPACK = 194
+NEO_INS_PICKITEM = 195
+NEO_INS_SETITEM = 196
+NEO_INS_NEWARRAY = 197
+NEO_INS_NEWSTRUCT = 198
+NEO_INS_NEWMAP = 199
+NEO_INS_APPEND = 200
+NEO_INS_REVERSE = 201
+NEO_INS_REMOVE = 202
+NEO_INS_HASKEY = 203
+NEO_INS_KEYS = 204
+NEO_INS_VALUES = 205
+NEO_INS_THROW = 240
+NEO_INS_THROWIFNOT = 241
+NEO_INS_INVALID = 512
+NEO_INS_ENDING = 513
+
+# Group of NEO instructions
+
+NEO_GRP_INVALID = 0
+NEO_GRP_JUMP = 1
+NEO_GRP_MATH = 8
+NEO_GRP_STACK_WRITE = 9
+NEO_GRP_STACK_READ = 10
+NEO_GRP_ENDING = 11
diff --git a/bindings/python/setup_cython.py b/bindings/python/setup_cython.py
index d36769a..19d46ac 100644
--- a/bindings/python/setup_cython.py
+++ b/bindings/python/setup_cython.py
@@ -40,7 +40,7 @@
 compile_args = ['-O3', '-fomit-frame-pointer', '-I' + HEADERS_DIR]
 link_args = ['-L' + LIBS_DIR]
 
-ext_module_names = ['arm', 'arm_const', 'arm64', 'arm64_const', 'm68k', 'm68k_const', 'm680x', 'm680x_const', 'mips', 'mips_const', 'ppc', 'ppc_const', 'x86', 'x86_const', 'sparc', 'sparc_const', 'systemz', 'sysz_const', 'xcore', 'xcore_const', 'tms320c64x', 'tms320c64x_const', 'evm', 'evm_const' ]
+ext_module_names = ['arm', 'arm_const', 'arm64', 'arm64_const', 'm68k', 'm68k_const', 'm680x', 'm680x_const', 'mips', 'mips_const', 'ppc', 'ppc_const', 'x86', 'x86_const', 'sparc', 'sparc_const', 'systemz', 'sysz_const', 'xcore', 'xcore_const', 'tms320c64x', 'tms320c64x_const', 'evm', 'evm_const', 'neo', 'neo_const' ]
 
 ext_modules = [Extension("capstone.ccapstone",
                          ["pyx/ccapstone.pyx"],
diff --git a/bindings/python/test_neo.py b/bindings/python/test_neo.py
new file mode 100755
index 0000000..1125353
--- /dev/null
+++ b/bindings/python/test_neo.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+
+# Capstone Python bindings, by Nguyen Anh Quynnh <aquynh@gmail.com>
+
+from __future__ import print_function
+from capstone import *
+
+cs = Cs(CS_ARCH_NEO, 0)
+cs.detail = True
+
+for i in cs.disasm("\x02\xaa\xbb", 0x100):
+    print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))
+    if i.pop > 0:
+        print("\tPop:     %u" %i.pop)
+    if i.push > 0:
+        print("\tPush:    %u" %i.push)
+    if i.fee > 0:
+        print("\tGas fee: %u" %i.fee)
+    if len(i.groups) > 0:
+        print("\tThis instruction belongs to groups: ", end=''),
+        for m in i.groups:
+            print("%s " % i.group_name(m), end=''),
+        print()