add test of rip
diff --git a/readme.md b/readme.md
index a8fa375..1eac7ea 100644
--- a/readme.md
+++ b/readme.md
@@ -1,5 +1,5 @@
 
-Xbyak 4.85 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
+Xbyak 4.86 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
 =============
 
 Abstract
@@ -277,6 +277,7 @@
 
 History
 -------------
+* 2015/Aug/18 ver 4.86 fix [rip + label] addressing with immediate value(thanks to whyisthisfieldhere)
 * 2015/Aug/10 ver 4.85 Address::operator==() is not correct(thanks to inolen)
 * 2015/Jun/22 ver 4.84 call() support variadic template if available(thanks to randomstuff)
 * 2015/Jun/16 ver 4.83 support movbe(thanks to benvanik)
diff --git a/readme.txt b/readme.txt
index 5c698c9..22c9d1c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,5 +1,5 @@
 

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

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

 

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

 ◎概要

@@ -296,6 +296,7 @@
 -----------------------------------------------------------------------------

 ◎履歴

 

+2015/08/16 ver 4.86 [rip + label]アドレッシングで即値を使うと壊れる(thanks to whyisthisfieldhere)

 2015/08/10 ver 4.85 Address::operator==()が間違っている(thanks to inolen)

 2015/07/22 ver 4.84 call()がvariadic template対応

 2015/05/24 ver 4.83 mobveサポート(thanks to benvanik)

