use stable sort
diff --git a/gen/update.bat b/gen/update.bat
index 8cbcfa0..6edaadc 100644
--- a/gen/update.bat
+++ b/gen/update.bat
@@ -1,16 +1,17 @@
 @echo off
 set OPT=/EHsc -I../xbyak /W4 -D_CRT_SECURE_NO_WARNINGS
 set TARGET=..\\xbyak\\xbyak_mnemonic.h
+set SORT=sortline
 cl gen_code.cpp %OPT%
-gen_code | sort > %TARGET%
+gen_code | %SORT% > %TARGET%
 echo #ifdef XBYAK_ENABLE_OMITTED_OPERAND>> %TARGET%
-gen_code omit | sort >> %TARGET%
+gen_code omit | %SORT% >> %TARGET%
 echo #endif>>%TARGET%
 gen_code fixed >> %TARGET%
 cl gen_avx512.cpp %OPT%
 echo #ifndef XBYAK_DISABLE_AVX512>> %TARGET%
-gen_avx512 |sort >> %TARGET%
+gen_avx512 |%SORT% >> %TARGET%
 echo #ifdef XBYAK64>> %TARGET%
-gen_avx512 64 |sort >> %TARGET%
+gen_avx512 64 |%SORT% >> %TARGET%
 echo #endif>> %TARGET%
 echo #endif>> %TARGET%
diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h
index 34fd3ea..9bc3a84 100644
--- a/xbyak/xbyak_mnemonic.h
+++ b/xbyak/xbyak_mnemonic.h
@@ -293,124 +293,124 @@
 void imul(const Operand& op) { opR_ModM(op, 0, 5, 0xF6); }
 void inc(const Operand& op) { opIncDec(op, 0x40, 0); }
 void insertps(const Xmm& xmm, const Operand& op, uint8 imm) { opGen(xmm, op, 0x21, 0x66, isXMM_XMMorMEM, imm, 0x3A); }
-void ja(const char *label, LabelType type = T_AUTO) { ja(std::string(label), type); }
 void ja(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); }
+void ja(const char *label, LabelType type = T_AUTO) { ja(std::string(label), type); }
 void ja(const void *addr) { opJmpAbs(addr, T_NEAR, 0x77, 0x87, 0x0F); }
 void ja(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); }
-void jae(const char *label, LabelType type = T_AUTO) { jae(std::string(label), type); }
 void jae(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); }
+void jae(const char *label, LabelType type = T_AUTO) { jae(std::string(label), type); }
 void jae(const void *addr) { opJmpAbs(addr, T_NEAR, 0x73, 0x83, 0x0F); }
 void jae(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); }
-void jb(const char *label, LabelType type = T_AUTO) { jb(std::string(label), type); }
 void jb(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); }
+void jb(const char *label, LabelType type = T_AUTO) { jb(std::string(label), type); }
 void jb(const void *addr) { opJmpAbs(addr, T_NEAR, 0x72, 0x82, 0x0F); }
 void jb(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); }
-void jbe(const char *label, LabelType type = T_AUTO) { jbe(std::string(label), type); }
 void jbe(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); }
+void jbe(const char *label, LabelType type = T_AUTO) { jbe(std::string(label), type); }
 void jbe(const void *addr) { opJmpAbs(addr, T_NEAR, 0x76, 0x86, 0x0F); }
 void jbe(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); }
-void jc(const char *label, LabelType type = T_AUTO) { jc(std::string(label), type); }
 void jc(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); }
+void jc(const char *label, LabelType type = T_AUTO) { jc(std::string(label), type); }
 void jc(const void *addr) { opJmpAbs(addr, T_NEAR, 0x72, 0x82, 0x0F); }
 void jc(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); }
-void je(const char *label, LabelType type = T_AUTO) { je(std::string(label), type); }
 void je(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); }
+void je(const char *label, LabelType type = T_AUTO) { je(std::string(label), type); }
 void je(const void *addr) { opJmpAbs(addr, T_NEAR, 0x74, 0x84, 0x0F); }
 void je(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); }
-void jg(const char *label, LabelType type = T_AUTO) { jg(std::string(label), type); }
 void jg(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); }
