根据规范,ASM.js中的"int“类型没有符号性。
,int类型是32位整数的类型,在这种类型中,签名性是未知的.在asm.js中,变量的类型从来没有已知的符号性。这允许将它们编译为32位整数寄存器和内存单词.但是,这种表示会在有符号数字和无符号数字之间造成重叠,从而导致在确定它们所代表的JavaScript数字时出现歧义。例如,位模式0 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);
}发布于 2020-08-17 16:31:40
|0将转换为有符号整数。因此,该函数中的所有值和操作都进行了签名。
(然而,对于减法,这个符号无论如何都不重要-它是一个用于有符号或无符号的CPU指令,参见How the value of type "i32" is evaluated in WebAssembly?)
https://stackoverflow.com/questions/63381584
复制相似问题