asm.js just gives them the types, which makes things easier, but it all builds upon the existing power of JS VMs. See e.g. http://kripken.github.io/mloc_emscripten_talk/sotu.html#/16