CodeGenerator
来源:互联网 发布:android 网络配置文件 编辑:程序博客网 时间:2024/06/05 14:43
类CodeGenerator:
334 protected:335 CodeGenerator(HGraph* graph,336 size_t number_of_core_registers,337 size_t number_of_fpu_registers,338 size_t number_of_register_pairs,339 uint32_t core_callee_save_mask,340 uint32_t fpu_callee_save_mask,341 const CompilerOptions& compiler_options)342 : frame_size_(0),343 core_spill_mask_(0),344 fpu_spill_mask_(0),345 first_register_slot_in_slow_path_(0),346 blocked_core_registers_(graph->GetArena()->AllocArray<bool>(number_of_core_registers)),347 blocked_fpu_registers_(graph->GetArena()->AllocArray<bool>(number_of_fpu_registers)),348 blocked_register_pairs_(graph->GetArena()->AllocArray<bool>(number_of_register_pairs)),349 number_of_core_registers_(number_of_core_registers),350 number_of_fpu_registers_(number_of_fpu_registers),351 number_of_register_pairs_(number_of_register_pairs),352 core_callee_save_mask_(core_callee_save_mask),353 fpu_callee_save_mask_(fpu_callee_save_mask),354 is_baseline_(false),355 graph_(graph),356 compiler_options_(compiler_options),357 pc_infos_(graph->GetArena(), 32),358 slow_paths_(graph->GetArena(), 8),359 block_order_(nullptr),360 current_block_index_(0),361 is_leaf_(true),362 requires_current_method_(false),363 stack_map_stream_(graph->GetArena()) {}365 // 为baseline编译准备的寄存器分配逻辑,1,将所有的blocked的core register/fpu register/register pair全部设为false;//2.将所有的fixed input,temp和output registers设为used,然后针对不同架构,将特殊寄存器设为blocked;//3.分配所有unallocated的input locations(依据不同的policy,分为kRequiresRegister||kRequiresFpuRegister以及kAny);//4.分配所有unallocated的temp locations(同样依据不同的policy,kRequiresRegister与kRequireFpuRegister,//一个分配kPrimInt类型的寄存器,一个分配kPrimDouble类型的寄存器);//5.分配所有unallocated的out locations,也是分policy,对于kAny/kRequiresRegister/kRequiresFpuRegister而言是依据类型不同分配寄存器,//而对kSameAsFirstInput而言,则是另result_location = locations->InAt(0),然后UpdateOut(result_location),//该函数只有两个可能:一个是parameters,在进行寄存器分配后我们只知道确切的stack slot,另一个是unallocated location。366 void AllocateRegistersLocally(HInstruction* instruction) const;367 368 // 分配一个寄存器的特定架构的实现。选择arm64.同样是为baseline准备的369 virtual Location AllocateFreeRegister(Primitive::Type type) const = 0;370 371 static size_t FindFreeEntry(bool* array, size_t length);372 static size_t FindTwoFreeConsecutiveAlignedEntries(bool* array, size_t length);373 374 virtual Location GetStackLocation(HLoadLocal* load) const = 0;375 376 virtual HGraphVisitor* GetLocationBuilder() = 0;377 virtual HGraphVisitor* GetInstructionVisitor() = 0;378 379 // Returns the location of the first spilled entry for floating point registers,380 // relative to the stack pointer.381 uint32_t GetFpuSpillStart() const {382 return GetFrameSize() - FrameEntrySpillSize();383 }
待续
阅读全文
0 0
- CodeGenerator
- 代码生成器CodeGenerator
- Eric的模板引擎 EFPlatform.CodeGenerator
- 快速开发平台--自定义类CodeGenerator
- Android studio插件开发实战(4)-CodeGenerator插件开发
- 代码生成器CodeGenerator(目前只支持SpringBoot/SpringDataJpa)
- .NET模板引擎 EFPlatform.CodeGenerator (代码生成器 静态页生成 生成HTML 模板)
- .NET模板引擎 EFPlatform.CodeGenerator (代码生成器 静态页生成 生成HTML 模板)
- .NET模板引擎 EFPlatform.CodeGenerator (代码生成器 静态页生成 生成HTML 模板)
- 基于CodeGenerator的Emit代码生成辅助类源码及演示
- Android Studio插件之快速findViewById butterknife和Android CodeGenerator的使用
- char data[0]问题
- 前端性能优化(Application Cache篇)
- c++文件操作
- ocilib
- c#实现16进制和字符串之间转换的代码
- CodeGenerator
- 从Android到Swift iOS开发:语言与框架对比
- 设计模式(15)-Memento 备忘录模式
- [vim] 多窗口功能
- linux常用命令
- SpringBoot
- 内核态(Kernel Mode)与用户态(User Mode)
- Javascript
- Android自定义View基础——弧度和角度