diff --git a/bindings/nodejs/consts/keystone.js b/bindings/nodejs/consts/keystone.js
index 5034d6e64725df8a7baaf4d2b93ed43b7d5068ba..3bb9104edfcd62b5058e16dfe52a9d7aebc6be88 100644
--- a/bindings/nodejs/consts/keystone.js
+++ b/bindings/nodejs/consts/keystone.js
@@ -50,20 +50,20 @@ module.exports.ERR_ASM_DIRECTIVE_COMMA = 133
 module.exports.ERR_ASM_DIRECTIVE_RELOC_NAME = 134
 module.exports.ERR_ASM_DIRECTIVE_RELOC_TOKEN = 135
 module.exports.ERR_ASM_DIRECTIVE_FPOINT = 136
-module.exports.ERR_ASM_DIRECTIVE_MACRO = 137
-module.exports.ERR_ASM_VARIANT_INVALID = 138
-module.exports.ERR_ASM_EXPR_BRACKET = 139
-module.exports.ERR_ASM_SYMBOL_MODIFIER = 140
-module.exports.ERR_ASM_SYMBOL_REDEFINED = 141
-module.exports.ERR_ASM_SYMBOL_MISSING = 142
-module.exports.ERR_ASM_RPAREN = 143
-module.exports.ERR_ASM_STAT_TOKEN = 144
-module.exports.ERR_ASM_UNSUPPORTED = 145
-module.exports.ERR_ASM_MACRO_TOKEN = 146
-module.exports.ERR_ASM_MACRO_PAREN = 147
-module.exports.ERR_ASM_MACRO_EQU = 148
-module.exports.ERR_ASM_MACRO_ARGS = 149
-module.exports.ERR_ASM_MACRO_LEVELS_EXCEED = 150
+module.exports.ERR_ASM_VARIANT_INVALID = 137
+module.exports.ERR_ASM_EXPR_BRACKET = 138
+module.exports.ERR_ASM_SYMBOL_MODIFIER = 139
+module.exports.ERR_ASM_SYMBOL_REDEFINED = 140
+module.exports.ERR_ASM_SYMBOL_MISSING = 141
+module.exports.ERR_ASM_RPAREN = 142
+module.exports.ERR_ASM_STAT_TOKEN = 143
+module.exports.ERR_ASM_UNSUPPORTED = 144
+module.exports.ERR_ASM_MACRO_TOKEN = 145
+module.exports.ERR_ASM_MACRO_PAREN = 146
+module.exports.ERR_ASM_MACRO_EQU = 147
+module.exports.ERR_ASM_MACRO_ARGS = 148
+module.exports.ERR_ASM_MACRO_LEVELS_EXCEED = 149
+module.exports.ERR_ASM_MACRO_STR = 150
 module.exports.ERR_ASM_ESC_BACKSLASH = 151
 module.exports.ERR_ASM_ESC_OCTAL = 152
 module.exports.ERR_ASM_ESC_SEQUENCE = 153
diff --git a/bindings/python/keystone/keystone_const.py b/bindings/python/keystone/keystone_const.py
index 16283c1aef9af8ac197cefcf4e8cd2355eb3bfe4..529022401fb620aca54ce9e00b9f36885115cfa7 100644
--- a/bindings/python/keystone/keystone_const.py
+++ b/bindings/python/keystone/keystone_const.py
@@ -50,20 +50,20 @@ KS_ERR_ASM_DIRECTIVE_COMMA = 133
 KS_ERR_ASM_DIRECTIVE_RELOC_NAME = 134
 KS_ERR_ASM_DIRECTIVE_RELOC_TOKEN = 135
 KS_ERR_ASM_DIRECTIVE_FPOINT = 136
