Asm.js
Jump to navigation
Jump to search
http://anvaka.github.io/asmalidator/
Uses a prologue directive
function MyAsmModule() {
"use asm";
// module body
}
Example
function GeometricMean(stdlib, foreign, buffer) {
"use asm";
var exp = stdlib.Math.exp;
var log = stdlib.Math.log;
var values = new stdlib.Float64Array(buffer);
function logSum(start, end) {
start = start|0;
end = end|0;
var sum = 0.0, p = 0, q = 0;
// asm.js forces byte addressing of the heap by requiring shifting by 3
for (p = start << 3, q = end << 3; (p|0) < (q|0); p = (p + 8)|0) {
sum = sum + +log(values[p>>3]);
}
return +sum;
}
function geometricMean(start, end) {
start = start|0;
end = end|0;
return +exp(+logSum(start, end) / +((end - start)|0));
}
return { geometricMean: geometricMean };
}
Types
- int: x|0
- double: +x
GC Notes
I think I'm going to use a copy garbage collector with two level pointers. So there will be a block of pointers that don't move and all pointer go through that block. I can form a single linked list of the unused pointers, a stack; as I deallocate pointers, push them on the pointer stack, as I need them, pop them off.