diff --git a/readme.md b/readme.md
index d945615..f99de64 100644
--- a/readme.md
+++ b/readme.md
@@ -1,5 +1,5 @@
 
-Xbyak 5.34 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
+Xbyak 5.40 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
 =============
 
 Abstract
@@ -220,6 +220,15 @@
 * srcLabel must be used in L().
 * dstLabel must not be used in L().
 
+Label::getAddress() returns the address specified by the label instance and 0 if not specified.
+```
+// not AutoGrow mode
+Label  label;
+assert(label.getAddress() == 0);
+L(label);
+assert(label.getAddress() == getCurr());
+```
+
 ### Rip
 ```
 Label label;
@@ -323,6 +332,7 @@
 
 History
 -------------
+* 2016/Dec/14 ver 5.40 add Label::getAddress() method to get the pointer specified by the label
 * 2016/Dec/09 ver 5.34 fix handling of negative offsets when encoding disp8N(thanks to rsdubtso)
 * 2016/Dec/08 ver 5.33 fix encoding of vpbroadcast{b,w,d,q}, vpinsr{b,w}, vpextr{b,w} for disp8N
 * 2016/Dec/01 ver 5.32 rename __xgetbv() to _xgetbv() to support clang for Visual Studio(thanks to freiro)
diff --git a/readme.txt b/readme.txt
index c2f8f4c..b5b87aa 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,5 +1,5 @@
 
-    C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 5.34
+    C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 5.40
 
 -----------------------------------------------------------------------------
 ◎概要
@@ -258,6 +258,16 @@
 * srcLabelはL()により飛び先が確定していないといけません。
 * dstLabelはL()により飛び先が確定していてはいけません。
 
+ラベルは`getAddress()`によりそのアドレスを取得できます。
+未定義のときは0が返ります。
+```
+// not AutoGrow mode
+Label label;
+assert(label.getAddress(), 0);
+L(label);
+assert(label.getAddress(), getCurr());
+```
+
 ・Xbyak::CodeGenerator()コンストラクタインタフェース
 
 @param maxSize [in] コード生成最大サイズ(デフォルト4096byte)
@@ -333,6 +343,7 @@
 -----------------------------------------------------------------------------
 ◎履歴
 
+2016/12/14 ver 5.40 Labelが示すアドレスを取得するLabel::getAddress()追加
 2016/12/07 ver 5.34 disp8N時の負のオフセット処理の修正(thanks to rsdubtso)
 2016/12/06 ver 5.33 disp8N時のvpbroadcast{b,w,d,q}, vpinsr{b,w}, vpextr{b,w}のバグ修正
 2016/12/01 ver 5.32 clang for Visual Studioサポートのために__xgetbv()を_xgetbv()に変更(thanks to freiro)
diff --git a/test/jmp.cpp b/test/jmp.cpp
index 338aae3..eb2c9c7 100644
--- a/test/jmp.cpp
+++ b/test/jmp.cpp
@@ -1001,15 +1001,28 @@
 		, a1(0)
 		, a3(0)
 	{
+		bool autoGrow = size != 4096;
 		nop();
 	L(L1);
+		if (autoGrow) {
+			CYBOZU_TEST_EQUAL_POINTER(L1.getAddress(), 0);
+		}
 		a1 = getSize();
 		nop();
 		jmp(L2);
+		if (autoGrow) {
+			CYBOZU_TEST_EQUAL_POINTER(L2.getAddress(), 0);
+		}
 	L(L3);
 		a3 = getSize();
+		if (autoGrow) {
+			CYBOZU_TEST_EQUAL_POINTER(L3.getAddress(), 0);
+		}
 		nop();
 		assignL(L2, L1);
+		if (autoGrow) {
+			CYBOZU_TEST_EQUAL_POINTER(L2.getAddress(), 0);
+		}
 	}
 };
 
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index 9f72c78..4b10626 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -105,7 +105,7 @@
 
 enum {
 	DEFAULT_MAX_CODE_SIZE = 4096,
-	VERSION = 0x5340 /* 0xABCD = A.BC(D) */
+	VERSION = 0x5400 /* 0xABCD = A.BC(D) */
 };
 
 #ifndef MIE_INTEGER_TYPE_DEFINED
@@ -786,6 +786,7 @@
 	size_t maxSize_;
 	uint8 *top_;
 	size_t size_;
+	bool isCalledCalcJmpAddress_;
 
 	/*
 		allocate new memory and copy old data to the new area
@@ -805,11 +806,13 @@
 	*/
 	void calcJmpAddress()
 	{
+		if (isCalledCalcJmpAddress_) return;
 		for (AddrInfoList::const_iterator i = addrInfoList_.begin(), ie = addrInfoList_.end(); i != ie; ++i) {
 			uint64 disp = i->getVal(top_);
 			rewrite(i->codeOffset, disp, i->jmpSize);
 		}
 		if (alloc_->useProtect() && !protect(top_, size_, true)) throw Error(ERR_CANT_PROTECT);
+		isCalledCalcJmpAddress_ = true;
 	}
 public:
 	explicit CodeArray(size_t maxSize, void *userPtr = 0, Allocator *allocator = 0)
@@ -818,6 +821,7 @@
 		, maxSize_(maxSize)
 		, top_(type_ == USER_BUF ? reinterpret_cast<uint8*>(userPtr) : alloc_->alloc((std::max<size_t>)(maxSize, 1)))
 		, size_(0)
+		, isCalledCalcJmpAddress_(false)
 	{
 		if (maxSize_ > 0 && top_ == 0) throw Error(ERR_CANT_ALLOC);
 		if ((type_ == ALLOC_BUF && alloc_->useProtect()) && !protect(top_, maxSize, true)) {
@@ -913,6 +917,7 @@
 		addrInfoList_.push_back(AddrInfo(offset, val, size, mode));
 	}
 	bool isAutoGrow() const { return type_ == AUTO_GROW; }
+	bool isCalledCalcJmpAddress() const { return isCalledCalcJmpAddress_; }
 	/**
 		change exec permission of memory
 		@param addr [in] buffer address
@@ -1258,6 +1263,7 @@
 	}
 	bool hasUndefClabel() const { return hasUndefinedLabel_inner(clabelUndefList_); }
 	const uint8 *getCode() const { return base_->getCode(); }
+	bool isReady() const { return !base_->isAutoGrow() || base_->isCalledCalcJmpAddress(); }
 };
 
 inline Label::Label(const Label& rhs)
@@ -1280,7 +1286,7 @@
 }
 inline const uint8* Label::getAddress() const
 {
-	if (mgr == 0) return 0;
+	if (mgr == 0 || !mgr->isReady()) return 0;
 	size_t offset;
 	if (!mgr->getOffset(&offset, *this)) return 0;
 	return mgr->getCode() + offset;
