WebAssembly指令集的转换方法及装置制造方法及图纸

技术编号:39311525 阅读:10 留言:0更新日期:2023-11-12 15:56
本说明书提供有WebAssembly指令集的转换方法及装置。应用于资源受限设备,所述方法包括:响应于资源受限设备待执行的函数,为所述待执行的函数分配新的指令存储空间;遍历标准WebAssembly指令集,获取用于执行所述待执行的函数的目标指令,并确定所述目标指令中是否存在需要转换的待转换指令;响应于确定出的待转换指令,为所述待执行的函数记录指令转换信息;根据所述指令转换信息执行指令转换,以将所述待转换指令转换为适用于所述资源受限设备的自定义指令;将转换得到的自定义指令存储到所述指令存储空间,以使所述资源受限设备基于所述自定义指令执行所述待执行的函数。于所述自定义指令执行所述待执行的函数。于所述自定义指令执行所述待执行的函数。

【技术实现步骤摘要】
WebAssembly指令集的转换方法及装置


[0001]本说明书实施例涉及计算机领域,尤其涉及一WebAssembly指令集的转换方法及装置。

技术介绍

[0002]WebAssembly(也可以简称为wasm)是一种可以运行在浏览器的新型代码技术,其可以为诸如C、C++和Rust等低级源语言提供一个高效的编译目标;且具有快速、高效、可移植的特点,可以在不同平台上以接近本地速度运行。
[0003]由于标准的WebAssembly指令集面向并非资源受限设备,导致资源受限设备在使用标准的WebAssembly指令集执行字节码时执行效率较低。

技术实现思路