diff --git a/test/rip-label-imm.cpp b/test/rip-label-imm.cpp
index a4016fd..4ed208e 100644
--- a/test/rip-label-imm.cpp
+++ b/test/rip-label-imm.cpp
@@ -3,22 +3,35 @@
 /*
 dump of vc
 
-0000000000450000 F3 0F C2 05 77 00 00 00 00 cmpeqss     xmm0,dword ptr [450080h]
-0000000000450009 F7 05 6D 00 00 00 21 00 00 00 test        dword ptr [450080h],21h
-0000000000450013 0F BA 25 65 00 00 00 03 bt          dword ptr [450080h],3
-000000000045001B C4 E3 79 0D 05 5B 00 00 00 03 vblendpd    xmm0,xmm0,xmmword ptr [450080h],3
-0000000000450025 C4 E3 79 0F 05 51 00 00 00 04 vpalignr    xmm0,xmm0,xmmword ptr [450080h],4
-000000000045002F C4 E3 7D 19 1D 47 00 00 00 0C vextractf128 xmmword ptr [450080h],ymm3,0Ch
-0000000000450039 C4 E3 75 46 05 3D 00 00 00 0D vperm2i128  ymm0,ymm1,ymmword ptr [450080h],0Dh
-0000000000450043 C4 E3 79 1D 15 33 00 00 00 2C vcvtps2ph   mmword ptr [450080h],xmm2,2Ch
-000000000045004D C7 05 29 00 00 00 34 12 00 00 mov         dword ptr [450080h],1234h
-0000000000450057 C1 25 22 00 00 00 03 shl         dword ptr [450080h],3
-000000000045005E D1 2D 1C 00 00 00    shr         dword ptr [450080h],1
-0000000000450064 48 0F A4 05 13 00 00 00 03 shld        qword ptr [450080h],rax,3
-000000000045006D 48 6B 05 0B 00 00 00 15 imul        rax,qword ptr [450080h],15h
-0000000000450075 C4 E3 FB F0 05 01 00 00 00 15 rorx        rax,qword ptr [450080h],15h
-000000000045007F C3                   ret
-0000000000450080 F0 DE BC 9A 78 56 34 12
+00000000003A0000 F3 0F C2 05 F1 00 00 00 00 cmpeqss     xmm0,dword ptr [3A00FAh]
+00000000003A0009 F7 05 E7 00 00 00 21 00 00 00 test        dword ptr [3A00FAh],21h
+00000000003A0013 0F BA 25 DF 00 00 00 03 bt          dword ptr [3A00FAh],3
+00000000003A001B C4 E3 79 0D 05 D5 00 00 00 03 vblendpd    xmm0,xmm0,xmmword ptr [3A00FAh],3
+00000000003A0025 C4 E3 79 0F 05 CB 00 00 00 04 vpalignr    xmm0,xmm0,xmmword ptr [3A00FAh],4
+00000000003A002F C4 E3 7D 19 1D C1 00 00 00 0C vextractf128 xmmword ptr [3A00FAh],ymm3,0Ch
+00000000003A0039 C4 E3 75 46 05 B7 00 00 00 0D vperm2i128  ymm0,ymm1,ymmword ptr [3A00FAh],0Dh
+00000000003A0043 C4 E3 79 1D 15 AD 00 00 00 2C vcvtps2ph   mmword ptr [3A00FAh],xmm2,2Ch
+00000000003A004D C7 05 A3 00 00 00 34 12 00 00 mov         dword ptr [3A00FAh],1234h
+00000000003A0057 C1 25 9C 00 00 00 03 shl         dword ptr [3A00FAh],3
+00000000003A005E D1 2D 96 00 00 00    shr         dword ptr [3A00FAh],1
+00000000003A0064 48 0F A4 05 8D 00 00 00 03 shld        qword ptr [3A00FAh],rax,3
+00000000003A006D 48 6B 05 85 00 00 00 15 imul        rax,qword ptr [3A00FAh],15h
+00000000003A0075 C4 E3 FB F0 05 7B 00 00 00 15 rorx        rax,qword ptr [3A00FAh],15h
+00000000003A007F F7 05 71 00 00 00 05 00 00 00 test        dword ptr [3A00FAh],5
+00000000003A0089 66 48 0F 3A 16 05 66 00 00 00 03 pextrq      qword ptr [3A00FAh],xmm0,3
+00000000003A0094 66 48 0F 3A 22 15 5B 00 00 00 05 pinsrq      xmm2,qword ptr [3A00FAh],5
+00000000003A009F 66 0F 3A 15 0D 51 00 00 00 04 pextrw      word ptr [3A00FAh],xmm1,4
+00000000003A00A9 81 15 47 00 00 00 45 23 01 00 adc         dword ptr [3A00FAh],12345h
+00000000003A00B3 0F BA 25 3F 00 00 00 34 bt          dword ptr [3A00FAh],34h
+00000000003A00BB 66 0F BA 3D 36 00 00 00 34 btc         word ptr [3A00FAh],34h
+00000000003A00C4 0F BA 35 2E 00 00 00 34 btr         dword ptr [3A00FAh],34h
+00000000003A00CC C1 15 27 00 00 00 04 rcl         dword ptr [3A00FAh],4
+00000000003A00D3 48 0F A4 05 1E 00 00 00 04 shld        qword ptr [3A00FAh],rax,4
+00000000003A00DC 0F 3A 0F 05 15 00 00 00 04 palignr     mm0,mmword ptr [3A00FAh],4
+00000000003A00E5 66 0F 3A DF 1D 0B 00 00 00 04 aeskeygenassist xmm3,xmmword ptr [3A00FAh],4
+00000000003A00EF C4 E3 79 60 15 01 00 00 00 07 vpcmpestrm  xmm2,xmmword ptr [3A00FAh],7
+00000000003A00F9 C3                   ret
+00000000003A00FA F0 DE BC 9A 78 56 34 12
 */
 struct Code : Xbyak::CodeGenerator {
 	Code()
@@ -38,6 +51,19 @@
 		shld(qword[rip + label], rax, 3);
 		imul(rax, qword[rip + label], 21);
 		rorx(rax, qword[rip + label], 21);
+		test(dword[rip + label], 5);
+		pextrq(ptr[rip + label], xmm0, 3);
+		pinsrq(xmm2, ptr[rip + label], 5);
+		pextrw(ptr[rip + label], xmm1, 4);
+		adc(dword[rip + label], 0x12345);
+		bt(byte[rip + label], 0x34);
+		btc(word[rip + label], 0x34);
+		btr(dword[rip + label], 0x34);
+		rcl(dword[rip + label], 4);
+		shld(qword[rip + label], rax, 4);
+		palignr(mm0, ptr[rip + label], 4);
+		aeskeygenassist(xmm3, ptr[rip + label], 4);
+		vpcmpestrm(xmm2, ptr[rip + label], 7);
 		ret();
 	L(label);
 		dq(0x123456789abcdef0ull);
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index 5ef3419..ae9c16c 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -100,7 +100,7 @@
 
 enum {
 	DEFAULT_MAX_CODE_SIZE = 4096,
-	VERSION = 0x4851 /* 0xABCD = A.BC(D) */
+	VERSION = 0x4860 /* 0xABCD = A.BC(D) */
 };
 
 #ifndef MIE_INTEGER_TYPE_DEFINED
diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h
index c07ce78..8bd6eb6 100644
--- a/xbyak/xbyak_mnemonic.h
+++ b/xbyak/xbyak_mnemonic.h
@@ -1,4 +1,4 @@
-const char *getVersionString() const { return "4.851"; }
+const char *getVersionString() const { return "4.86"; }
 void packssdw(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x6B); }
 void packsswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x63); }
 void packuswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x67); }