LuaJIT
文章平均质量分 86
后面有时间了,会持续更新该系列,对LuaJIT解释器和JIT模式的运行机制和原理,以及实现方式做一个详细的介绍。
yelvens
我很懒,什么都没留下…
展开
-
基于Trace的类型特化动态语言JIT编译
动态语⾔JavaScript、Python 和 Ruby 等语⾔⾮常流⾏,因为它们表达能⼒强、⾮专业⼈⼠也能轻松使⽤,并且部署起来就像分发源⽂件⼀样简单。它们既可⽤于⼩型脚本,也可⽤于复杂的应⽤程序。例如,JavaScript 是客户端 Web 编程的事实标准并⽤于基于浏览器的⽣产⼒应⽤程序(例如 Google Mail、Google Docs 和 Zimbra Collaboration Suite)的应⽤程序逻辑。原创 2024-07-18 18:28:31 · 962 阅读 · 0 评论 -
LuaJIT Bytecode结构布局
假设现在有两个寄存器PC和INS,PC存放Bytecode的地址,INS存放PC对应地址处的Bytecode值,则可以利用以下伪代码对Bytecode访问,其中。中的汇编代码在预处理阶段变成二进制机器码,然后再使用内存映射将机器码映射到虚拟内存,等运行时便可以直接运行被映射的二进制代码。中查找相应的函数指针,再执行相应的函数。等解释执行的逻辑完成,开始让PC指向下一条Bytecode指令,重复同样的过程。运行时被映射的二进制代码的地址(函数指针),存放在。类型的动态数组中,数组的初始。原创 2023-06-15 17:25:58 · 4006 阅读 · 5 评论 -
LuaJIT 栈帧布局(stack frames layout)
但是用堆内存代替寄存器和运行时栈在虚拟机层面的访问时效是相同(都是访问内存),所以我们可以效仿没有寄存器文件的龙芯处理器,在LuaJIT虚拟机中去除寄存器这一概念,只保留LuaJIT的运行时栈,LuaJIT也正是这么做的。主调函数调用被调函数之前,会先把被调函数的stack结构布置好,函数对象、参数放入指定位置,并在stack上留下存放PC的空间(这个PC以后再介绍吧,其实就是放函数调用返回后,将要执行的指令的)。,将slot 1中的值和slot 0号中的值相加,结果存放在slot 1号中。原创 2023-03-20 11:39:45 · 808 阅读 · 0 评论 -
LuaJIT 常量数组(constant array)
Lua source中出现的常量依次是131072、262144、1310721、131072,它们均为const number,所以在解析时将131072放在了索引0处,262144放在了索引1处,1310721放在了索引2处,解析到第二个131072时,发现该常量已经出现过且在索引0处,此时只需要将0放在操作数D上即可(中Node结构体,val和上面说过的TValue数组的索引对应,作为常量表slot,key则是常量值或字符串的sid,next存放下一个元素的地址。HashTable节点类型的定义是。原创 2023-03-17 13:37:01 · 730 阅读 · 0 评论 -
LuaJIT SSA IR介绍
LuaJIT资料挺少,可以一手学习的基本上只有官方文档:http://wiki.luajit.org/SSA-IR-2.0,但是目前这个文档的介绍被作者删了。在文档被删之前,我按照自己的理解,对官网上的部分内容做了记录。等后面我想优化了,再把这一块内容好好优化一些,毕竟写这边文章的时候,我刚接触LuaJIT,对LuaJIT掌握的还原创 2022-12-09 16:47:46 · 1191 阅读 · 0 评论 -
LuaJIT Bytecode介绍
关于Bytecode介绍的官方文档:[http://wiki.luajit.org/Bytecode-2.0](http://wiki.luajit.org/Bytecode-2.0)但是最近发现作者将Bytecode和SSA IR的介绍的文档删除了,也不知道是为什么。虽然那些文档写的不太详细,除非看它们在LuaJIT中的具体实现代码,否则很难看懂。这篇文章我尽量说详细点,会结合Bytecode在代码中的具体定义,希望对需要的同学有所帮助。在LuaJIT的源码中,关于Bytecode的指令格式的定义原创 2022-12-09 16:28:07 · 1656 阅读 · 0 评论 -
LuaJIT源码结构梳理
5、Bytecode相关的一些定义和操作,定义bc指令格式,bc的dump、read以及write操作。dispatch是跟Bytecode对应的函数相关的一个结构,也是一个很重要的内容,后续会专门讲解。4、IR汇编器,JIT模式下IR到各种目标机器码的映射(SSA IR -> machine code),如果要支持一个新的架构,这块内容是移植的重点。如果要支持一个新的架构,这块内容也是移植的重点。15、Trace记录器(bytecode -> SSA IR),这块内容还是很重要的,基本都是要掌握的。原创 2022-04-15 11:39:35 · 2136 阅读 · 14 评论