AsmJit

C/C++ 编译器
授权协议 Zlib
开发语言 C/C++
所属分类 开发工具、 C/C++开发工具
软件类型 开源软件
地区 不详
投 递 者 徐英锐
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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;
}
  • 0x01  基本介绍 AsmJit是一个完整的JIT(just In Time, 运行时刻)的针对C++语言的汇编器,可以生成兼容x86和x64架构的原生代码,不仅支持整个x86/x64的指令集(包括传统的MMX和最新的AVX2指令集),而且提供了一套可以在编译时刻进行语义检查的API。AsmJit的使用也没有任何的限制,适用于多媒体,虚拟机的后端,远程代码生成等等。   0x02   特性 完全

  • void test2() { JitRuntime runtime;//JIT CodeHolder code;//代码 //代码与JIT绑定 code.init(runtime.codeInfo()); //代码 与 平台绑定 X86汇编 ASMAssembler myAsm(&code); //X86汇编 //利用CALL 获取返回地址 eax=返回地

  • #define ASMAssembler x86::Assembler #define ASMBuilder x86::Builder #define ASMCompiler x86::Compiler using namespace x86; typedef int(*_Func1)(void); void test1() { JitRuntime runtime;//JIT

  • Pytorch安装 [WinError 126] 找不到指定的模块\torch\lib\asmjit.dll 今天安装pytorch花费了一天的时间,我刚开始用官网上的这条命令: `pip install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html

  • OSError: [WinError 126] The specified module could not be found. Error loading "C:\Users\chunc\anaconda3\lib\site-packages\torch\lib\asmjit.dll" or one of its dependencies. 这个问题简直坑人,我在CSDN等国内的博客网站找的解

  • 运行程序时报错: Microsoft Visual C++ Redistributable is not installed, this may lead to the DLL load failure. It can be downloaded at https://aka.ms/vs/16/release/vc_redist.x64.exe Traceback

  • 解决方法,利用下方命令: pip install torch==1.5.1+cpu torchvision==0.6.1+cpu -f https://download.pytorch.org/whl/torch_stable.html 降低 pytorch 版本,至1.5.1 即可(注意,这里贴的下载命令为 Pytorch — CPU 版本的) Reference:https://stacko

  • python运行遇到的问题: Error loading “xx\lib\site-packages\torch\lib\asmjit.dll” or one of its dependencies. 解决方法:安装vc++运行库合集解决,安装包见上传的资源。

  • pytorch版本过高,重新安装低版本pytorch即 conda install pytorch==1.3.0 torchvision   一般建议虚拟环境安装 # 创建pytorch36虚拟环境 pytorch-cpu可以自己设名字 conda create -n pytorch-cpu python=3.6 #查看创建的虚拟环境 conda info --envs #激活环境 acti

 相关资料
  • 本文向大家介绍C++ 用Clang编译,包括了C++ 用Clang编译的使用技巧和注意事项,需要的朋友参考一下 示例 由于锵前端被设计为是与GCC兼容,当你交换可通过GCC编译大多数程序将编译g++通过clang++在构建脚本。如果没有-std=version给出,将使用gnu11。 习惯了MSVC的Windows用户可以cl.exe与交换clang-cl.exe。默认情况下,clang尝试与已安

  • 问题内容: 在编译C 时,您当然会为要编译的目标平台使用编译器。是否有针对JVM的C 编译器(因此,不是使用Java“本机”接口,而是将C ++代码编译为Java字节码)? 问题答案: NestedVM为Java字节码提供二进制转换。这是通过让GCC编译为MIPS二进制文件然后将其转换为Java类文件来完成的。因此,任何用C,C ++,Fortran或GCC支持的任何其他语言编写的应用程序都可以在

  • 我有以下代码: 我希望它输出“0,1,2,3”并停止,但它输出的是一系列无穷无尽的“0、1、2、3、4、5……” 看起来比较< code>di 如果我只是注释掉< code >,delta=mc[di],我会正常得到“0,1,2,3”。无辜作业有什么问题? 我正在使用Ideone.com g14带-O2选项。

  • 本文向大家介绍C/C++ 编译器优化介绍,包括了C/C++ 编译器优化介绍的使用技巧和注意事项,需要的朋友参考一下 0. gcc -o gcc -o 的优化仍然是机械的,想当然的。只有做到深入理解计算机系统,加深对编程语言的理解,才能写出最优化的代码。 Linux下gcc 优化级别的介绍  · gcc -o0 ⇒ 不提供任何优化;  · gcc -o1 ⇒ 最基本的优化,主要对代码的分支、表达式、

  • 代码不编译。我不明白错误是什么,请帮忙) 错误文本:g-Wall-c“main.cpp”(/media/ad/4GB-NTFS/prog/laba2)main。cpp:In函数“int main()”:main。cpp:46:12:错误:调用“Record::Record()”记录r1;^主要的cpp:12:1:注意:候选者:Record::Record(std::\u cxx11::string

  • 问题内容: 我一直在尝试在我的EC2实例上安装Gearman,但是当我尝试./configure gearmand时,我得到了: 现在,奇怪的是,GCC肯定已安装。 退货 但是,当我尝试运行命令“ gcc”时,找不到… 我试图通过yum擦除/安装/重新安装gcc和gcc-c ++,但这似乎无济于事。 有什么建议吗?提前致谢。 问题答案: 您可以通过链接到以下命令来解决此问题: 升级时,您可以保留多