add Label L() for convenience
diff --git a/readme.md b/readme.md
index 164c488..1604b06 100644
--- a/readme.md
+++ b/readme.md
@@ -1,5 +1,5 @@
 
-# Xbyak 5.70 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
+# Xbyak 5.71 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
 
 ## Abstract
 
@@ -246,13 +246,14 @@
 `assignL(dstLabel, srcLabel)` binds dstLabel with srcLabel.
 
 ```
-  Xbyak::Label label1, label2;
-L(label1);
+  Label label2;
+  Label label1 = L(); // make label1 ; same to Label label1; L(label1);
   ...
-  jmp(label2); // jump to label1 by assignL
+  jmp(label2); // label2 is not determined here
   ...
   assignL(label2, label1); // label2 <- label1
 ```
+The `jmp` in the above code jumps to label1 assigned by `assignL`.
 
 **Note**:
 * srcLabel must be used in `L()`.
@@ -391,6 +392,7 @@
 http://opensource.org/licenses/BSD-3-Clause
 
 ## History
+* 2018/Sep/04 ver 5.71 L() returns a new label instance
 * 2018/Aug/27 ver 5.70 support setProtectMode() and DontUseProtect for read/exec setting
 * 2018/Aug/24 ver 5.68 fix wrong VSIB encoding with vector index >= 16(thanks to petercaday)
 * 2018/Aug/14 ver 5.67 remove mutable in Address ; fix setCacheHierarchy for cloud vm
diff --git a/readme.txt b/readme.txt
index 689c533..b9746c8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,5 +1,5 @@
 

-    C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 5.70

+    C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 5.71

 

 -----------------------------------------------------------------------------

 ◎概要

@@ -245,8 +245,8 @@
 

 更にラベルの割り当てを行うassignL(dstLabel, srcLabel)という命令も追加されました。

 

-      Label label1, label2;

-    L(label1);

+      Label label2;

+    Label label1 = L(); // Label label1; L(label1);と同じ意味

       ...

       jmp(label2);

       ...

@@ -373,6 +373,7 @@
 -----------------------------------------------------------------------------

 ◎履歴

 

+2018/08/27 ver 5.71 新しいlabelインスタンスを返すL()を追加

 2018/08/27 ver 5.70 read/exec設定のためのsetProtectMode()とDontUseProtectの追加

 2018/08/24 ver 5.68 indexが16以上のVSIBエンコーディングのバグ修正(thanks to petercaday)

 2018/08/14 ver 5.67 Addressクラス内のmutableを削除 ; fix setCacheHierarchy for cloud vm

diff --git a/test/jmp.cpp b/test/jmp.cpp
index 4fb1221..6a3b461 100644
--- a/test/jmp.cpp
+++ b/test/jmp.cpp
@@ -889,6 +889,34 @@
 	}
 }
 
+CYBOZU_TEST_AUTO(returnLabel)
+{
+	struct Code : Xbyak::CodeGenerator {
+		Code()
+		{
+			xor_(eax, eax);
+		Label L1 = L();
+			test(eax, eax);
+			Label exit;
+			jnz(exit);
+			inc(eax); // 1
+			Label L2;
+			call(L2);
+			jmp(L1);
+		L(L2);
+			inc(eax); // 2
+			ret();
+		L(exit);
+			inc(eax); // 3
+			ret();
+		}
+	};
+	Code code;
+	int (*f)() = code.getCode<int (*)()>();
+	int r = f();
+	CYBOZU_TEST_EQUAL(r, 3);
+}
+
 CYBOZU_TEST_AUTO(testAssign)
 {
 	struct Code : Xbyak::CodeGenerator {
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index b7f9d51..d820b6d 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -105,7 +105,7 @@
 
 enum {
 	DEFAULT_MAX_CODE_SIZE = 4096,
-	VERSION = 0x5700 /* 0xABCD = A.BC(D) */
+	VERSION = 0x5710 /* 0xABCD = A.BC(D) */
 };
 
 #ifndef MIE_INTEGER_TYPE_DEFINED
@@ -2162,6 +2162,7 @@
 #endif
 	void L(const std::string& label) { labelMgr_.defineSlabel(label); }
 	void L(const Label& label) { labelMgr_.defineClabel(label); }
+	Label L() { Label label; L(label); return label; }
 	void inLocalLabel() { labelMgr_.enterLocal(); }
 	void outLocalLabel() { labelMgr_.leaveLocal(); }
 	/*
diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h
index f5ad10f..8eadcc5 100644
--- a/xbyak/xbyak_mnemonic.h
+++ b/xbyak/xbyak_mnemonic.h
@@ -1,4 +1,4 @@
-const char *getVersionString() const { return "5.70"; }
+const char *getVersionString() const { return "5.71"; }
 void adc(const Operand& op, uint32 imm) { opRM_I(op, imm, 0x10, 2); }
 void adc(const Operand& op1, const Operand& op2) { opRM_RM(op1, op2, 0x10); }
 void adcx(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0x66, isREG32_REG32orMEM, NONE, 0x38); }