| /* |
| sample to use static memory |
| */ |
| #include <stdio.h> |
| #define XBYAK_NO_OP_NAMES |
| #include "xbyak/xbyak.h" |
| |
| MIE_ALIGN(4096) char buf[4096]; |
| |
| struct Code : Xbyak::CodeGenerator { |
| Code() |
| : Xbyak::CodeGenerator(sizeof(buf), buf) |
| { |
| puts("generate"); |
| printf("ptr=%p, %p\n", getCode(), buf); |
| #ifdef XBYAK32 |
| mov(eax, ptr [esp + 4]); |
| add(eax, ptr [esp + 8]); |
| #elif defined(XBYAK64_WIN) |
| lea(rax, ptr [rcx + rdx]); |
| #else |
| lea(rax, ptr [rdi + rsi]); |
| #endif |
| ret(); |
| Xbyak::CodeArray::protect(buf, sizeof(buf), Xbyak::CodeArray::PROTECT_RE); |
| } |
| ~Code() |
| { |
| Xbyak::CodeArray::protect(buf, sizeof(buf), Xbyak::CodeArray::PROTECT_RW); |
| } |
| } s_code; |
| |
| inline int add(int a, int b) |
| { |
| return reinterpret_cast<int (*)(int, int)>(buf)(a, b); |
| } |
| |
| int main() |
| { |
| int sum = 0; |
| for (int i = 0; i < 10; i++) { |
| sum += add(i, 5); |
| } |
| printf("sum=%d\n", sum); |
| } |