-KS_ERR_ASM_DIRECTIVE_MACRO = 137
-KS_ERR_ASM_VARIANT_INVALID = 138
-KS_ERR_ASM_EXPR_BRACKET = 139
-KS_ERR_ASM_SYMBOL_MODIFIER = 140
-KS_ERR_ASM_SYMBOL_REDEFINED = 141
-KS_ERR_ASM_SYMBOL_MISSING = 142
-KS_ERR_ASM_RPAREN = 143
-KS_ERR_ASM_STAT_TOKEN = 144
-KS_ERR_ASM_UNSUPPORTED = 145
-KS_ERR_ASM_MACRO_TOKEN = 146
-KS_ERR_ASM_MACRO_PAREN = 147
-KS_ERR_ASM_MACRO_EQU = 148
-KS_ERR_ASM_MACRO_ARGS = 149
-KS_ERR_ASM_MACRO_LEVELS_EXCEED = 150
+KS_ERR_ASM_VARIANT_INVALID = 137
+KS_ERR_ASM_EXPR_BRACKET = 138
+KS_ERR_ASM_SYMBOL_MODIFIER = 139
+KS_ERR_ASM_SYMBOL_REDEFINED = 140
+KS_ERR_ASM_SYMBOL_MISSING = 141
+KS_ERR_ASM_RPAREN = 142
+KS_ERR_ASM_STAT_TOKEN = 143
+KS_ERR_ASM_UNSUPPORTED = 144
+KS_ERR_ASM_MACRO_TOKEN = 145
+KS_ERR_ASM_MACRO_PAREN = 146
+KS_ERR_ASM_MACRO_EQU = 147
+KS_ERR_ASM_MACRO_ARGS = 148
+KS_ERR_ASM_MACRO_LEVELS_EXCEED = 149
+KS_ERR_ASM_MACRO_STR = 150
 KS_ERR_ASM_ESC_BACKSLASH = 151
 KS_ERR_ASM_ESC_OCTAL = 152
 KS_ERR_ASM_ESC_SEQUENCE = 153
diff --git a/bindings/ruby/keystone_gem/lib/keystone/keystone_const.rb b/bindings/ruby/keystone_gem/lib/keystone/keystone_const.rb
index 67622ee5a99ea278259e912145a2713ff3faf011..b818ef61ba003153033c9973070a0aad45ad7392 100644
--- a/bindings/ruby/keystone_gem/lib/keystone/keystone_const.rb
+++ b/bindings/ruby/keystone_gem/lib/keystone/keystone_const.rb
@@ -52,20 +52,20 @@ module Keystone
 	KS_ERR_ASM_DIRECTIVE_RELOC_NAME = 134
 	KS_ERR_ASM_DIRECTIVE_RELOC_TOKEN = 135
 	KS_ERR_ASM_DIRECTIVE_FPOINT = 136
-	KS_ERR_ASM_DIRECTIVE_MACRO = 137
-	KS_ERR_ASM_VARIANT_INVALID = 138
-	KS_ERR_ASM_EXPR_BRACKET = 139
-	KS_ERR_ASM_SYMBOL_MODIFIER = 140
-	KS_ERR_ASM_SYMBOL_REDEFINED = 141
-	KS_ERR_ASM_SYMBOL_MISSING = 142
-	KS_ERR_ASM_RPAREN = 143
-	KS_ERR_ASM_STAT_TOKEN = 144
-	KS_ERR_ASM_UNSUPPORTED = 145
-	KS_ERR_ASM_MACRO_TOKEN = 146
-	KS_ERR_ASM_MACRO_PAREN = 147
-	KS_ERR_ASM_MACRO_EQU = 148
-	KS_ERR_ASM_MACRO_ARGS = 149
-	KS_ERR_ASM_MACRO_LEVELS_EXCEED = 150
+	KS_ERR_ASM_VARIANT_INVALID = 137
+	KS_ERR_ASM_EXPR_BRACKET = 138
+	KS_ERR_ASM_SYMBOL_MODIFIER = 139
+	KS_ERR_ASM_SYMBOL_REDEFINED = 140
+	KS_ERR_ASM_SYMBOL_MISSING = 141
+	KS_ERR_ASM_RPAREN = 142
+	KS_ERR_ASM_STAT_TOKEN = 143
+	KS_ERR_ASM_UNSUPPORTED = 144
+	KS_ERR_ASM_MACRO_TOKEN = 145
+	KS_ERR_ASM_MACRO_PAREN = 146
+	KS_ERR_ASM_MACRO_EQU = 147
+	KS_ERR_ASM_MACRO_ARGS = 148
+	KS_ERR_ASM_MACRO_LEVELS_EXCEED = 149
+	KS_ERR_ASM_MACRO_STR = 150
 	KS_ERR_ASM_ESC_BACKSLASH = 151
 	KS_ERR_ASM_ESC_OCTAL = 152
 	KS_ERR_ASM_ESC_SEQUENCE = 153
