当前位置: 首页 > 工具软件 > LuaJIT > 使用案例 >

luajit开发文档中文版(一)下载和安装

孔鸿哲
2023-12-01

2022年6月10日15:32:51

luajit开发文档中文版(一)下载和安装

luajit开发文档中文版(二)LuaJIT扩展

luajit开发文档中文版(三)FAQ 常见问题

luajit开发文档wiki中文版(一) 总目录

luajit开发文档wiki中文版(二) LuaJIT 扩展

luajit开发文档wiki中文版(三)性能调优和测试

luajit开发文档wiki中文版(四) LuaJIT 内部结构

luajit开发文档wiki中文版(五) 系统集成

luajit开发文档wiki中文版(六) LuaJIT 开发

LuaJIT 是Lua编程语言的即时编译器(JIT) 。Lua 是一种功能强大、动态且轻量级的编程语言。它可以嵌入或用作通用的独立语言。

LuaJIT 版权所有 © 2005-2022 Mike Pall,在 MIT 开源许可下发布。

兼容性

WindowsLinuxBSDmacOSPOSIX
EmbeddedAndroidiOS
PS3PS4PS VitaXbox 360
GCCCLANG
LLVM
MSVC
x86x64ARMPPCe500MIPS
Lua 5.1
API+ABI
+ JIT+ BitOp+ FFIDrop-in
DLL/.so

概述

3x
-  100x
115 KB
VM
90 KB
JIT
63 KLOC
C
24 KLOC
ASM
11 KLOC
Lua

LuaJIT 已成功用作游戏、设备、网络和图形应用程序、数值模拟、交易平台和许多其他专业应用程序中的脚本中间件。它可以从嵌入式设备、智能手机、台式机扩展到服务器场。它结合了高灵活性、高性能和无与伦比的低内存占用

LuaJIT 自 2005 年以来一直在持续发展。它被广泛认为是最快的动态语言实现之一。自首次发布以来,它在许多跨语言基准测试中的表现都优于其他动态语言——通常有很大的优势。

对于LuaJIT 2.0,整个 VM 已经从头开始重写,并不断优化性能。它结合了用汇编程序编写的高速解释器和最先进的 JIT 编译器

创新的跟踪编译器集成了先进的、基于 SSA 的优化和高度调整的代码生成后端。与动态语言相关的开销大幅减少,使其能够突破传统上为离线静态语言编译器保留的性能范围。

下载

公共 git 存储库

公共git存储库包含积极开发的分支的当前状态。您可以使用以下命令克隆它:

git clone https://luajit.org/git/luajit.git

注意:这不是可浏览的资源,存储库只能通过 git 客户端访问。

这会在luajit 下创建一个新的目录树。更改它,切换到您要使用的分支并按照通常的构建说明进行操作。使用git pull从(只读)公共存储库中获取更新。还有一个 可浏览的镜像 和一个 GitHub 镜像

git master分支将被逐步淘汰并固定到 v2.0分支。请改用 版本化分支v2.1 或v2.0 。

积极开发的分支发布

仅偶尔发布。强烈建议您关注 git 分支。

需要发布的发行版应该定期对分支进行快照。不要试图挑选或反向移植单个更改,无论独立的单个更改看起来如何(因为它们通常不是)。

注意:每个版本的 tar.gz 和 zip 文件具有相同的内容——您只需要下载其中一个。

文件名日期.tar.gz。压缩
LuaJIT-2.1.0-beta32017-05-011001K ▼1130K ▼
LuaJIT-2.0.52017-05-01830K ▼940K ▼

历史版本

这是历史版本的存档包的列表。请考虑使用积极开发的版本,除非您有特殊需要。

文件名日期.tar.gz。压缩
LuaJIT-1.1.82012-04-16362K ▼423K ▼
LuaJIT-1.0.32005-09-08301K ▼ 

SHA256 校验和

1ad2e34b111c802f9d0cdf019e986909123237a28c746b21295b63c9e785d9c3 LuaJIT-2.1.0-beta3.tar.gz
fcc4069bfaf909f762844d6404a8c5940591b00237ffce1781e887a0964140da LuaJIT-2.1.0-beta3.zip
874b1f8297c697821f561f9b73b57ffd419ed8f4278c82e05b48806d30c1e979 LuaJIT-2.0.5.tar.gz
95f655cff930781619f0fbbab707fb8c05f406d9007a3505c8243e3dbbfacec8 LuaJIT-2.0.5.zip
42f095d0215d76c29b7b040ad52dddc1783ffc6e3021b8a831627973a8a32862 LuaJIT-1.1.8.tar.gz
d59751726e6d3f22a4b3cfb158d728b8feea6aa3b9ee30af610685bc28b0e6c8 LuaJIT-1.1.8.zip
e39204aad8d2a3f9ef74a4a515fedf3cce3f55ff247af8ae50f2a8cb01f257c3 LuaJIT-1.0.3.tar.gz