[0004]本说明书实施例提供的一种WebAssembly指令集的转换方法及装置。用以解决资源受限设备在使用标准的WebAssembly指令集执行字节码时执行效率较低的问题。
[0005]根据本说明书实施例的第一方面,提供一种WebAssembly指令集的转换方法,应用于资源受限设备,所述方法包括:响应于资源受限设备待执行的函数,为所述待执行的函数分配新的指令存储空间;遍历标准WebAssembly指令集,获取用于执行所述待执行的函数的目标指令,并确定所述目标指令中是否存在需要转换的待转换指令;响应于确定出的待转换指令,为所述待执行的函数记录指令转换信息;根据所述指令转换信息执行指令转换,以将所述待转换指令转换为适用于所述资源受限设备的自定义指令;将转换得到的自定义指令存储到所述指令存储空间,以使所述资源受限设备基于所述自定义指令执行所述待执行的函数。
[0006]可选的,所述待转换指令包括常数指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.const指令;如果存在i32.const指令,进一步确定该i32.const指令的操作数的取值是否位于[

32768,32767]之间;如果该i32.const指令的操作数的取值位于[

32768,32767]之间,则确定所述目标指令中的i32.const指令是需要转换的常数指令。
[0007]可选的,所述待转换指令包括位运算指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i16.const指令、i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种;
如果存在i16.const指令,且该i16.const指令之后的第一条指令为i32.and指令、i32.or指令、i32.xor指令中的任一种,则确定所述目标指令中的i16.const指令是需要转换的位运算指令;如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令或i32.load16_u指令,且其后第一条指令为i16.const指令、其后第二条指令为32.shl指令、i32.shr_s指令、i32.shr_u指令、i32.rotl指令、i32.rotr指令中的任一种,则确定其是所述目标指令中需要转换的位运算指令。
[0008]可选的,所述待转换指令包括算术运算指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,且其后第一条指令为i32.clz指令、i32.ctz指令、i32.popcnt指令中的任一种,或者其后第一条指令为i16.const指令,其后第二条指令为i32.add指令、i32.sub指令、i32.mul指令、i32.div_s指令、i32.div_u指令、i32.rem_s指令、i32.rem_u指令中的任一种;则确定其是所述目标指令中需要转换的算术运算指令。
[0009]可选的,所述待转换指令包括比较运算指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种;如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,且其后第一条指令为i32.eqz指令,或者其后第一条指令为i16.const指令,其后第二条指令为i32.eq指令、i32.ne指令、i32.lt_s指令、i32.lt_u指令、i32.gt_s指令、i32.gt_u指令、i32.le_s指令、i32.le_u指令、i32.ge_s指令、i32.ge_u指令中的任一种;则确定其是所述目标指令中需要转换的比较运算指令。
[0010]可选的,所述待转换指令包括类型转换指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种;如果存在i32.load8_s指令或i32.load8_u指令,且其后第一条指令为i32.extend8_s指令,则确定所述i32.load8_s指令或i32.load8_u指令是所述目标指令中需要转换的类型转换指令;如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,且其后第一条指令为i32.wrap_i64指令,则确定其是所述目标指令中需要转换的类型转换指令。
[0011]可选的,所述待转换指令包括高频指令,所述确定所述目标指令中是否存在需要
转换的待转换指令,包括:确定所述目标指令中是否存在i16.const指令、local.get指令、local.set指令、local.tee指令、global.get指令、global.set指令中的任一种;如果存在i16.const指令,且该i16.const指令的操作数的取值为[0,5]之间的常数,则确定该i16.const指令是所述目标指令中需要转换的高频指令;如果存在local.get指令、local.set指令、local.tee指令中的任一种,且其操作数的取值为[0,3]之间的常数,则确定其是所述目标指令中需要转换的高频指令;如果存在global.get指令或global.set指令,且global.get指令或global.set指令的操作数的取值为0,则确定global.get指令或global.set指令是所述目标指令中需要转换的高频指令。
[0012]可选的,所述待转换指令包括控制指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种WebAssembly指令集的转换方法,其特征在于,应用于资源受限设备,所述方法包括:响应于资源受限设备待执行的函数,为所述待执行的函数分配新的指令存储空间;遍历标准WebAssembly指令集,获取用于执行所述待执行的函数的目标指令,并确定所述目标指令中是否存在需要转换的待转换指令;响应于确定出的待转换指令,为所述待执行的函数记录指令转换信息;根据所述指令转换信息执行指令转换,以将所述待转换指令转换为适用于所述资源受限设备的自定义指令;将转换得到的自定义指令存储到所述指令存储空间,以使所述资源受限设备基于所述自定义指令执行所述待执行的函数。2.根据权利要求1所述的方法,其特征在于,所述待转换指令包括常数指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.const指令;如果存在i32.const指令,进一步确定该i32.const指令的操作数的取值是否位于[

32768,32767]之间;如果该i32.const指令的操作数的取值位于[

32768,32767]之间,则确定所述目标指令中的i32.const指令是需要转换的常数指令。3.根据权利要求1所述的方法,其特征在于,所述待转换指令包括位运算指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i16.const指令、i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种;如果存在i16.const指令,且该i16.const指令之后的第一条指令为i32.and指令、i32.or指令、i32.xor指令中的任一种,则确定所述目标指令中的i16.const指令是需要转换的位运算指令;如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令或i32.load16_u指令,且其后第一条指令为i16.const指令、其后第二条指令为32.shl指令、i32.shr_s指令、i32.shr_u指令、i32.rotl指令、i32.rotr指令中的任一种,则确定其是所述目标指令中需要转换的位运算指令。4.根据权利要求1所述的方法,其特征在于,所述待转换指令包括算术运算指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,且其后第一条指令为i32.clz指令、i32.ctz指令、i32.popcnt指令中的任一种,或者其后第一条指令为i16.const指令,其后第二条指令为i32.add指令、i32.sub指令、i32.mul指令、i32.div_s指令、i32.div_u指令、i32.rem_s指令、i32.rem_u指令中的任一种;则确定其是所述目标指令中需要转换的算术运算指令。
5.根据权利要求1所述的方法,其特征在于,所述待转换指令包括比较运算指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种;如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,且其后第一条指令为i32.eqz指令,或者其后第一条指令为i16.const指令,其后第二条指令为i32.eq指令、i32.ne指令、i32.lt_s指令、i32.lt_u指令、i32.gt_s指令、i32.gt_u指令、i32.le_s指令、i32.le_u指令、i32.ge_s指令、i32.ge_u指令中的任一种;则确定其是所述目标指令中需要转换的比较运算指令。6.根据权利要求1所述的方法,其特征在于,所述待转换指令包括类型转换指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种;如果存在i32.load8_s指令或i32.load8_u指令,且其后第一条指令为i32.extend8_s指令,则确定所述i32.load8_s指令或i32.load8_u指令是所述目标指令中需要转换的类型转换指令;如果存在i32.load8_s指令、i32.load8_u指令、i32.load16_s指令、i32.load16_u指令中的任一种,且其后第一条指令为i32.wrap_i64指令,则确定其是所述目标指令中需要转换的类型转换指令。7.根据权利要求1所述的方法,其特征在于,所述待转换指令包括高频指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在i16.const指令、local.get指令、local.set指令、local.tee指令、global.get指令、global.set指令中的任一种;如果存在i16.const指令,且该i16.const指令的操作数的取值为[0,5]之间的常数,则确定该i16.const指令是所述目标指令中需要转换的高频指令;如果存在local.get指令、local.set指令、local.tee指令中的任一种,且其操作数的取值为[0,3]之间的常数,则确定其是所述目标指令中需要转换的高频指令;如果存在global.get指令或global.set指令,且global.get指令或global.set指令的操作数的取值为0,则确定global.get指令或global.set指令是所述目标指令中需要转换的高频指令。8.根据权利要求1所述的方法,其特征在于,所述待转换指令包括控制指令,所述确定所述目标指令中是否存在需要转换的待转换指令,包括:确定所述目标指令中是否存在block,loop指令或if指令;如果存在block,loop指令或if指令,且block,loop指令或if指令的操作数的第一个字节不是0x40、0x7C、0x7D、0x7E或0x7F,则确定block,loop指令或if指令是所述目标指令中需要转换的控制指令。9.根据权利要求1

8中任一项所述的方法,其特征在于,所述指令转换信息由每个待转换指令对应的指令转换信息单元构成,每个指令转换信息单元包括与待转换指令相关的转
换类型标识、数据位置、数据长度;所述指令转换信息单元之间按照待转换指令在执行所述待执行函数时的先后顺序排列;其中,所述转换类型标识用于记录待转换指令的指令转换类型;所述数据位置用于记录待转换指令在函数中的位置;所述数据长度用于记录待转换指令的长度。10.根据权利要求9所述的方法,其特征在于,所述根据所述指令转换信息执行指令转换,包括:步骤A1,获取所述指令转换信息中的第一个指令转换信息单元,基于所述第一个指令转换信息单元中记录的数据位置,将待执行的函数的函数起始位置至所述数据位置之间的指令,拷贝到所述新的指令存储空间;步骤A2,将第...

【专利技术属性】
技术研发人员:赵辉高景阳
申请(专利权)人:北京中电华大电子设计有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1