diff --git a/include/keystone/keystone.h b/include/keystone/keystone.h
index 698368b2c1ab75cefade718f1aeda0b6485e4ab0..76f455eb7ea9eb775e372edde02e048de0d63b11 100644
--- a/include/keystone/keystone.h
+++ b/include/keystone/keystone.h
@@ -106,7 +106,6 @@ typedef enum ks_err {
     KS_ERR_ASM_DIRECTIVE_RELOC_NAME, // expected relocation name in directive
     KS_ERR_ASM_DIRECTIVE_RELOC_TOKEN, // unexpected token in .reloc directive
     KS_ERR_ASM_DIRECTIVE_FPOINT,    // invalid floating point in directive
-    KS_ERR_ASM_DIRECTIVE_MACRO,    // invalid floating point in directive
     KS_ERR_ASM_VARIANT_INVALID, // invalid variant
     KS_ERR_ASM_EXPR_BRACKET,    // brackets expression not supported on this target
     KS_ERR_ASM_SYMBOL_MODIFIER, // unexpected symbol modifier following '@'
@@ -120,6 +119,7 @@ typedef enum ks_err {
     KS_ERR_ASM_MACRO_EQU,       // expected '=' after formal parameter identifier
     KS_ERR_ASM_MACRO_ARGS,      // too many positional arguments
     KS_ERR_ASM_MACRO_LEVELS_EXCEED, // macros cannot be nested more than 20 levels deep
+    KS_ERR_ASM_MACRO_STR,    // invalid macro string
     KS_ERR_ASM_ESC_BACKSLASH,   // unexpected backslash at end of escaped string
     KS_ERR_ASM_ESC_OCTAL,       // invalid octal escape sequence  (out of range)
     KS_ERR_ASM_ESC_SEQUENCE,         // invalid escape sequence (unrecognized character)
diff --git a/llvm/keystone/ks.cpp b/llvm/keystone/ks.cpp
index 461a646437859abfc7a5eaea64c957ad25f87168..3b1f7bc8fee43f9ade1cb92abc770208ea29c947 100644
--- a/llvm/keystone/ks.cpp
+++ b/llvm/keystone/ks.cpp
@@ -112,12 +112,16 @@ const char *ks_strerror(ks_err code)
             return "Too many positional arguments (KS_ERR_ASM_MACRO_ARGS)";
         case KS_ERR_ASM_MACRO_LEVELS_EXCEED: // macros cannot be nested more than 20 levels deep
             return "Macros cannot be nested more than 20 levels deep (KS_ERR_ASM_MACRO_LEVELS_EXCEED)";
+        case KS_ERR_ASM_MACRO_STR:         // invalid macro string
+            return "Invalid macro string (KS_ERR_ASM_MACRO_STR)";
         case KS_ERR_ASM_ESC_BACKSLASH:   // unexpected backslash at end of escaped string
             return "Unexpected backslash at end of escaped string (KS_ERR_ASM_ESC_BACKSLASH)";
         case KS_ERR_ASM_ESC_OCTAL:       // invalid octal escape sequence (out of range)
             return "Invalid octal escape sequence (KS_ERR_ASM_ESC_OCTAL)";
         case KS_ERR_ASM_ESC_SEQUENCE:         // invalid escape sequence (unrecognized character)
             return "Invalid escape sequence (KS_ERR_ASM_ESC_SEQUENCE)";
+        case KS_ERR_ASM_ESC_STR:         // broken escape string
+            return "Invalid escape string (KS_ERR_ASM_ESC_STR)";
     }
 }
 
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 38db993bcaa48d0e6008d17ff29eb5c27ed541c5..fc63e533f340e8310257e96fc88381ace7d75f79 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -2147,7 +2147,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &OS, StringRef Body,
               bool valid;
               OS << Token.getStringContents(valid);
               if (!valid) {
-                  KsError = KS_ERR_ASM_DIRECTIVE_MACRO;
+                  KsError = KS_ERR_ASM_MACRO_STR;
                   return true;
               }
             }