安装

LuaJIT 仅作为源包分发。本页介绍了如何使用不同的操作系统和 C 编译器构建和安装 LuaJIT。

对于不耐烦的人(在 POSIX 系统上)

make && sudo make install

要求

系统

LuaJIT 目前在大多数系统上都是开箱即用的:

OSMin. VersionRequirementsLuaJIT Versions
Windows7x86 or x64, ARM64: TBAv2.0 –
Linux  v2.0 –
*BSD  v2.0 –
macOS (OSX)10.4 v2.1 –
POSIX mmap, dlopenv2.0 –
Android4.0Recent Android NDKv2.0 –
iOS3.0Xcode iOS SDKv2.1 –
PS3 PS3 SDKv2.0 – v2.1 EOL
PS4 PS4 SDK (ORBIS)v2.0 –
PS5 PS5 SDK (PROSPERO)v2.1 –
PS Vita PS Vita SDK (PSP2)v2.0 – v2.1 EOL
Xbox 360 Xbox 360 SDK (XEDK)v2.0 – v2.1 EOL
Xbox One Xbox One SDK (DURANGO)v2.1 –
Nintendo Switch NintendoSDK + NX Addonv2.1 –

代码库为更多系统定义了兼容性,但没有官方支持。

工具链

构建 LuaJIT 需要基于 GCC、Clang/LLVM 或 MSVC++ 的最新工具链。

基于 Makefile 的构建系统需要 GNU Make 并支持交叉构建。为 MSVC++ 构建和控制台交叉构建提供了批处理文件。

CPU 架构

CPUBitsRequirementsVariantsLuaJIT Versions
x8632v2.1+: SSE2 v2.0 –
x6464  v2.0 –
ARM32ARMv5+, ARM9E+hard-fp + soft-fpv2.0 –
ARM6464 ARM64le + ARM64bev2.1 –
PPC3232 hard-fp + soft-fpv2.0 – v2.1 EOL
PPC/e50032e500v2 v2.0 EOL
MIPS3232MIPS32r1 – r5hard-fp + soft-fpv2.0 –
MIPS6464MIPS64r1 – r5hard-fp + soft-fpv2.1 –
MIPS6464MIPS64r6hard-fp + soft-fpv2.1 EOL
RISC-V64RVA22+ TBA

没有计划添加历史架构或继续支持报废 (EOL) 架构,因为不再有新的 CPU 通常可用。同样,没有计划支持边缘和/或事实上的死架构。

配置 LuaJIT

标准配置应该适用于大多数安装。通常不需要调整设置。以下文件包含所有用户可配置的设置:

  • src/luaconf.h设置一些配置变量。
  • Makefile具有安装LuaJIT 的设置(仅限 POSIX)。
  • src/Makefile具有在 POSIX、MinGW 或 Cygwin 下编译LuaJIT 的设置。
  • src/msvcbuild.bat具有使用 MSVC (Visual Studio) 编译 LuaJIT 的设置。

在更改任何设置之前,请阅读这些文件中的说明。

POSIX 系统(Linux、macOS、*BSD 等)

先决条件

根据您的发行版,您可能需要安装 GCC 包、开发头文件和/或完整的 SDK。例如,在当前的 Debian/Ubuntu 上,使用包管理器 安装libc6-dev 。

获取最新版本的推荐方法是从 git 存储库中拉取。

或者下载最新的 LuaJIT 源代码包(选择 .tar.gz)。将其移动到您选择的目录,打开终端窗口并切换到该目录。现在解压缩存档并更改为新创建的目录(将 XX.YY.ZZ 替换为您下载的版本):

tar zxf LuaJIT-XX.YY.ZZ.tar.gz
cd LuaJIT-XX.YY.ZZ

构建 LuaJIT

提供的 Makefile 尝试自动检测您的操作系统和编译器所需的设置。它们需要使用 GNU Make 运行,无论如何,这可能是您系统上的默认设置。只需运行:

make

这始终会构建本机二进制文件,具体取决于您运行此命令的主机操作系统。检查 交叉编译部分以获取更多选项。

默认情况下,仅在前缀/usr/local下搜索模块。您可以通过附加PREFIX选项为搜索路径添加额外的前缀 ,例如:

make PREFIX=/home/myself/lj2

请使用 LuaJIT 2.1 分支为 macOS (OSX)编译。

安装 LuaJIT

顶层 Makefile 默认安装 LuaJIT 在 /usr/local下,即可执行文件最终在 /usr/local/bin等等。您需要 root 权限才能写入此路径。因此,假设您的系统上安装了 sudo,请运行以下命令并输入您的 sudo 密码:

sudo make install

否则将目录前缀指定为绝对路径,例如:

make install PREFIX=/home/myself/lj2

显然,在构建和安装期间给出的前缀需要相同。

 

安装其中一个开源 SDK(MinGW或 Cygwin),它带有修改后的 GCC 以及所需的开发头文件。或者安装微软的 Visual Studio (MSVC)。

接下来,从 git 存储库中提取或下载源包并使用存档管理器(例如 Windows 资源管理器)将其解压到您选择的目录。

使用 MSVC 构建

打开“Visual Studio 命令提示符”(x86 或 x64),cd到您解压缩源代码的目录并运行以下命令:

cd src
msvcbuild

检查msvcbuild.bat文件以获取更多选项。然后按照下面的安装说明进行操作。

使用 MinGW 或 Cygwin 构建

打开命令提示符窗口并确保 MinGW 或 Cygwin 程序在您的路径中。然后cd到 git 存储库的目录或解压缩源的目录。然后为 MinGW 运行此命令:

mingw32-make

Or this command for Cygwin:

make

Then follow the installation instructions below.

然后按照下面的安装说明进行操作。

安装 LuaJIT

luajit.exelua51.dll(在src 目录下构建)复制到新创建的目录下(任何位置都可以)。在其下方添加lualua\jit目录,并将所有 Lua 文件从发行版的src\jit目录复制到后一个目录。

没有硬编码的绝对路径名——所有模块都是相对于安装luajit.exe的目录加载的(参见src/luaconf.h)。

交叉编译 LuaJIT

基于 GNU Makefile 的构建系统允许在任何主机上为任何受支持的目标进行交叉编译,只要两种架构具有相同的指针大小。如果您想在 x64 操作系统上交叉编译到任何 32 位目标,您需要安装 multilib 开发包(例如 Debian/Ubuntu 上的 libc6-dev-i386)并构建 32 位主机部分(HOST_CC="gcc - m32" )。

每当主机操作系统和目标操作系统不同时,您都需要指定TARGET_SYS,否则会出现汇编程序或链接器错误。例如,如果您在 Windows 或 macOS 主机上为嵌入式 Linux 或 Android 进行编译,则需要将TARGET_SYS=Linux添加到下面的示例中。对于最小的目标操作系统,您可能需要禁用src/Makefile中的内置分配器 并使用TARGET_SYS=Other。不要忘记为安装步骤指定相同的TARGET_SYS

下面的示例仅显示了一些流行的目标 - 请查看src/Makefile中的注释以获取更多详细信息。

# Cross-compile to a 32 bit binary on a multilib x64 OS
make CC="gcc -m32"

# Cross-compile on Debian/Ubuntu for Windows (mingw32 package)
make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows

CROSS前缀允许指定标准 的GNU 交叉编译工具链(Binutils、GCC 和匹配的 libc)。前缀可能会因构建工具链 的--target不同而有所不同(注意CROSS前缀后面有一个"-")。下面的示例使用适用于 Linux 的规范工具链三元组。

由于在运行时通常没有简单的方法来检测 CPU 功能,因此使用正确的 CPU 或架构设置进行编译非常重要。您可以在自己构建工具链时指定这些。或将 -mcpu=...-march=...添加到TARGET_CFLAGS。对于 ARM,拥有正确的-mfloat-abi=...设置也很重要。否则 LuaJIT 可能无法以目标 CPU 的全部性能运行。

# ARM soft-float
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
     TARGET_CFLAGS="-mfloat-abi=soft"

# ARM soft-float ABI with VFP (example for Cortex-A8)
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
     TARGET_CFLAGS="-mcpu=cortex-a8 -mfloat-abi=softfp"

