我可以获得简单的 asm.js 代码吗?当使用 emscripten 编译简单的 c api 代码时
Can I get simple asm.js code? when simple c api code compile using emscripten
首先,检查我的知识
c/c++代码>>编译(emscripten[emcc])>>asm.js代码
我可以得到 c/c++ 代码到 asm.js 代码,对吗?
asm.js 代码 >> 编译(binaryen [asm2wasm]) >> wasm 代码
我可以得到 asm.js 代码到 wasm 代码,对吗?
其次,我的主要问题是,如何获得简单的 asm.js 代码?
我尝试按照步骤操作,但我无法获得简单的 asm.js 代码...
使用 emcc 编译时,我总是得到复杂的 asm.js 代码(5000 多行...)...
我的尝试步骤
一个。制作简单的 C api 代码 // my_add.c
#include <stdio.h>
#include <emscripten.h>
EMSCRIPTEN_KEEPALIVE
double my_add(double num1, double num2) {
return num1 + num2;
}
乙。将 my_add.c 代码编译为 asm.js 代码(使用 emcc)
我正在尝试许多 emcc 选项...
emcc my_add.c
emcc my_add.c -s WASM=1
etc...
我期望的...简单的 asm.js 代码(类似于遵循代码...)
function my_add(num1, num2) {
"use asm";
num1 = num1|0;
num2 = num2|0;
retrurn (num1 + num2)|0;
}
但是emcc编译结果很复杂asm.js代码
1 // The Module object: Our interface to the outside world. We import
2 // and export values on it, and do the work to get that through
3 // closure compiler if necessary. There are various ways Module can be used:
4 // 1. Not defined. We create it here
5 // 2. A function parameter, function(Module) { ..generated code.. }
6 // 3. pre-run appended it, var Module = {}; ..generated code..
7 // 4. External script tag defines var Module.
8 // We need to do an eval in order to handle the closure compiler
9 // case, where this code here is minified but Module was defined
10 // elsewhere (e.g. case 4 above). We also need to check if Module
11 // already exists (e.g. case 3 above).
12 // Note that if you want to run closure, and also to use Module
13 // after the generated code, you will need to define var Module = {};
14 // before the code. Then that object will be used in the code, and you
15 // can continue to use Module afterwards as well.
16 var Module;
17 if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
18
19 // Sometimes an existing Module object exists with properties
20 // meant to overwrite the default module functionality. Here
21 // we collect those properties and reapply _after_ we configure
22 // the current environment's defaults to avoid having to be so
23 // defensive during initialization.
24 var moduleOverrides = {};
25 for (var key in Module) {
26 if (Module.hasOwnProperty(key)) {
27 moduleOverrides[key] = Module[key];
28 }
29 }
30
31 // The environment setup code below is customized to use Module.
32 // *** Environment setup code ***
33 var ENVIRONMENT_IS_WEB = false;
34 var ENVIRONMENT_IS_WORKER = false;
35 var ENVIRONMENT_IS_NODE = false;
36 var ENVIRONMENT_IS_SHELL = false;
37
......
2038 function _my_add($num1,$num2) {
2039 $num1 = +$num1;
2040 $num2 = +$num2;
2041 var [=14=] = 0.0, = 0.0, = 0.0, = 0.0, = 0.0, label = 0, sp = 0;
2042 sp = STACKTOP;
2043 STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort();
2044 [=14=] = $num1;
2045 = $num2;
2046 = [=14=];
2047 = ;
2048 = + ;
2049 STACKTOP = sp;return (+);
2050 }
.......
我的 C/C++ 代码是 5~6 行..但是编译的 asm.js 代码是 5000~10000 行...
我只想要编译结果中的简单 'asm.js' 代码...
可能吗?
还有...我该怎么做?
IRC 频道。 #emscripten
'pdox' 回答我..
pdox:emcc -O2 -profiling
3601 function _my_add(d1, d2) {
3602 d1 = +d1;
3603 d2 = +d2;
3604 return +(d1 + d2);
3605 }
emcc -O2 -profiling
命令使简单的功能..
但是..但它仍然会产生很长的代码。(3000行......)
(编译结果文件 'a.out.js' 是 3000 行....)
我找到了解决办法!
使用 ONLY_MY_CODE
和 --separate-asm
选项,
emcc my_add.c -O2 -profiling -s ONLY_MY_CODE=1 -g2 --separate-asm -o abc.js
abc.asm.js
文件已创建:
Module["asm"] = (function(global, env, buffer) {
"use asm";
function _my_add(d1, d2) {
d1 = +d1;
d2 = +d2;
return +(d1 + d2);
}
return {
_my_add: _my_add
};
});
首先,检查我的知识
c/c++代码>>编译(emscripten[emcc])>>asm.js代码
我可以得到 c/c++ 代码到 asm.js 代码,对吗?asm.js 代码 >> 编译(binaryen [asm2wasm]) >> wasm 代码
我可以得到 asm.js 代码到 wasm 代码,对吗?
其次,我的主要问题是,如何获得简单的 asm.js 代码?
我尝试按照步骤操作,但我无法获得简单的 asm.js 代码... 使用 emcc 编译时,我总是得到复杂的 asm.js 代码(5000 多行...)...
我的尝试步骤
一个。制作简单的 C api 代码 // my_add.c
#include <stdio.h>
#include <emscripten.h>
EMSCRIPTEN_KEEPALIVE
double my_add(double num1, double num2) {
return num1 + num2;
}
乙。将 my_add.c 代码编译为 asm.js 代码(使用 emcc)
我正在尝试许多 emcc 选项...
emcc my_add.c
emcc my_add.c -s WASM=1
etc...
我期望的...简单的 asm.js 代码(类似于遵循代码...)
function my_add(num1, num2) {
"use asm";
num1 = num1|0;
num2 = num2|0;
retrurn (num1 + num2)|0;
}
但是emcc编译结果很复杂asm.js代码
1 // The Module object: Our interface to the outside world. We import
2 // and export values on it, and do the work to get that through
3 // closure compiler if necessary. There are various ways Module can be used:
4 // 1. Not defined. We create it here
5 // 2. A function parameter, function(Module) { ..generated code.. }
6 // 3. pre-run appended it, var Module = {}; ..generated code..
7 // 4. External script tag defines var Module.
8 // We need to do an eval in order to handle the closure compiler
9 // case, where this code here is minified but Module was defined
10 // elsewhere (e.g. case 4 above). We also need to check if Module
11 // already exists (e.g. case 3 above).
12 // Note that if you want to run closure, and also to use Module
13 // after the generated code, you will need to define var Module = {};
14 // before the code. Then that object will be used in the code, and you
15 // can continue to use Module afterwards as well.
16 var Module;
17 if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
18
19 // Sometimes an existing Module object exists with properties
20 // meant to overwrite the default module functionality. Here
21 // we collect those properties and reapply _after_ we configure
22 // the current environment's defaults to avoid having to be so
23 // defensive during initialization.
24 var moduleOverrides = {};
25 for (var key in Module) {
26 if (Module.hasOwnProperty(key)) {
27 moduleOverrides[key] = Module[key];
28 }
29 }
30
31 // The environment setup code below is customized to use Module.
32 // *** Environment setup code ***
33 var ENVIRONMENT_IS_WEB = false;
34 var ENVIRONMENT_IS_WORKER = false;
35 var ENVIRONMENT_IS_NODE = false;
36 var ENVIRONMENT_IS_SHELL = false;
37
......
2038 function _my_add($num1,$num2) {
2039 $num1 = +$num1;
2040 $num2 = +$num2;
2041 var [=14=] = 0.0, = 0.0, = 0.0, = 0.0, = 0.0, label = 0, sp = 0;
2042 sp = STACKTOP;
2043 STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort();
2044 [=14=] = $num1;
2045 = $num2;
2046 = [=14=];
2047 = ;
2048 = + ;
2049 STACKTOP = sp;return (+);
2050 }
.......
我的 C/C++ 代码是 5~6 行..但是编译的 asm.js 代码是 5000~10000 行...
我只想要编译结果中的简单 'asm.js' 代码...
可能吗?
还有...我该怎么做?
IRC 频道。 #emscripten
'pdox' 回答我..
pdox:emcc -O2 -profiling
3601 function _my_add(d1, d2) {
3602 d1 = +d1;
3603 d2 = +d2;
3604 return +(d1 + d2);
3605 }
emcc -O2 -profiling
命令使简单的功能.. 但是..但它仍然会产生很长的代码。(3000行......) (编译结果文件 'a.out.js' 是 3000 行....)
我找到了解决办法!
使用 ONLY_MY_CODE
和 --separate-asm
选项,
emcc my_add.c -O2 -profiling -s ONLY_MY_CODE=1 -g2 --separate-asm -o abc.js
abc.asm.js
文件已创建:
Module["asm"] = (function(global, env, buffer) {
"use asm";
function _my_add(d1, d2) {
d1 = +d1;
d2 = +d2;
return +(d1 + d2);
}
return {
_my_add: _my_add
};
});