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学习笔记(六) 汇编过程相关推荐

  1. v8学习笔记(七) 执行过程

    v8执行过程          JS源码经过v8编译后得到Handle<Script>,调用API Script的Run()运行. (1)由API进入v8内部,取到JSFunction对象 ...

  2. v8学习笔记(五) 编译过程

    v8编译过程(parser.cc文件) 1.创建编译环境MakeAST() 解析器AstBuildingParser parser->扫描器Scanner scanner_ 扫描器结构: (1) ...

  3. 吴恩达《机器学习》学习笔记六——过拟合与正则化

    吴恩达<机器学习>学习笔记六--过拟合与正则化 一. 过拟合问题 1.线性回归过拟合问题 2.逻辑回归过拟合问题 3.过拟合的解决 二. 正则化后的代价函数 1.正则化思想 2.实际使用的 ...

  4. Java学习笔记 六、面向对象编程中级部分

    Java学习笔记 六.面向对象编程中级部分 包 包的注意事项和使用细节 访问修饰符 访问修饰符的注意事项和使用细节 面向对象编程三大特征 封装 封装的实现步骤(三步) 继承 继承的细节问题 继承的本质 ...

  5. Ethernet/IP 学习笔记六

    Ethernet/IP 学习笔记六 EtherNet/IP defines two primary types of communications: explicit and implicit (Ta ...

  6. Hadoop学习笔记—10.Shuffle过程那点事儿

    Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...

  7. 5G/NR 学习笔记 - RAR随机接入过程

    5G/NR 学习笔记 - RAR随机接入过程 随机接入的目的 在小区搜索过程之后,UE已经与小区取得了下行同步,因此UE能够接收下行数据.但UE只有与小区取得上行同步,才能进行上行传输.UE通过随机接 ...

  8. ROS学习笔记六:理解ROS服务和参数

    ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...

  9. opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

最新文章

  1. 各种注意力机制PyTorch实现
  2. html用JQuery自定义表单验证。
  3. 5G NGC — AF 的 Service information
  4. 注释标记的原则_它关系到平台如何标记操纵的媒体。 这是设计师应遵循的12条原则。
  5. 使用^、(异或、并且)位运算 实现算数加法(+)
  6. 万年历c语言大作业实验,C语言实现万年历效果
  7. Linux学习笔记4.4-Linux重定向
  8. [python]python学习笔记(三)——编译
  9. 微软开源 Outlook for iOS 暗黑模式解决方案:支持 iOS 11 及更高版本
  10. .NET 将 .config 文件嵌入到程序集
  11. spring boot 下使用@ConponentScan注解遇到的问题
  12. 爬虫基本知识(转载)
  13. 《深入理解Android:卷III A》一一2.2Java层中的Binder分析
  14. DSP6678的多核启动
  15. android开发学习-日常用到的好东西-常用技巧分享
  16. 02-ElasticSearch创建索引
  17. 为什么用conda?
  18. 单纯版九九乘法口诀表
  19. ng-template、ng-content、ng-container
  20. 各大银行网银转账手续费一览表

热门文章

  1. T- SQL性能优化详解
  2. [USACO12FEB]牛的IDCow IDs
  3. Hibernate性能提升
  4. JS模式--状态模式(状态机)
  5. COM编程入门---转发
  6. App Class Loader
  7. 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
  8. unity3d 随机生成地形之随机山脉
  9. SharePoint开发 - Excel数据导入到SharePoint自定义列表(数据视图方式)
  10. ASP.NET AJAX Preview 2