diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..a947c68
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,214 @@
+
+ Xbyak 2.992 ; JIT assembler for x86(IA32), x64(AMD64, x86-64) by C++
+=============
+
+Abstract
+-------------
+
+This is a header file which enables dynamically to assemble x86(IA32), x64(AMD64, x86-64) mnemonic.
+
+Feature
+-------------
+header file only
+you can use Xbyak's functions at once if xbyak.h is included.
+
+### Supported Instructions Sets
+
+MMX/MMX2/SSE/SSE2/SSE3/SSSE3/SSE4/FPU(*partial*)/AVX
+
+### Supported OS
+
+* Windows Xp, Vista, Windows 7(32bit, 64bit)
+* Linux(32bit, 64bit)
+* Intel Mac ready
+
+### Supported Compilers
+
+* Visual Studio C++ 2005 Express Ed., VC2008 Pro, VC2010
+* gcc 4.5
+* mingw 3.4.2
+* icc 7.2
+
+>Note: "-fno-operator-names" option is required on gcc to avoid analyzing "and", "or", etc. as operators.
+
+Install
+-------------
+
+The following files are necessary. Please add the path to your compile directories.
+
+* xbyak.h
+* xbyak_bin2hex.h
+* xbyak_mnemonic.h
+
+Linux:
+
+ make install
+
+These files are copied into /usr/local/include/xbyak
+
+Syntax
+-------------
+
+Make Xbyak::CodeGenerator and make the class method and get the function
+pointer by calling cgetCode() and casting the return value.
+
+ NASM Xbyak
+ mov eax, ebx --> mov(eax, ebx);
+ inc ecx inc(ecx);
+ ret --> ret();
+
+### Addressing
+
+ (ptr|dword|word|byte) [base + index * (1|2|4|8) + displacement]
+ [rip + 32bit disp] ; x64 only
+
+ NASM Xbyak
+ mov eax, [ebx+ecx] --> mov (eax, ptr[ebx+ecx]);
+ test byte [esp], 4 --> test (byte [esp], 4);
+
+>you can use ptr for almost memory access unless you specify the size of memory.
+
+>dword, word and byte are class members, then don't use dword as unsigned int, for example.
+
+### AVX
+
+You can omit a destination for almost 3-op mnemonics.
+
+ vaddps(xmm1, xmm2, xmm3); // xmm1 <- xmm2 + xmm3
+ vaddps(xmm2, xmm3); // xmm2 <- xmm2 + xmm3
+ vaddps(xmm2, xmm3, ptr [rax]); // use ptr to access memory
+
+### Label
+
+ L("L1");
+ jmp ("L1");
+
+ jmp ("L2");
+ ...
+ a few mnemonics(8-bit displacement jmp)
+ ...
+ L("L2");
+
+ jmp ("L3", T_NEAR);
+ ...
+ a lot of mnemonics(32-bit displacement jmp)
+ ...
+ L("L3");
+
+>Call hasUndefinedLabel() to verify your code has no undefined label.
+
+#### 1. support @@, @f, @b like MASM
+
+ L("@@"); //
+ jmp("@b"); // jmp to
+ jmp("@f"); // jmp to
+ L("@@"); //
+ jmp("@b"); // jmp to
+
+#### 2. localization of label by calling inLocalLabel(), outLocallabel()
+
+ void func1()
+ {
+ inLocalLabel();
+ L(".lp"); //
+ ...
+ jmp(".lp"); // jmpt to
+ outLocalLabel();
+ }
+
+ void func2()
+ {
+ L(".lp"); //
+ func1();
+ jmp(".lp"); // jmp to
+ }
+
+### Code size
+The default max code size is 2048 bytes. Please set it in constructor of CodeGenerator() if you want to use large size.
+
+ class Quantize : public Xbyak::CodeGenerator {
+ public:
+ Quantize()
+ : CodeGenerator(8192)
+ {
+ }
+ ...
+ };
+
+See *main.cpp*
+
+Macro
+-------------
+
+* **XBYAK32** is defined on 32bit.
+* **XBYAK64** is defined on 64bit.
+* **XBYAK64_WIN** is defined on 64bit Windows
+* **XBYAK64_GCC** is defined on 64bit gcc
+
+Sample
+-------------
+
+* test0.cpp ; tiny sample of Xbyak(x86, x64)
+* quantize.cpp ; JIT optimized quantization by fast division(x86 only)
+* calc.cpp ; assemble and estimate a given polynomial(x86, x64)
+* bf.cpp ; JIT brainfuck(x86, x64)
+
+Remark
+-------------
+
+The current version does not support 3D Now!, 80bit FPU load/store and some special mnemonics.
+Please mail to me if necessary.
+
+License
+-------------
+
+modified new BSD License
+http://www.opensource.org/licenses/bsd-license.php
+
+History
+-------------
+
+* 2011/Feb/10 ver 2.992 beta fadd, fsubr, etc support st0 omitted parameter
+* 2011/Feb/07 ver 2.991 beta fix pextrw reg, xmm, imm
+* 2011/Feb/04 ver 2.99 beta support AVX
+* 2010/Dec/08 ver 2.31 fix ptr [rip + 32bit offset], support rdtscp
+* 2010/Oct/19 ver 2.30 support pclmulqdq, aesdec, aesdeclast, aesenc, aesenclast, aesimc, aeskeygenassist
+* 2010/Jun/07 ver 2.29 fix call(