aboutsummaryrefslogtreecommitdiffhomepage
path: root/readme.md
blob: e1f2ebfefd5fa7f9cb49746cba0c8a42fd4aa36c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

# Xbyak ![Badge Version] [![Badge License]][License] [![Badge Build]][Build Status]

*A C++ JIT assembler for `x86 (IA32)` , `x64(AMD64,x86-64)`*

<br>

---

<div align = 'center'>

**⸢ [Install] ⸥**  
**⸢ [Usage] ⸥**  
**⸢ [Changelog] ⸥**

</div>

---

<br>

## Abstract

Xbyak is a C++ header library that enables dynamically to assemble x86(IA32), x64(AMD64, x86-64) mnemonic.

The pronunciation of Xbyak is `kəi-bja-k`.
It is named from a Japanese word [開闢](https://translate.google.com/?hl=ja&sl=ja&tl=en&text=%E9%96%8B%E9%97%A2&op=translate), which means the beginning of the world.

<br>

## Feature

* header file only
* Intel/MASM like syntax
* fully support AVX-512

**Note**:
Use `and_()`, `or_()`, ... instead of `and()`, `or()`.
If you want to use them, then specify `-fno-operator-names` option to gcc/clang.

<br>

### News

- WAITPKG instructions (tpause, umonitor, umwait) are supported.
- MmapAllocator supports memfd with user-defined strings. see sample/memfd.cpp
- strictly check address offset disp32 in a signed 32-bit integer. e.g., `ptr[(void*)0xffffffff]` causes an error.
  - define `XBYAK_OLD_DISP_CHECK` if you need an old check, but the option will be remoevd.
- add `jmp(mem, T_FAR)`, `call(mem, T_FAR)` `retf()` for far absolute indirect jump.
- vnni instructions such as vpdpbusd supports vex encoding.
- (break backward compatibility) `push(byte, imm)` (resp. `push(word, imm)`) forces to cast `imm` to 8(resp. 16) bit.
- (Windows) `#include <winsock2.h>` has been removed from xbyak.h, so add it explicitly if you need it.
- support exception-less mode see. [Exception-less mode](#exception-less-mode)
- `XBYAK_USE_MMAP_ALLOCATOR` will be defined on Linux/macOS unless `XBYAK_DONT_USE_MMAP_ALLOCATOR` is defined.

<br>

### Supported OS

- **Windows** ( `Xp` , `Vista` , `7` , `10` *32 / 64 bit* )
- **MacOS** ( *Intel* )
- **Linux** ( *32 / 64 bit* )

<br>

### Supported Compilers

Almost C++03 or later compilers for x86/x64 such as Visual Studio, g++, clang++, Intel C++ compiler and g++ on mingw/cygwin.

<br>

## Author

#### 光成滋生 Mitsunari Shigeo
 **[Github]** | **[Website]** | [herumi@nifty.com](mailto:herumi@nifty.com)

<!----------------------------------------------------------------------------->

[Badge License]: https://img.shields.io/badge/License-BSD_3--Clause-blue.svg
[Badge Version]: https://img.shields.io/badge/Version_6.04-00B2FF
[Badge Build]: https://github.com/herumi/xbyak/actions/workflows/main.yml/badge.svg

[License]: COPYRIGHT

[Changelog]: Documentation/Changelog.md
[Install]: Documentation/Install.md
[Usage]: Documentation/Usage.md

[Build Status]: https://github.com/herumi/xbyak/actions/workflows/main.yml

[Website]: http://herumi.in.coocan.jp/
[Github]: https://github.com/herumi