+void jg(const char *label, LabelType type = T_AUTO) { jg(std::string(label), type); }
 void jg(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7F, 0x8F, 0x0F); }
 void jg(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); }
-void jge(const char *label, LabelType type = T_AUTO) { jge(std::string(label), type); }
 void jge(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); }
+void jge(const char *label, LabelType type = T_AUTO) { jge(std::string(label), type); }
 void jge(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7D, 0x8D, 0x0F); }
 void jge(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); }
-void jl(const char *label, LabelType type = T_AUTO) { jl(std::string(label), type); }
 void jl(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); }
+void jl(const char *label, LabelType type = T_AUTO) { jl(std::string(label), type); }
 void jl(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7C, 0x8C, 0x0F); }
 void jl(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); }
-void jle(const char *label, LabelType type = T_AUTO) { jle(std::string(label), type); }
 void jle(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); }
+void jle(const char *label, LabelType type = T_AUTO) { jle(std::string(label), type); }
 void jle(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7E, 0x8E, 0x0F); }
 void jle(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); }
-void jna(const char *label, LabelType type = T_AUTO) { jna(std::string(label), type); }
 void jna(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); }
+void jna(const char *label, LabelType type = T_AUTO) { jna(std::string(label), type); }
 void jna(const void *addr) { opJmpAbs(addr, T_NEAR, 0x76, 0x86, 0x0F); }
 void jna(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); }
-void jnae(const char *label, LabelType type = T_AUTO) { jnae(std::string(label), type); }
 void jnae(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); }
+void jnae(const char *label, LabelType type = T_AUTO) { jnae(std::string(label), type); }
 void jnae(const void *addr) { opJmpAbs(addr, T_NEAR, 0x72, 0x82, 0x0F); }
 void jnae(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); }
-void jnb(const char *label, LabelType type = T_AUTO) { jnb(std::string(label), type); }
 void jnb(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); }
+void jnb(const char *label, LabelType type = T_AUTO) { jnb(std::string(label), type); }
 void jnb(const void *addr) { opJmpAbs(addr, T_NEAR, 0x73, 0x83, 0x0F); }
 void jnb(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); }
-void jnbe(const char *label, LabelType type = T_AUTO) { jnbe(std::string(label), type); }
 void jnbe(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); }
+void jnbe(const char *label, LabelType type = T_AUTO) { jnbe(std::string(label), type); }
 void jnbe(const void *addr) { opJmpAbs(addr, T_NEAR, 0x77, 0x87, 0x0F); }
 void jnbe(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); }
-void jnc(const char *label, LabelType type = T_AUTO) { jnc(std::string(label), type); }
 void jnc(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); }
+void jnc(const char *label, LabelType type = T_AUTO) { jnc(std::string(label), type); }
 void jnc(const void *addr) { opJmpAbs(addr, T_NEAR, 0x73, 0x83, 0x0F); }
 void jnc(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); }
-void jne(const char *label, LabelType type = T_AUTO) { jne(std::string(label), type); }
 void jne(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); }
+void jne(const char *label, LabelType type = T_AUTO) { jne(std::string(label), type); }
 void jne(const void *addr) { opJmpAbs(addr, T_NEAR, 0x75, 0x85, 0x0F); }
 void jne(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); }
-void jng(const char *label, LabelType type = T_AUTO) { jng(std::string(label), type); }
 void jng(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); }
+void jng(const char *label, LabelType type = T_AUTO) { jng(std::string(label), type); }
 void jng(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7E, 0x8E, 0x0F); }
 void jng(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); }
-void jnge(const char *label, LabelType type = T_AUTO) { jnge(std::string(label), type); }
 void jnge(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); }
+void jnge(const char *label, LabelType type = T_AUTO) { jnge(std::string(label), type); }
 void jnge(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7C, 0x8C, 0x0F); }
 void jnge(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); }
-void jnl(const char *label, LabelType type = T_AUTO) { jnl(std::string(label), type); }
 void jnl(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); }
