一分钟迁移汇编代码:鲲鹏DevKit中汇编翻译特性的应用和实现_第1页
一分钟迁移汇编代码:鲲鹏DevKit中汇编翻译特性的应用和实现_第2页
一分钟迁移汇编代码:鲲鹏DevKit中汇编翻译特性的应用和实现_第3页
一分钟迁移汇编代码:鲲鹏DevKit中汇编翻译特性的应用和实现_第4页
一分钟迁移汇编代码:鲲鹏DevKit中汇编翻译特性的应用和实现_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一分钟迁移汇编代码:鲲鹏DevKit中汇编翻译特性的应用和实现•待迁移的汇编代码•汇编翻译的意义和挑战•汇编翻译的应用和实现•总结和展望鲲鹏DevKit:一站式开发套件分布式存储Web数据库虚拟化大数据(分布式存储Web数据库虚拟化大数据(openLooKeng)云手机鲲鹏开发套件KunpengDevKit应用开发系统软件开发硬件开放…使能代码迁移工具编译器性能分析工具 处理器SSD鲲鹏主板网卡代码迁移工具编译器性能分析工具移速库插件高效迁移工具移速库插件高效迁移工具全面分析精准调优试工具快速诊断准确定位有源码迁移工具化插件与IDE开发环境集成鲲鹏DevKit:全流程开发效率提升一站式迁移、编译、测试、分析试插件鲲鹏亲和性能更高无源码迁移平滑迁移、业务无损华为动态二进制翻译工具(ExaGear)难懂难懂难调汇编代码•汇编语言(Assemblylanguage)是任何一种计算机或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,如x86_64或AArch64汇编。•为何仍使用汇编性能汇编样式简单嵌入汇编(单指令)复杂嵌入汇编(多指令)语法格式错综复杂全汇编文件工具化翻译汇编样式多样性工具化翻译汇编样式多样性能衰减控制意义和挑战•汇编代码:软件跨平台的“拦路虎”•x86到鲲鹏平台汇编自动翻译的挑战平台差平台差异巨大嵌入汇编:使用都较简单,指令也比较集中嵌入汇编:使用都较简单,指令也比较集中使用场景全全汇编文件:SIMD指令占大多数,指令相对集中总体思路 (大多数场景且性能尽量不衰减)基于特征规则的自动转换基于规则的快速汇编转换(简单嵌入汇编)二进制代码 (x86- 64)二进制代码 (AArch64)总体设计•汇编样式复杂•平台间差异大•目标要求很高能用则用需改尽改•当快则快•曲折前行基于编译技术的自动转换汇编源代码 (汇编源代码 (x86-64) (AArch64)编译器中间表示翻译 (SIMD为主)x86=>ARMOutputListGCCAsmstatAsmStringInputListOutputListGCCAsmstatAsmStringInputListAST关键节点•Clang-Tidy:基于LLVM的静态语法检查框架,提供语法(AST)解析能力•基于Clang-Tidy拓展汇编识别和替换规则CVariableSymbolOperandE0->[arg]->vCVariableSymbolOperandE0->[arg]->vE1->[storage]-s简单嵌入汇编翻译待转换x待转换x86嵌入式汇编__asm__volatile__(“lock;orq%[arg],%[storage]\n\t”:[stoarge]“+m”(s):“memory”);规则库模板Instwidth:q(64bit)Prefix:lockCFlags:null转换规则库匹配TRANS_RULE(OR)TRANS_RULE(LOCK_OR)TRANS_RULE(LOCK_OR_NZ)__atomic_fetch_or(&s,v,__ATOMIC_SEQ_CET);1.指令操作数映射2.汇编语句特征分析(绑定步骤1)3.规则库规则匹配(绑定步骤2)4.根据规则进行代码翻译指令语义:对E0和E1两个操作数按位或运算,结果写入E1基于编译技术的自动转换基于特征规则的自动转换汇编源代基于编译技术的自动转换基于特征规则的自动转换汇编源代码 (x86-64)汇编源代码 (AArch64)基于规则的快速汇编转换(简单嵌入汇编)二进制代码 (x86- 64)编译器中间表示翻译 (SIMD为主)二进制代码 (AArch64)1.指令组合无法穷举2.汇编模块引用外部变量3.消除平台间调用差异4.SIMD指令对等翻译翻译步骤对挑战局部异构反编译译优化4指令直接翻译4代码生成2x86机器状态的抽象x86机器状态的抽象:structState{VectorRegvec[kNumVecRegisters];//向量寄存器xmm/ymm/zmm结构定义GPRgpr;//通用寄存器rax/rbx…结构定义X87Stackst;MMXmmx;FPUx87;FPUStatusFlagssw;}__.ttribute__((packed));复杂汇编翻译:指令语义转译x86机器模型抽象•机器状态抽象为数据结构,内存被抽象为一段大数空间•所有汇编指令语义,都被翻译成对机器模型的操作x86指令的转译过程•每条指令对应语义函数(用高级语言编程),经编译器编译为编译器中间表示•输入汇编指令解码后,生成对语义函数调用,经编译器优化为最优代码paddwpaddw指C++语义函数引入vectorextension描述SIMD指令语义xx86汇编指令串其他指令SIMD指令使用Vectorextension描述SIMD指令的操作数变量Vectorextension普通C++接口语义实现x86汇编翻译后的翻译后的SIMD指令语义编译器编译复杂汇编翻译:参数化翻译主主要是为了解决C语言变量和汇编代码的关联x86嵌入汇编指令串高级语言变量列表逐条翻译指令串,引用参数化的虚拟寄存器被翻译的x86指令串(函数声明)参数ARG0_64被翻译的x86指令串(函数定义)引导代码(关联C变量和函数参数)被翻译的x86指令串 (函数定义)引导代码生成参数化翻译参数ARG1_64x86嵌入汇编入实例参数化入实例模拟寄存器 (模拟寄存器 (State结构)x86-64模拟环境栈底栈顶模拟栈 (内存结构)0x00000x00080x0010lee返回地址x86-64AArch64入参寄存器RDIRSI,RDX,RCX,R8,R9x0-x7返回值寄存器xx30//C函数Caller()调用汇编函数Callee()Caller(){…res=Callee(i1,i2,i3,…,i8);…}复杂汇编翻译:函数跳转和调用约定主要解决C语言接口和汇编接口之间的调用问题C函数调用汇编模块中的函数Callee时的状态切换AArch64物理环境寄存器程序栈栈底栈顶xX30Callee返原始x86汇编截图翻译后鲲鹏汇编截图x86结果原始x86汇编截图翻译后鲲鹏汇编截图x86结果X86X86汇编代码自动翻译:一分钟搞定x86汇编代码迁移到鲲鹏平台•指令语义的众筹•更多场景的支持•新硬件指令支持you.把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。Bringdigitaltoeveryperson,homeandorganizationforafullyconnected,intelligentworld.Copyright©2020HuaweiTechnologiesCo.,Ltd.AllRightsReserved.Theinformationinthisdocumentmaycontainpredictivestatementsincluding,withoutlimitation,statementsregardingthefuturefinancialandoperatingresults,futureproductportfolio,newtechnology,etc.Thereareanumberoffactorsthatcouldcauseactualresultsanddevelopmentstodiffermateriallyfromthoseexpressedorimpliedinthepredictivestatements.T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论