v8学习笔记(六) 汇编过程
v8汇编过程
根据抽象语法树FunctionLiteral创建Code对象(内含机器指令),返回JSFunction对象.
MakeCode():
1.增加返回语句: Rewriter::Process(FunctionLiteral) 向抽象语法树的语句数 组Body_添加ReturnStatement(返回语句)
2.优化AST: Rewriter::Optimize(FunctionLiteral)优化抽象语法树
3.产生机器码(机器指令)
1.创建代码产生器FullCodeGenerator(AstVisitor的子类 ):
内含汇编器MacroAssembler(根据硬件架构宏来选择相应的汇编器对象).
v8目前支持4个硬件架构: V8_TARGET_ARCH_IA32
V8_TARGET_ARCH_X84
V8_TARGET_ARCH_ARM
V8_TARGET_ARCH_MIPS
2.调用FullCodeGenerator::Generate(CompilationInfo*,Mode)开始汇编
(1)代码产生器访问AST ,根据语义调用汇编器(MacroAssembler)产生相应的机器指令并放入汇编器的缓冲区.
共有5个步骤:
---- 若Mode为PRIMARY,则 Allocate locals
Allocate local context
Allocate arguments object
----Declarations:汇编抽象语法树的Scope中变量和函数声明对象(ZoneList<Declaration*>)
---- Stack check:汇编栈检验语句
---- Body:汇编非声明语句(语句数组的所有语句)
---- return:汇编返回语句
(2)创建一个CodeDesc对象描述产生的机器指令,再创建Code对象Factory::NewCode(….)
struct CodeDesc { byte* buffer; //缓冲地址
int buffer_size; //缓冲大小
int instr_size; //指令总长度
int reloc_size; //重定位信息长度
Assembler* origin; //汇编器
};
|<--------------- buffer_size ---------------->|
|<-- instr_size -->| |<-- reloc_size -->|
+==================+========+==================+
机器指令缓冲 | instructions | free | reloc info |
+==================+========+==================+
4.结尾操作
根据 抽象语法树FunctionLiteral+Code+CompilationInfo创建SharedFunctionInfo ,
再创建JSFunction对象,Handle<JSFunction>转化为API Handle<Script>,返回
v8学习笔记(六) 汇编过程相关推荐
- v8学习笔记(七) 执行过程
v8执行过程 JS源码经过v8编译后得到Handle<Script>,调用API Script的Run()运行. (1)由API进入v8内部,取到JSFunction对象 ...
- v8学习笔记(五) 编译过程
v8编译过程(parser.cc文件) 1.创建编译环境MakeAST() 解析器AstBuildingParser parser->扫描器Scanner scanner_ 扫描器结构: (1) ...
- 吴恩达《机器学习》学习笔记六——过拟合与正则化
吴恩达<机器学习>学习笔记六--过拟合与正则化 一. 过拟合问题 1.线性回归过拟合问题 2.逻辑回归过拟合问题 3.过拟合的解决 二. 正则化后的代价函数 1.正则化思想 2.实际使用的 ...
- Java学习笔记 六、面向对象编程中级部分
Java学习笔记 六.面向对象编程中级部分 包 包的注意事项和使用细节 访问修饰符 访问修饰符的注意事项和使用细节 面向对象编程三大特征 封装 封装的实现步骤(三步) 继承 继承的细节问题 继承的本质 ...
- Ethernet/IP 学习笔记六
Ethernet/IP 学习笔记六 EtherNet/IP defines two primary types of communications: explicit and implicit (Ta ...
- Hadoop学习笔记—10.Shuffle过程那点事儿
Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...
- 5G/NR 学习笔记 - RAR随机接入过程
5G/NR 学习笔记 - RAR随机接入过程 随机接入的目的 在小区搜索过程之后,UE已经与小区取得了下行同步,因此UE能够接收下行数据.但UE只有与小区取得上行同步,才能进行上行传输.UE通过随机接 ...
- ROS学习笔记六:理解ROS服务和参数
ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...
- opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
最新文章
- 各种注意力机制PyTorch实现
- html用JQuery自定义表单验证。
- 5G NGC — AF 的 Service information
- 注释标记的原则_它关系到平台如何标记操纵的媒体。 这是设计师应遵循的12条原则。
- 使用^、(异或、并且)位运算 实现算数加法(+)
- 万年历c语言大作业实验,C语言实现万年历效果
- Linux学习笔记4.4-Linux重定向
- [python]python学习笔记(三)——编译
- 微软开源 Outlook for iOS 暗黑模式解决方案:支持 iOS 11 及更高版本
- .NET 将 .config 文件嵌入到程序集
- spring boot 下使用@ConponentScan注解遇到的问题
- 爬虫基本知识(转载)
- 《深入理解Android:卷III A》一一2.2Java层中的Binder分析
- DSP6678的多核启动
- android开发学习-日常用到的好东西-常用技巧分享
- 02-ElasticSearch创建索引
- 为什么用conda?
- 单纯版九九乘法口诀表
- ng-template、ng-content、ng-container
- 各大银行网银转账手续费一览表