# ARM hard-float ABI with VFP (armhf, requires recent toolchain)
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabihf-

# PPC
make HOST_CC="gcc -m32" CROSS=powerpc-linux-gnu-
# PPC/e500v2 (fast interpreter only)
make HOST_CC="gcc -m32" CROSS=powerpc-e500v2-linux-gnuspe-

# MIPS big-endian
make HOST_CC="gcc -m32" CROSS=mips-linux-
# MIPS little-endian
make HOST_CC="gcc -m32" CROSS=mipsel-linux-

您可以使用Android NDK为Android进行 交叉编译。请调整环境变量以匹配安装位置和所需的目标平台。例如,Android 4.1 对应于 ABI 级别 16。

# Android/ARM, armeabi-v7a (ARMv7 VFP), Android 4.1+ (JB)

NDKDIR=/opt/android/ndk
NDKBIN=$NDKDIR/toolchains/llvm/prebuilt/linux-x86_64/bin
NDKCROSS=$NDKBIN/arm-linux-androideabi-
NDKCC=$NDKBIN/armv7a-linux-androideabi16-clang
make HOST_CC="gcc -m32" CROSS=$NDKCROSS \
     STATIC_CC=$NDKCC DYNAMIC_CC="$NDKCC -fPIC" \
     TARGET_LD=$NDKCC TARGET_AR="$NDKBIN/llvm-ar rcus" \
     TARGET_STRIP=$NDKBIN/llvm-strip

请使用 LuaJIT 2.1 分支为 iOS (iPhone/iPad) 编译。

控制台的交叉编译

为控制台构建 LuaJIT 需要支持的主机编译器(x86 或 x64)和来自官方控制台 SDK 的交叉编译器。

由于控制台的限制,JIT 编译器被禁用,只构建快速解释器。这仍然比普通 Lua 快,但比 JIT 编译器慢得多。FFI 也被禁用,因为它在这样的环境中不是很有用。

以下命令构建一个静态库libluajit.a,它可以链接到您的游戏,就像 Lua 库一样。

要从Linux 主机(需要 32 位 GCC,即 multilib Linux/x64)或 Windows 主机(需要 32 位 MinGW) 交叉编译PS3 ,请运行以下命令:

make HOST_CC="gcc -m32" CROSS=ppu-lv2-

要从 Windows 主机交叉编译其他控制台,请打开“用于 VS 的本机工具命令提示符”。您需要选择 32 位或 64 位版本的主机编译器来匹配目标。然后cd到下面的src目录,您已在其中解压缩了源代码并运行表中给出的构建命令:

ConsoleBitsBuild Command
PS464ps4build
PS Vita32psvitabuild
Xbox 36032xedkbuild

请查看相应*.bat 文件中的注释以获取更多选项。

嵌入 LuaJIT

LuaJIT 与 Lua 5.1 API 兼容。如果你已经将 Lua 嵌入到你的应用程序中,你可能不需要做任何事情来切换到 LuaJIT,除了链接到不同的库:

  • 强烈建议使用提供的构建系统单独构建 LuaJIT。请不要尝试将各个源文件集成到您的构建树中。您很可能会弄错内部构建依赖项或弄乱编译器标志。像对待任何其他外部库一样对待 LuaJIT,并根据您的需要将您的应用程序与动态库或静态库链接。
  • 如果你想使用require()加载为普通 Lua 编译的 C 模块,你需要确保公共符号(例如lua_pushnumber)也被导出:
    • 在 POSIX 系统上,您可以链接到共享库或将静态库链接到您的应用程序。在后一种情况下,您需要从主可执行文件中导出所有公共符号(例如Linux 上的-Wl、-E)并添加外部依赖项(例如Linux 上的-lm -ldl)。
    • 由于 Windows 符号绑定到特定的 DLL 名称,因此您需要链接到由LuaJIT构建创建的 lua51.dll(不要重命名 DLL)。仅当您不打算在运行时加载 Lua/C 模块时,才可以在 Windows 上静态链接 LuaJIT。

使用 C API 函数初始化 LuaJIT 的其他提示:

  • 这是一个 将 Lua 或 LuaJIT 嵌入应用程序的简单示例。
  • 确保使用luaL_newstate。避免使用 lua_newstate,因为它使用系统中(较慢的)默认内存分配器(在 64 位架构上不支持此功能)。
  • 确保使用luaL_openlibs而不是直接调用luaopen_base等的旧 Lua 5.0 风格。
  • 要更改或扩展要加载的标准库列表, 请将 src/lib_init.c复制到您的项目并进行相应修改。确保jit库已加载,否则不会激活 JIT 编译器。
  • 用于按位运算的bit.*模块已经内置。无需将 Lua BitOp静态链接到您的应用程序。

