当前位置: 首页 > news >正文

EM_ASM系列宏定义(emscripten)

2.5 EM_ASM系列宏

很多编译器支持在C/C代码直接嵌入汇编代码,Emscripten采用类似的方式,提供了一组以“EM_ASM”为前缀的宏,用于以内联的方式在C/C代码中直接嵌入JavaScript代码。

2.5.1 EM_ASM

EM_ASM使用很简单,只需要将欲执行的JavaScript代码置于参数中,例如:

#include <emscripten.h>

int main() {

EM_ASM(console.log('你好,Emscripten!'));

return 0;

}

上述代码将调用JavaScript方法console.log()输出“你好,Emscripten!”。

EM_ASM宏可以一次嵌入多条JavaScript语句,语句之间用分号分隔,例如:

EM_ASM(var k = 42;console.log('The answer is:', k););

将输出:

The answer is:42

嵌入的多条语句分行书写以及行尾注释也是可行的(分行书写时语句之间必须以分号分隔,不能省略),例如:

EM_ASM(

var k = 42; //define k

console.log('The answer is:', k);

);

EM_ASM宏只能执行嵌入的JavaScript代码, 无法传入参数或获取返回结果。

2.5.2 EM_ASM_/EM_ASM_DOUBLE

EM_ASM_支持输入数值类型的可变参数, 同时返回整数类型的结果。EM_ASM_宏嵌入的JavaScript代码必须放到{}包围的代码块中(以区隔代码与参数),且至少必须含有一个输入参数。嵌入的JavaScript代码通过$n访问第n+1个参数。下面的例子调用JavaScript计算了三个数值的和,并将结果返回:

int sum = EM_ASM_({return $0 + $1 + $2;}, 1, 2, 3);

printf("sum(1, 2, 3): %d\n", sum);

使用EM_ASM_宏嵌入JavaScript时,参数不仅可以是常数,也可以是变量,例如:

char buf[32];

double pi = 3.14159;

EM_ASM_(

{

console.log('addr of buf:', $0);

console.log('sqrt(pi):', $1);

},

buf, sqrt(pi)

);

上述代码将依次输出buf的地址以及pi的平方根。

EM_ASM_DOUBLE用法与EM_ASM_基本一致,区别是EM_ASM_DOUBLE返回值为double。例如:

double pi2 = EM_ASM_DOUBLE(

{

return $0 * $1;

},

pi, 2.0

);

printf("pi2: %lf\n", pi2);

EM_ASM_/EM_ASM_DOUBLE宏中嵌入的JavaScript代码会被展开为一个独立的JavaScript方法,因此在嵌入的JavaScript中除了用$n之外,也可以用内置的arguments对象来访问参数,例如:

EM_ASM_(

{

console.log('arguments count:', arguments.length);

for(var i = 0; i < arguments.length; i++) {

console.log('$', i, ':', arguments[i]);

}

},

42, 13

);

上述代码将输出:

arguments count: 2

$ 0 : 42

$ 1 : 13

2.5.3 EM_ASM_INT_V/EM_ASM_DOUBLE_V

如果嵌入的JavaScript代码不需要参数,可以使用EM_ASM_INT_V/EM_ASM_DOUBLE_V宏。由于没有参数,嵌入的代码无需用{}包围,例如:

int answer = EM_ASM_INT_V(return 42);

printf("The answer is:%d\n", answer);

double pi_js = EM_ASM_DOUBLE_V(return 3.14159);

printf("PI:%lf\n", pi_js);

本节例子的输出如下:

相关文章:

EM_ASM系列宏定义(emscripten)

2.5 EM_ASM系列宏很多编译器支持在C/C代码直接嵌入汇编代码&#xff0c;Emscripten采用类似的方式&#xff0c;提供了一组以“EM_ASM”为前缀的宏&#xff0c;用于以内联的方式在C/C代码中直接嵌入JavaScript代码。2.5.1 EM_ASMEM_ASM使用很简单&#xff0c;只需要将欲执行的Ja…...

Batchnorm和Layernorm的区别

在深度学习训练中&#xff0c;我们经常会遇到这两个归一化操作&#xff0c;他们之间有什么区别呢&#xff1f;我们来简单介绍一下&#xff1a; BatchNorm&#xff1a; 在深度学习训练的时候我们的数据如果没有经过预处理&#xff0c;有可能会出现梯度消失或者梯度爆炸的情况&…...

高级前端面试题汇总

iframe 有那些优点和缺点&#xff1f; iframe 元素会创建包含另外一个文档的内联框架&#xff08;即行内框架&#xff09;。 优点&#xff1a; 用来加载速度较慢的内容&#xff08;如广告&#xff09;可以使脚本可以并行下载可以实现跨子域通信 缺点&#xff1a; iframe 会…...

HTML#5表单标签

一. 表单标签介绍表单: 在网页中主要负责数据采集功能,使用<form>标签定义表单表单项: 不同类型的input元素, 下拉列表, 文本域<form> 定义表单<input> 定义表单项,通过typr属性控制输入形式<label> 为表单项定义标注<select> 定义下拉列表<o…...

ONNX可视化与编辑工具

ONNX可视化与编辑工具netrononnx-modifier在模型部署的过程中&#xff0c;需要使用到ONNX模型&#xff0c;下面给大家推荐两个ONNX可视化与编辑工具&#xff0c;其中&#xff0c;netron仅支持模型的可视化&#xff0c;onnx-modifier支持ONNX的可视化与编辑。 netron Netron是…...

Verilog 学习第五节(串口接收部分)

