I've been trying to optimize image manipulation and I couldn't get V8 to
emit integer division instructions. Does V8 currently emit any integer
division instructions? It seems odd that it wouldn't because it does have
the capability to emit them (see LDivI). I was going to submit a bug but
wanted to check first that this really is the case.
When using typed arrays, division causes lots of conversions to and from
doubles. Since V8 does range analysis, it should be possible to emit
integer division for at least the case with non-negative dividends and
positive divisors when the target location is an integer. I hacked up a
quick proof of concept yesterday and got an easy 2x speedup (for converting
a premultiplied alpha image to non-premultiplied alpha). This puts V8 at
the speed of optimized C code and seems like too good an optimization to
pass up. This optimization would also be useful for tools like emscripten.
function undoPremultiplication(image, w, h) {
for (var y = 0, i = 0; y < h; y++) {
for (var x = 0; x < w; x++, i += 4) {
var alpha = image[i + 3];
if (alpha > 0) {
image[i + 0] = image[i + 0] * 0xFF / alpha;
image[i + 1] = image[i + 1] * 0xFF / alpha;
image[i + 2] = image[i + 2] * 0xFF / alpha;
}
}
}
}
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users