分发维护者的提示

LuaJIT 构建系统为大多数基于 POSIX 的发行版的需求提供了额外的规定。如果您是某个发行版的包维护者,利用这些功能,并避免以无法形容的方式修补、颠覆、自动工具化或弄乱构建系统。

绝对不需要修补luaconf.h或任何 Makefile。并且请不要为您的软件包手动挑选文件 - 只需使用make install创建的任何文件。它创建的所有文件和目录 都是有原因的。

构建系统使用 GNU make 并根据您构建它的主机自动检测大多数设置。即使在沙盒中,这对于本机构建也应该可以正常工作。您可能需要将以下一些标志传递给 makemake install命令行以进行常规分发构建:

  • PREFIX覆盖安装路径,通常应设置为/usr。设置此项还会更改模块路径和查找共享库所需的路径。
  • DESTDIR是一个绝对路径,允许您安装到影子树而不是构建系统的根树。
  • MULTILIB为多库系统设置特定于体系结构的库路径组件。默认值为lib
  • 查看顶级Makefilesrc/Makefile 以了解要调整的其他变量。以下变量可能会被覆盖,但建议这样做,除非像交叉构建这样的特殊需求: BUILDMODE、CC、HOST_CC、STATIC_CC、DYNAMIC_CC、CFLAGS、HOST_CFLAGS、TARGET_CFLAGS、LDFLAGS、HOST_LDFLAGS、TARGET_LDFLAGS、TARGET_SHLDFLAGS、TARGET_FLAGS、LIBS、HOST_LIBS , TARGET_LIBS, 交叉, HOST_SYS, TARGET_SYS

构建系统有一个合并构建的特殊目标,即 make amalg。这会将 LuaJIT 内核编译为一个巨大的 C 文件,并允许 GCC 生成更快、更短的代码。唉,这在构建过程中需要大量内存。这对某些用户来说可能是个问题,这就是默认情况下不启用它的原因。但对于大多数构建农场来说,这应该不是问题。建议二进制发行版在其 LuaJIT 构建中使用此目标。

The tl;dr version of the above:

make amalg PREFIX=/usr && \
make install PREFIX=/usr DESTDIR=/tmp/buildroot

最后,如果您遇到任何困难,请先 与我联系,而不是将损坏的软件包发布给毫无戒心的用户。因为无论如何,他们通常会向我(上游)而不是你(包维护者)抱怨

 

运行 LuaJIT

LuaJIT 只有一个独立的可执行文件,在 POSIX 系统上称为luajit ,在 Windows上称为luajit.exe 。它可用于从命令行运行简单的 Lua 语句或整个 Lua 应用程序。它也有一个交互模式。

命令行选项

luajit独立可执行文件只是常规lua独立可执行文件的略微修改版本。它也支持相同的基本选项。luajit -h 打印可用选项的简短列表。有关详细信息,请查看 Lua 手册 。

LuaJIT 有一些额外的选项:

-b[选项] 输入输出

此选项保存或列出字节码。接受以下附加选项:

  • -l — 仅列出字节码。
  • -s — 去除调试信息(这是默认设置)。
  • -g - 保留调试信息。
  • -n name - 设置模块名称(默认值:从输入名称自动检测)
  • -t type - 设置输出文件类型(默认值:从输出名称自动检测)。
  • -a arch — 覆盖对象文件的体系结构(默认值:本机)。
  • -o os — 覆盖目标文件的操作系统(默认值:本机)。
  • -e chunk — 使用块字符串作为输入。
  • -(单个减号)— 使用标准输入作为输入和/或标准输出作为输出。

输出文件类型是根据输出文件名的扩展名自动检测的:

  • c — C 源文件,导出的字节码数据。
  • h — C 头文件,静态字节码数据。
  • objo - 对象文件,导出的字节码数据(特定于操作系统和体系结构)。
  • raw或任何其他扩展 - 原始字节码文件(便携式)。