小梅哥串口部分学习part2 串口通信接收原理串口通信接收程序设计与调试巧用位操作优化串口接收逻辑设计串口接收模块的项目应用案例串口通信接收原理 在采样的时候没有必要一直判断一个clk内全部都是高/低电平&#xff0c;如果采用直接对中间点进行判断的话&#xff0c;很有可能…...

AIX系统常见漏洞修复(exec、rlogin、rsh、ftp、telnet远端服务运行中)

漏洞&#xff1a;1.1 SSH 服务支持弱加密算法 1. 使用telnet 登录2.vi /etc/ssh/sshd_config 最后添加一下内容&#xff08;去掉 arcfour、arcfour128、arcfour256 等弱加密算法&#xff09; Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast…...

IEEE SLT 2022论文丨如何利用x-vectors提升语音鉴伪系统性能?

分享一篇IEEE SLT 2022收录的声纹识别方向的论文&#xff0c;《HOW TO BOOST ANTI-SPOOFING WITH X-VECTORS》由AuroraLab&#xff08;极光实验室&#xff09;发表。 来源丨AuroraLab AuroraLab源自清华大学电子工程系与新疆大学信息科学与工程学院&#xff0c;以说话人识别和…...

设计模式(十三)----结构型模式之桥接模式

1 概述 现在有一个需求&#xff0c;需要创建不同的图形&#xff0c;并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系&#xff1a; 我们可以发现有很多的类&#xff0c;假如我们再增加一个形状或再增加一种颜色&#xff0c;就需要创建更多的类。 试…...

倾向得分匹配案例分析

一、倾向得分匹配法说明 倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的&#xff0c;首次运用在生物医药领域&#xff0c;后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素&#xff08;干扰因素&#xff09;的偏差。 …...

基于SpringCloud的可靠消息最终一致性04:项目基础代码

上一节给出了项目需求和骨架代码,这一节来接着看基础代码。骨架代码和基础代码最主要的区别是:骨架代码都是数据库脚本、POM依赖文件、配置文件内容、运维脚本等,而基础代码则是和业务有关联,但并非关键代码的部分。 这些代码不用一个个地看,主要是看看结构就行。 图二十五…...

操作系统权限提升(十八)之Linux提权-内核提权

Linux 内核提权 Linux 内核提权原理 内核提权是利用Linux内核的漏洞进行提权的&#xff0c;内核漏洞进行提权一般包括三个环节&#xff1a; 1、对目标系统进行信息收集&#xff0c;获取到系统内核信息及版本信息&#xff1b; 2、根据内核版本获取其对应的漏洞以及EXP 3、使…...

华为OD机试真题Java实现【快递运输】真题+解题思路+代码(20222023

快递运输 题目 一辆运送快递的货车,运送的快递均放在大小不等的长方体快递盒中,为了能够装载更多的快递,同时不能让货车超载,需要计算最多能装多少个快递。 注:快递的体积不受限制,快递数最多1000个,货车载重最大50000。 🔥🔥🔥🔥🔥👉👉👉👉👉�…...

java面试题-JVM问题排查

1.常见的Linux定位问题的工具&#xff1f;常见的 Linux 定位问题的命令可以分为以下几类&#xff1a;系统状态命令&#xff1a;包括 top、uptime、vmstat、sar 等命令&#xff0c;用于查看系统整体的状态&#xff0c;如 CPU 使用率、内存使用率、磁盘 I/O 等。进程状态命令&…...

市场上有很多低代码开发平台,不懂编程的人可以用哪些?

市场上有很多低代码开发平台&#xff0c;不懂编程的人可以用哪些&#xff1f;这个问题一看就是外行问的啦&#xff0c;低代码平台主打的就是一个“全民开发”&#xff0c;而且现在很多低代码平台都发展为零代码了&#xff0c;不懂编程也完全可以使用&#xff01; 所谓低代码开…...

Tina_Linux打包流程说明指南_new

OpenRemoved_Tina_Linux_打包流程_说明指南_new 1 概述 1.1 编写目的 介绍Allwinner 平台上打包流程。 1.2 适用范围 Allwinner 软件平台Tina v3.0 版本以上。 1.3 相关人员 适用Tina 平台的广大客户&#xff0c;想了解Tina 打包流程的开发人员。 2 固件打包简介 固件…...

JVM面试题

JVM 1.jvm的组成部分 类加载器:将javac编译的class文件加载到内存中 运行时数据区&#xff1a;将内存划分成若干个不同的区域。 执行引擎&#xff1a;负责解析命令&#xff0c;提交操作系统执行。 本地接口&#xff1a;融合不同的语言为java所用 2.运行时数据区 方法区&…...

@FeignClient注解

1.在启动类上开启Feign功能 不开会提示找不到所需要的bean Consider defining a bean of type in your configuration SpringBootApplication EnableFeignClients public class AuthApplication {public static void main(String[] args) {SpringApplication.run(AuthApplic…...

一文搞懂如何在 React 中使用 防抖(Debounce)和 节流(Throttle)

在前端的日常开发中&#xff0c;经常会使用到两个函数防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;&#xff0c;防抖函数可以有效控制在一段时间内只执行最后一次请求&#xff0c;例如搜索框输入时&#xff0c;只在输入完成后才进行请求接口。…...

Airbyte API

Airbyte API涵盖了Airbyte功能的方方面面&#xff0c;主要分类&#xff1a;Source_definition&#xff1a;来源定义&#xff0c;实现了来源的增删改查功能。Destination_definition&#xff1a;目标定义&#xff0c;实现了目标的增删改查功能。Workspace&#xff1a;工作区管理…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...