- 授权协议: 未知
- 开发语言: C/C++
- 操作系统: 跨平台
- 软件首页: https://github.com/asmjit/asmjit
- 软件文档: https://github.com/asmjit/asmjit/blob/master/README.md
- 官方下载: https://github.com/asmjit/asmjit
软件介绍
AsmJit 是一个完整的 JIT(Just-In-Time,运行时刻)的针对 C++ 语言的汇编器,可以生成兼容 x86 和 x64 架构的原生代码,不仅支持整个 x86/x64 的指令集(包括传统的 MMX 和最新的 AVX2 指令集),而且提供了一套可以在编译时刻进行语义检查的 API。
AsmJit 的使用也没有任何的限制,适用于多媒体,虚拟机的后端,远程代码生成等等。
特性
完全支持 x86/x64 指令集(包括 MMX,SSEx,AVX1/2,BMI,XOP,FMA3 和 FMA4)
底层次和高层次的代码生成概念
内置检测处理器特性功能
实现虚拟内存的管理,类似于 malloc 和 free
强大的日志记录和错误处理能力
体积小,可直接嵌入项目,编译后的体积在150至200kb之间
独立性强,不需要依赖其他任何的库(包括 STL 和 RTTI )
环境
1. 操作系统
BSD系列
Linux
Mac
Windows
2. C++编译器
Borland C++
Clang
GCC
MinGW
MSVC
其他的在”build.h”中文件中定义过的编译器
3. 后端
X86
X64
软件简介引自:http://www.cnblogs.com/lanrenxinxin/p/5021641.html
// Create simple DWORD memory copy function for 32 bit x86 platform:
// (for AsmJit version 0.8+)
//
// void ASMJIT_CDECL memcpy32(UInt32* dst, const UInt32* src, SysUInt len);
// AsmJit library
#include <AsmJit/AsmJitAssembler.h>
#include <AsmJit/AsmJitVM.h>
// C library - printf
#include <stdio.h>
using namespace AsmJit;
// This is type of function we will generate
typedef void (*MemCpy32Fn)(UInt32*, const UInt32*, SysUInt);
int main(int argc, char* argv[])
{
// ==========================================================================
// Part 1:
// Create Assembler
Assembler a;
// Constants
const int arg_offset = 8; // Arguments offset (STDCALL EBP)
const int arg_size = 12; // Arguments size
// Labels
Label L_Loop;
Label L_Exit;
// Prolog
a.push(ebp);
a.mov(ebp, esp);
a.push(esi);
a.push(edi);
// Fetch arguments
a.mov(edi, dword_ptr(ebp, arg_offset + 0)); // get dst
a.mov(esi, dword_ptr(ebp, arg_offset + 4)); // get src
a.mov(ecx, dword_ptr(ebp, arg_offset + 8)); // get len
// exit if length is zero
a.jz(&L_Exit);
// Bind L_Loop label to here
a.bind(&L_Loop);
a.mov(eax, dword_ptr(esi));
a.mov(dword_ptr(edi), eax);
a.add(esi, 4);
a.add(edi, 4);
// Loop until ecx is not zero
a.dec(ecx);
a.jnz(&L_Loop);
// Exit
a.bind(&L_Exit);
// Epilog
a.pop(edi);
a.pop(esi);
a.mov(esp, ebp);
a.pop(ebp);
// Return
a.ret();
// ==========================================================================
// ==========================================================================
// Part 2:
// Make JIT function
MemCpy32Fn fn = function_cast<MemCpy32Fn>(a.make());
// Ensure that everything is ok
if (!fn)
{
printf("Error making jit function (%u).\n", a.error());
return 1;
}
// Create some data
UInt32 dst[128];
UInt32 src[128];
// Call JIT function
fn(dst, src, 128);
// If you don't need the function anymore, it should be freed
MemoryManager::global()->free((void*)fn);
// ==========================================================================
return 0;
}
Web Data Mining
Bing Liu / Springer / 2011-6-26 / CAD 61.50
Web mining aims to discover useful information and knowledge from Web hyperlinks, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is not purely an ......一起来看看 《Web Data Mining》 这本书的介绍吧!