+void jnl(const char *label, LabelType type = T_AUTO) { jnl(std::string(label), type); }
 void jnl(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7D, 0x8D, 0x0F); }
 void jnl(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); }
-void jnle(const char *label, LabelType type = T_AUTO) { jnle(std::string(label), type); }
 void jnle(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); }
+void jnle(const char *label, LabelType type = T_AUTO) { jnle(std::string(label), type); }
 void jnle(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7F, 0x8F, 0x0F); }
 void jnle(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); }
-void jno(const char *label, LabelType type = T_AUTO) { jno(std::string(label), type); }
 void jno(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x71, 0x81, 0x0F); }
+void jno(const char *label, LabelType type = T_AUTO) { jno(std::string(label), type); }
 void jno(const void *addr) { opJmpAbs(addr, T_NEAR, 0x71, 0x81, 0x0F); }
 void jno(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x71, 0x81, 0x0F); }
-void jnp(const char *label, LabelType type = T_AUTO) { jnp(std::string(label), type); }
 void jnp(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); }
+void jnp(const char *label, LabelType type = T_AUTO) { jnp(std::string(label), type); }
 void jnp(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7B, 0x8B, 0x0F); }
 void jnp(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); }
-void jns(const char *label, LabelType type = T_AUTO) { jns(std::string(label), type); }
 void jns(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x79, 0x89, 0x0F); }
+void jns(const char *label, LabelType type = T_AUTO) { jns(std::string(label), type); }
 void jns(const void *addr) { opJmpAbs(addr, T_NEAR, 0x79, 0x89, 0x0F); }
 void jns(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x79, 0x89, 0x0F); }
-void jnz(const char *label, LabelType type = T_AUTO) { jnz(std::string(label), type); }
 void jnz(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); }
+void jnz(const char *label, LabelType type = T_AUTO) { jnz(std::string(label), type); }
 void jnz(const void *addr) { opJmpAbs(addr, T_NEAR, 0x75, 0x85, 0x0F); }
 void jnz(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); }
-void jo(const char *label, LabelType type = T_AUTO) { jo(std::string(label), type); }
 void jo(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x70, 0x80, 0x0F); }
+void jo(const char *label, LabelType type = T_AUTO) { jo(std::string(label), type); }
 void jo(const void *addr) { opJmpAbs(addr, T_NEAR, 0x70, 0x80, 0x0F); }
 void jo(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x70, 0x80, 0x0F); }
-void jp(const char *label, LabelType type = T_AUTO) { jp(std::string(label), type); }
 void jp(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); }
+void jp(const char *label, LabelType type = T_AUTO) { jp(std::string(label), type); }
 void jp(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7A, 0x8A, 0x0F); }
 void jp(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); }
-void jpe(const char *label, LabelType type = T_AUTO) { jpe(std::string(label), type); }
 void jpe(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); }
+void jpe(const char *label, LabelType type = T_AUTO) { jpe(std::string(label), type); }
 void jpe(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7A, 0x8A, 0x0F); }
 void jpe(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); }
-void jpo(const char *label, LabelType type = T_AUTO) { jpo(std::string(label), type); }
 void jpo(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); }
+void jpo(const char *label, LabelType type = T_AUTO) { jpo(std::string(label), type); }
 void jpo(const void *addr) { opJmpAbs(addr, T_NEAR, 0x7B, 0x8B, 0x0F); }
 void jpo(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); }
-void js(const char *label, LabelType type = T_AUTO) { js(std::string(label), type); }
 void js(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x78, 0x88, 0x0F); }
+void js(const char *label, LabelType type = T_AUTO) { js(std::string(label), type); }
 void js(const void *addr) { opJmpAbs(addr, T_NEAR, 0x78, 0x88, 0x0F); }
 void js(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x78, 0x88, 0x0F); }
-void jz(const char *label, LabelType type = T_AUTO) { jz(std::string(label), type); }
 void jz(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); }
+void jz(const char *label, LabelType type = T_AUTO) { jz(std::string(label), type); }
 void jz(const void *addr) { opJmpAbs(addr, T_NEAR, 0x74, 0x84, 0x0F); }
 void jz(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); }
 void lahf() { db(0x9F); }