images/blog-posts

JIT・GNU/Lightning

在之前的文章中我们了解了一点基础的汇编语法以及与C程序的混用技巧,现在我们进一步来学习使用及时编译技巧「JIT」。

关于JIT的简介「来自 wiki」

在计算机技术中,即时编译(英语:just-in-time compilation,缩写为JIT;又译及时编译、实时编译),也称为动态翻译或运行时编译,是一种执行计算机代码的方法,这种方法涉及在程序执行过程中(在执行期)而不是在执行之前进行编译。通常,这包括源代码或更常见的字节码到机器码的转换,然后直接执行。实现JIT编译器的系统通常会不断地分析正在执行的代码,并确定代码的某些部分,在这些部分中,编译或重新编译所获得的加速将超过编译该代码的开销。

简单来说就是在其它编程语言中动态生成并编译执行汇编语言。

GNU/Lightning

我们将使用由GNU提供的工具Lightning实现及时编译,关于Lightning的简介如下:

GNU Lightning是一个在运行时生成汇编语言代码的库;它非常快,非常适合即时 编译器,并且它在目标 CPU 上进行抽象,因为它向客户端公开了受 MIPS 和 SPARC 芯片启发的标准化 RISC 指令集。 GNU Lightning可用于复杂的代码生成任务。可用的后端涵盖 aarch64、alpha、arm、hppa、ia64、mips、powerpc、risc-v、s390、sparc 和 x86 架构。

安装Lightning

首先需要下载Lightning,可以去到官方提供的地址http://ftp.gnu.org/gnu/lightning/,下载最新或较新的版本。

下载之后进行解压,然后进入解压后的目录「例如: ~/Workspace/lightning-2.1.3」:

cd ~/Workspace/lightning-2.1.3

根据官方文档的安装说明https://www.gnu……#Installation,执行如下命令进行编译:

# 1.
./configure
# 2.
make check
# 3.
make install # 可能需要使用sudo获取权限

安装之后,我们可以运行命令sudo ldconfig刷新一下连接库。

编译测试官方示例

我们使用官方示例「incr」来测试一下lightning是否成功安装。

打开编辑器,然后键入如下代码:

#include <stdio.h>
#include <lightning.h>

static jit_state_t *_jit;

typedef int (*pifi)(int);    /* Pointer to Int Function of Int */

int main(int argc, char *argv[])
{
  jit_node_t  *in;
  pifi         incr;

  init_jit(argv[0]);
  _jit = jit_new_state();

  jit_prolog();                    /*      prolog              */
  in = jit_arg();                  /*      in = arg            */
  jit_getarg(JIT_R0, in);          /*      getarg R0           */
  jit_addi(JIT_R0, JIT_R0, 1);     /*      addi   R0, R0, 1    */
  jit_retr(JIT_R0);                /*      retr   R0           */

  incr = jit_emit();
  jit_clear_state();

  /* call the generated code, passing 5 as an argument */
  printf("%d + 1 = %d\n", 5, incr(5));

  jit_destroy_state();
  finish_jit();
  return 0;
}

保存代码并进行编译与执行:

gcc test.c -llightning
./a.out

如果编译成功则执行后输出如下内容:

5 + 1 = 6

该程序会在执行过程中动态编译一个「数值增一」的子汇编程序并在之后进行调用。关于上述代码的说明与讲解会写在下一篇文章中,感兴趣的朋友们,敬请期待!

SUBSCRIBE


🔒 No spam. Unsubscribe any time.

About kk

kk

Vincenzo Antedoro is an engineer who helps those who want to invest in renewables. For the rest he enjoys teaching with the method of learning by doing..

» More about kk