【发布时间】:2020-08-12 17:12:04
【问题描述】:
根据规范,ASM.js 中的“int”类型没有签名。
int 类型是符号未知的 32 位整数类型。在 asm.js 中,变量的类型从来没有已知的符号。这允许它们被编译为 32 位整数寄存器和内存字。但是,这种表示会在有符号和无符号数字之间产生重叠,这会导致在确定它们代表哪个 JavaScript 数字时产生歧义。例如,位模式 0xffffffff 可以表示 4294967295 或 -1,具体取决于符号。因此,不允许 int 类型的值转义到外部(非 asm.js)JavaScript 代码中。
那么引擎如何评估以下 ASM.js 代码?因为如果参数 x 和 y 具有不同的符号,结果可能会不同。我们如何为它生成 AOT 代码?
function foo(start, end) {
start = start|0; // start is int.
end = end|0; // start is int.
return +((end - start)|0);
}
【问题讨论】:
标签: emscripten asm.js