笔记:

  • 有关字节码可移植性和兼容性的信息,另请参见string.dump() 。
  • 原始字节码格式的文件会被自动检测,并且可以像任何 Lua 源文件一样加载。例如,直接从命令行或使用 loadfile()、 dofile( )等。
  • 要将模块的字节码静态嵌入到您的应用程序中,请生成一个目标文件并将其与您的应用程序链接。
  • 在大多数基于 ELF 的系统(例如 Linux)上,您需要在链接应用程序时显式导出全局符号,例如:-Wl,-E
  • require()尝试从导出的​​符号(在Windows 上的*.exelua51.dll中)和package.cpath中的共享库加载嵌入的字节码数据。

典型使用示例:

luajit -b test.lua test.out # 保存字节码到 test.out 
luajit -bg test.lua test.out # 保存调试信息
luajit -be "print('hello world')" test.out # 保存命令行脚本

luajit - bl test.lua # List to stdout 
luajit -bl test.lua test.txt # List to test.txt 
luajit -ble "print('hello world')" # List cmdline script 

luajit -b test.lua test.obj # Generate object file 
# 将 test.obj 与您的应用程序链接并使用 require("test") 加载它

-j cmd[=arg[,arg...]]

此选项执行 LuaJIT 控制命令或激活可加载扩展模块之一。该命令首先在 jit.*库中查找。如果找不到匹配的函数,则加载名为jit.<cmd>的模块,并使用指定的参数(如果有)调用模块的start() 函数。-jcmd之间的空格是可选的。

以下是可用的 LuaJIT 控制命令:

  • -jon — 打开 JIT 编译器(默认)。
  • -joff — 关闭 JIT 编译器(仅使用解释器)。
  • -jflush — 刷新已编译代码的整个缓存。
  • -jv — 显示有关 JIT 编译器进度的详细信息。
  • -jdump — 转储在各个编译器阶段使用的代码和结构。

-jv和-jdump命令是用 Lua编写的扩展模块。它们主要用于调试 JIT 编译器本身。有关它们的选项和输出格式的描述,请阅读源代码开头的注释块。它们可以在源代码分发的lib目录中找到,也可以安装在jit目录下。默认情况下,这是POSIX 系统上的/usr/local/share/luajit-XX.YY.ZZ/jit(将 XX.YY.ZZ 替换为已安装的版本)。

-O[级别]-O[+]标志   -O-标志-Oparam=值

此选项允许对 JIT 编译器使用的优化进行微调控制。这主要用于调试 LuaJIT 本身。请注意,JIT 编译器非常快(我们讨论的是微秒到毫秒的范围)。禁用优化对其开销没有任何明显的影响,但通常会生成运行速度较慢的代码。

第一种形式设置了一个优化级别——这使得优化标志的特定组合成为可能。-O0关闭所有优化,数字越大,优化越多。省略级别(即仅-O)设置默认优化级别,在当前版本 中为-O3 。

第二种形式添加或删除单个优化标志。第三种形式将 VM 或 JIT 编译器的参数设置为特定值。

您可以多次使用此选项(如-Ocse -O-dce -Ohotloop=10)或使用逗号分隔多个设置(如-O+cse,-dce,hotloop=10)。这些设置从左到右应用,以后的设置会覆盖之前的设置。您可以自由混合这三种形式,但请注意,设置优化级别会覆盖所有早期标志。

以下是可用的标志以及启用它们的优化级别:

Flag-O1-O2-O3 
fold恒定折叠、简化和重新关联
cse公共子表达式消除
dce死码消除
narrow 将数字缩小为整数
loop 循环优化(代码提升)
fwd  负载转发 (L2L) 和存储转发 (S2L)
dse  死存储消除
abc  数组边界检查消除
sink  分配/存储下沉
fuse  将操作数融合为指令

以下是参数及其默认设置:

ParameterDefault 
maxtrace1000缓存中的跟踪数的最大值
maxrecord4000记录的 IR 指令数的最大值
maxirconst500迹线的 IR 常数数的最大值
maxside100根迹线的边迹数的最大值
maxsnap500跟踪的快照数的最大值
hotloop56检测热循环或热调用的迭代次数
hotexit10开始边跟踪的退出次数
tryside4编译侧迹的尝试次数
instunroll4不稳定循环的展开因子的最大值
loopunroll15侧迹中循环操作的展开因子的最大值
callunroll3伪递归调用的展开因子的最大值
recunroll2真正递归的展开因子最小值
sizemcode32每个机器代码区域的大小(以 KBytes 为单位) (Windows: 64K)
maxmcode512所有机器代码区域的总大小的最大值,以千字节为单位
 
 类似资料: